Docker & K8s

虚拟化技术演进

  1. 物理机时代:多个应用程序可能会跑在一台机器上
  1. 虚拟机时代:一台物理机器安装多个虚拟机(VM),一个虚拟机跑多个程序
  1. 容器化时代:一台物理机安装多个容器实例(container),一个容器跑多个程序

容器化技术不需要虚拟出整个操作系统,只需要虚拟一个小规模的环境即可,而且启动速度很快,除了运行其中应用以外,基本不消耗额外的系统资源。Docker是应用最为广泛的容器技术,通过打包镜像,启动容器来创建一个服务。

大多数人谈论 Docker 时说的是 Docker Engine,这只是一个构建和运行的容器。

在运行容器前需要编写Docker File,通过 dockerFile 生成镜像,然后才能运行 Docker 容器。

Docker File 定义了运行镜像(image)所需的所有内容,包括操作系统和软件安装位置。一般情况下都不需要从头开始编写 Docker File,在 Docker Hub 中有来自世界各地的工程师编写好的镜像,你可以基于此修改。

尽管Docker为容器化的应用程序提供了开放标准,但随着容器越来越多出现了一系列新问题:

  • 如何协调和调度这些容器?
  • 如何在升级应用程序时不会中断服务?
  • 如何监视应用程序的运行状况?
  • 如何批量重新启动容器里的程序?

Google 利用在容器管理多年的经验和专业知识推出了 k8s,主要用于自动化部署应用程序容器,可以支持众多容器化工具包括现在非常流行的Docker。

从架构设计层面,我们关注的可用性,伸缩性都可以结合k8s得到很好的解决,如果你想使用微服务架构,搭配k8s,真的是完美,再从部署运维层面,服务部署,服务监控,应用扩容和故障处理,k8s都提供了很好的解决方案。主要包括以下几点:

  • 服务发现与调度
  • 负载均衡
  • 服务自愈
  • 服务弹性扩容
  • 横向扩容
  • 存储卷挂载

如果你非要拿 Docker 和 k8s 进行比较,其实你更应该拿Docker Swarm和k8s比较。

Alpine

Alpine 操作系统是一个面向安全的轻型 Linux 发行版。它不同于通常 Linux 发行版,Alpine 采用了 musl libc 和 busybox 以减小系统的体积和运行时资源消耗,但功能上比 busybox 又完善的多,因此得到开源社区越来越多的青睐。在保持瘦身的同时,Alpine 还提供了自己的包管理工具 apk,可以通过 https://pkgs.alpinelinux.org/packages 网站上查询包信息,也可以直接通过 apk 命令直接查询和安装各种软件。

Docker容器三个主要概念

  1. 镜像
    Docker镜像里包含了已打包的应用程序及其所依赖的环境。它包含应用程序可用的文件系统和其他元数据,如镜像运行时的可执行文件路径。

  2. 镜像仓库
    Docker镜像仓库用于存放Docker镜像,以及促进不同人和不同电脑之间共享这些镜像。当编译镜像时,要么可以在编译它的电脑上运行,要么可以先上传镜像到一个镜像仓库,然后下载到另外一台电脑上并运行它。某些仓库是公开的,允许所有人从中拉取镜像,同时也有一些是私有的,仅部分人和机器可接入。

  3. 容器
    Docker容器通常是一个Linux容器,它基于Docker镜像被创建。一个运行中的容器是一个运行在Docker主机上的进程,但它和主机,以及所有运行在主机上的其他进程都是隔离的。这个进程也是资源受限的,意味着它只能访问和使用分配给它的资源(CPU、内存等)。

删除docker容器和镜像

docker image is being used by stopped container eca596ce0f9d
需要先删除引用该镜像的容器

docker ps -a # 查看所有容器
docker rm eca596ce0f9d # 删除指定容器
docker rm $(docker ps -a -q) # 删除所有未运行的容器
docker container prune # 快速删除已退出的容器
docker rm -f <container id> # 删除正在运行的容器
docker rmi $(docker images -q) # 删除所有镜像
docker images # 查看镜像

docker rmi <image id> 删除指定镜像

docker run 基于镜像新建容器
docker start/stop/restart 启动/关闭/重启容器

一个精简的dockerfile

FROM golang:1.16 as builder

WORKDIR /app
COPY . .
RUN GOOS=linux GOARCH=amd64 go build -o hello .

FROM alpine:latest

WORKDIR /app
COPY --from=builder /app/hello /app

CMD ["./hello"]
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容