一个 Docker 镜像往往是由多个镜像层(可读层)叠加而成,每个层仅包含了前一层的差异部分,单个镜像层也往往可以看作镜像使用,当我们启动一个容器的时候,Docker 会加载镜像层并在其上添加一个可写层。容器上所做的任何更改,譬如新建文件、更改文件、删除文件,都将记录与可写层上,任何对容器的操作均不会影响到镜像。
本品内容主要介绍:关于 Docker 镜像、Docker 命令应用实践
大家如果曾经使用过 VM,则可以把 Docker 镜像理解为 VM 模板,VM 模板就像停止运行的 VM,而 Docker 镜像就像停止运行的容器;而作为一名研发人员,则可以将镜像理解为类(Class)。
上图是一张,Docker 的命令导图,从中可以看出,Docker 包含三个基本概念,分别是镜像(Image)、容器(Container)和仓库(Repository)。镜像是 Docker 运行容器的前提,仓库是存放镜像的场所,可见镜像更是 Docker 的核心。
一个 Docker 镜像往往是由多个镜像层(可读层)叠加而成,每个层仅包含了前一层的差异部分,单个镜像层也往往可以看作镜像使用,当我们启动一个容器的时候,Docker 会加载镜像层并在其上添加一个可写层。容器上所做的任何更改,譬如新建文件、更改文件、删除文件,都将记录与可写层上,任何对容器的操作均不会影响到镜像。
容器与镜像最大的区别就在于可写层上。如果运行中的容器修改了现有的一个已存在的文件,那该文件将会从可写层下的只读层复制到可写层,该文件的只读版本仍然存在,只是已经被可写层中该文件的副本所隐藏。其中,多个容器共享镜像的结构如下所示:
总的来说:镜像由多个层组成,每层叠加之后,从外部看来就如一个独立的对象。镜像内部是一个精简的操作系统(OS),同时还包含应用运行所必须的文件和依赖包。镜像可以理解为一种构建时(build-time)结构,而容器可以理解为一种运行时(run-time)结构,
镜像分层结构特点/注意事项:
我们在使用 Docker 拉取镜像前,往往需要登陆到一个 Docke r镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub!!!
# 登陆语法
$ docker login -u 用户名 -p 密码
# 登出语法
$ docker logout
docker search:从 Docker Hub 查找镜像。
# 语法
$ docker search [OPTIONS] TERM
OPTIONS 说明:
–automated :
只列出 automated build 类型的镜像;–no-trunc :
显示完整的镜像描述;-f <过滤条件>:
列出收藏数不小于指定值的镜像。# 实例
从 Docker Hub 查找所有镜像名包含 centos,并且收藏数大于 3 的镜像
$ docker search -f stars=3 centos
参数说明:
docker pull:从镜像仓库中拉取或者更新指定镜像
# 语法
$ docker pull [OPTIONS] NAME[:TAG|@DIGEST]
OPTIONS说明:
-a :
拉取所有 tagged 镜像;–disable-content-trust :
忽略镜像的校验,默认开启。# 实例
$ docker pull ubuntu:18.04
docker images:列出本地镜像。
# 语法
$ docker images [OPTIONS] [REPOSITORY[:TAG]]
OPTIONS 说明:
-a
:列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层);–digests
:显示镜像的摘要信息;-f
:显示满足条件的镜像;–format
:指定返回值的模板文件;–no-trunc
:显示完整的镜像信息;-q
:只显示镜像ID。# 实例
$ docker images
查看本地镜像列表
docker rmi :删除本地一个或多个镜像。
# 语法
$ docker rmi [OPTIONS] IMAGE [IMAGE...]
OPTIONS 说明:
-f
:强制删除;–no-prune
:不移除该镜像的过程镜像,默认移除。# 实例
$ docker rmi -f ubuntu:18.04
docker tag:标记本地镜像,将其归入某一仓库。
# 语法
$ docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]
# 实例
将镜像 ubuntu:18.04 标记为 runoob/ubuntu:v3 镜像。
$ docker tag ubuntu:18.04 runoob/ubuntu:v3
$ docker images
docker build 命令用于使用 Dockerfile 创建镜像。
# 语法
$ docker build [OPTIONS] PATH | URL | -
OPTIONS 说明:
–build-arg=[]
:设置镜像创建时的变量;–cpu-shares
:设置 cpu 使用权重;–cpu-period
:限制 CPU CFS周期;–cpu-quota
:限制 CPU CFS配额;–cpuset-cpus
:指定使用的CPU id;–cpuset-mems
:指定使用的内存 id;–disable-content-trust
:忽略校验,默认开启;-f
:指定要使用的Dockerfile路径;–force-rm
:设置镜像过程中删除中间容器;–isolation
:使用容器隔离技术;–label=[]
:设置镜像使用的元数据;-m
:设置内存最大值;–memory-swap
:设置Swap的最大值为内存+swap,"-1"表示不限swap;–no-cache
:创建镜像的过程不使用缓存;–pull
:尝试去更新镜像的新版本;–quiet
,-q
:安静模式,成功后只输出镜像 ID;–rm
:设置镜像成功后删除中间容器;–shm-size
:设置/dev/shm的大小,默认值是64M;–ulimit
:Ulimit配置。–squash
:将 Dockerfile 中所有的操作压缩为一层。–tag
,-t
: 镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签。–network
: 默认 default。在构建期间设置RUN指令的网络模式docker history:查看指定镜像的创建历史。
# 语法
$ docker history [OPTIONS] IMAGE
OPTIONS说明:
-H :
以可读的格式打印镜像大小和日期,默认为true;–no-trunc :
显示完整的提交记录;-q :
仅列出提交记录ID。# 实例
查看本地镜像 runoob/ubuntu:v3 的创建历史
$ docker history runoob/ubuntu:v3
docker save:将指定镜像保存成 tar 归档文件。
语法
$ docker save [OPTIONS] IMAGE [IMAGE...]
OPTIONS 说明:
-o
:输出到的文件。