Docker核心技术-深入理解

408 阅读4分钟

Docker 是一种运行于Linux和Windows等系统上的软件,用于创建、管理和编排容器。

docker的运作流程可以理解成: 去仓库(码头)把镜像(集装箱) 拉到 本地,通过运行(容器) 命令 把 镜像运行起来。

三个核心组成

1.镜像 — 集装箱

Docker镜像 - images:

一系列的文件 (采用linux文件联合功能-不同文件夹下的文件归类到同一目录下可见)

Docker 通过存储引擎(新版本采用快照机制)的方式来实现镜像层堆栈,并保证多镜像层对外展示为统一的文件系统。

查看镜像分层可以通过 docker image inspect 命令:

在Docker 主机上运行 dcoker image ls 命令:

Docker主机上获得镜像的操作被称为拉取(pulling),下面是 拉取ubuntu:latest镜像的命令:

docker image pull ubuntu:latest

2.仓库 — 超级码头

仓库的作用:把自己的镜像传输到仓库 再从仓库拉到另一个地方 实现传输的过程

仓库地址:

官方: hub.docker.com

国内:c.163.com (网易蜂巢)

国内通过配置阿里云加速器来实现镜像加速:

cr.console.aliyun.com/cn-hangzhou…

3.容器 — 运行程序的地方

容器 Containers:

容器的本质就是一个进程 可以想象成一个虚拟机。

基于镜像运行起来的容器属于多级分层结构:

只有最上面那一层可以写,下面的分层只能读, 同一个镜像 可以生成多个容器 独立运行。

通过 docker container ls 命令查看全部处于运行状态的容器

通过 docker container run 命令运行容器

执行 docker container exec 命令,可以将Shell 连接到一个运行中的容器终端。

三个核心命令

build 构建: 构建镜像

ship 运输:运输镜像 从仓库或主机上运输

run 运行:运行的镜像就是一个容器

Docker 引擎

Docker 引擎 由如下主要的组件构成:Docker客户端( Docker Client) 、Docker守护进程(Docker daemon)、containerd 以及 runc。它们共同负责容器的创建和运行。

Docker daemon: 是单一的二进制文件,包含诸如Docker客户端、Docker API 、容器运行时、镜像构建时等。

daemon 的主要功能包含镜像管理、镜像构建、REST API、身份验证、安全、核心网路以及编排。

runc: runc实质上是一个轻量级、针对Libcontainer进行了包装的命令行交互工具。

runc生来只有一个作用——创建容器,这一点它非常拿手,速度很快!不过它是一个 CLI包装器,实质上就是一个独立运行的容器运行时工具。

containerd: 它的主要任务是容器生命周期管理——start | stop | pause | rm...

Docker引擎技术中,containerd 位于 daemon 和 runc 所在的OCI层之间。随着时间的推移,containerd由原来仅用于生命周期管理到现在 被赋予更多的功能,比如镜像管理等。

启动一个新的容器

常用的启动容器的方法就是使用Docker命令行工具。下面的docker container run 命令会基于alpine:latest镜像 启动一个新容器。

docker container run --name ctrl -it alpine:latest sh

当使用Docker命令行工具执行如上命令时,Docker客户端会将其转换为合适的API 格式,并发送到正确的API端点。

一旦 daemon接收到创建新容器的命令,它就会向containerd发出调用。daemon 已经不再包含任何创建容器的代码了。

daemon 使用一种CRUD风格的API,通过gRPC与container 进行通信。

虽然名叫containerd,但是它并不负责创建容器,而是指挥runc去做。containerd将Docker镜像转换为OCI bundle,并让runc基于此创建一个新的容器。

然后,runc 与操作系统内核接口进行通信,基于所有必要的工具(Namespace、CGroup等)来创建容器。容器进程作为runc的子进程启动,启动完毕后,runc将会退出。

shim: 是实现无daemon容器,用于将运行中的容器与daemon解耦,以便进行daemon升级等操作,是不可或缺的工具。

Docker 常用命令汇总

Docker 常用命令汇总>>