一、Docker引擎

  Docker 引擎由许多专用的工具协同工作,从而可以创建和运行容器,主要的组件构成如下:Docker 客户端(Docker Client)、Docker 守护进程(Docker daemon)、containerd 以及 runc。总体逻辑如下图所示。

 

1、runc

  runc 是 OCI 容器运行时规范的参考实现,主要用于创建容器

 

2、Docker daemon 

  在对 Docker daemon 的功能进行拆解后,所有的容器执行逻辑被重构到一个新的名为 containerd(发音为 container-dee)的工具中。它的主要任务是容器的生命周期管理——start | stop | pause | rm....
3、shim
  shim 是实现无 daemon 的容器(用于将运行中的容器与 daemon 解耦,以便进行 daemon 升级等操作)不可或缺的工具。一旦容器创建完毕,对应的 runc 进程就会退出,一旦容器进程的父进程 runc 退出,相关联的 containerd-shim 进程就会成为容器的父进程。

 

二、镜像

  镜像可以理解为一种构建时(build-time)结构,而容器可以理解为一种运行时(run-time)结构,如下图所示。

 

Docker 主机安装之后,本地并没有镜像。

1、拉取镜像

  docker image pull 是下载镜像的命令,默认情况下,镜像会从 Docker Hub 的仓库中拉取。docker image pull alpine:latest 命令会从 Docker Hub 的 alpine 仓库中拉取标签为 latest 的镜像。

 Linux Docker 主机本地镜像仓库通常位于 /var/lib/docker/<storage-driver>,Windows Docker 主机则是 C:\ProgramData\docker\windowsfilter。

可以使用以下命令检查 Docker 主机的本地仓库中是否包含镜像。

$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE

  Docker 镜像存储在镜像仓库服务(Image Registry)当中。镜像仓库服务包含多个镜像仓库(Image Repository)。同样,一个镜像仓库中可以包含多个镜像。

  Docker Hub 也分为官方仓库(Official Repository)和非官方仓库(Unofficial Repository)。

2、官方仓库拉取镜像

  从官方仓库拉取镜像时,docker image pull 命令的格式如下。

#  docker image pull <repository>:<tag>

# 在之前的 Linux 示例中,通过下面的两条命令完成 Alpine 和 Ubuntu 镜像的拉取。

docker image pull alpine:latest
docker image pull ubuntu:latest

docker image pull mongo:3.3.11
//该命令会从官方Mongo库拉取标签为3.3.11的镜像

 注意:如果没有在仓库名称后指定具体的镜像标签,则 Docker 会假设用户希望拉取标签为 latest 的镜像。

3、非官方仓库拉取镜像

  下面通过示例来展示如何从 tu-demo 仓库中拉取 v2 这个镜像,其中镜像的拥有者是 Docker Hub 账户 nigelpoulton

docker image pull nigelpoulton/tu-demo:v2
//该命令会从以我自己的 Docker Hub 账号为命名空间的 tu-demo 库中下载标签为 v2 的镜像

 

拉取镜像  docker image pull

查看已经拉取的镜像    docker image ls

构建一个新的镜像    docker image build

移除全部的悬虚镜像    docker image prune

镜像搜索   docker search  镜像仓库

镜像删除   docker image remove 

 

三、容器

  容器是镜像的运行时实例。

1、启动容器

  基础的格式 docker container run <image> <app>中,指定了启动所需的镜像以及要运行的应用

  ocker container run -it ubuntu /bin/bash 则会启动某个 Ubuntu Linux 容器,并运行 Bash Shell 作为其应用。

2、停止容器

  docker container stop

3、再次启动该容器

  docker container start

4、删除容器

  docker container rm

 当退出容器而没有终止容器运行时,可以通过docker container exec 命令将终端重新连接到 Docker

docker container exec -it container bash