1.获取镜像
通过使用 docker [image] pull
命令直接从 Docker Hub 镜像源来下载镜像。 该命令的格式为
docker [image] pull NAME [:TAG]
- NAME 是镜像仓库名称(用来区分镜像)
- TAG 是镜像的标签(往往用来表示版本信息)。
通常情况下, 描述一个镜像需要包括 “名称+标签“ 信息。
对于Docker镜像来说, 如果不显式指定TAG, 则默认会选择latest标签,这会下载仓库中最新版本的镜像。
一般来说, 镜像的latest 标签意味着该镜像的内容会跟踪最新版本的变更而变化, 内容是不稳定的。因此,从稳定性上考虑,不要在生产环境中忽略镜像的标签信息或使用默认的latest 标记的镜像
如果从非官方 的仓库 下载,则 需要在仓库 名称前指定完整的仓库地址。例如从网易蜂巢的镜像源来下载ubuntu:18.04镜像,可以使用如下命令,此时下载的镜像名称为hub.c.163.com/public/ubuntu:18.04
$ docker pull hub.c.163.com/public/ubuntu:18.04
pull 子命令支持的 选项主要包括:
-a, --all-tags=true|false
: 是否获取仓库中的所有镜像,默认为否;--disable-content-trust
:取消镜像的内容校验,默认为真。
另外,有时需要使用镜像代理服务来加速Docker 镜像获取 过程 ,可以在Docker服务启动配置中增加--registry-mirror=proxy_URL
来指定镜像代理服务地址(如https://registry.docker-en.com)
2.查看镜像信息
1. 使用images命令列出镜像
使用docker images
或docker image ls
命令可以列出本地主机上已有镜像的基本信息。
- 来自于哪个仓库,比如
ubuntu
表示ubuntu
系列的基础镜像; - 镜像的标答信息,比如 18.04、latest 表示不同的版本信息。标签只是标记,并不能标识镜像内容;
- 镜像的ID(唯一标识镜像):如果两个镜像的ID相同,说明它们实际上指向了同一个镜像,只是具有不同标签名称而已;
- 创建时间,说明镜像最后的更新时间;
- 镜像大小,优秀的镜像往往体积都较小。
images子命令主要支持如下选项, 用户可以自行进行尝试:
-a, --all true | false
: 列出所有(包括临时文件)镜像文件,默认为否;--digestS=true|false
: 列出镜像的数字摘要值,默认为否;-f, --filter=[]
: 过滤列出的镜像, 如dangling=rue 只显示没有被使用的镜像;也可指定带有特定标注的镜像等;--format="TEMPLATE"
: 控制输出格式,如.ID代表ID信息,.Repository代表仓库信息等;--no-trunec=true|false
: 对输出结果中太长的部分是否进行截断,如镜像的ID信息,默认为是;-q, --quiet=true|false
: 仅输出ID信息, 默认为否。
其中, 还支持对输出结果进行控制的选项,如-f. --filter=[]
、--no-trune=true|false
、 -q
、 --quie=true|false
等。
更多子命令选项还可以通过man docker-images
来查看。
2. 使用tag命令添加镜像标签
为了方便在后续工作中使用特定镜像,还可以使用docker tag
命令来为本地镜像任
意添加新的标签。 例如,添加 一个新的myubuntu:latest
镜像标签:
docker tag ubuntu:latest myubuntu:latest
myubuntu:latest
镜像的ID跟ubuntu:latest
是完全一致的,它们实际上指向了同一个镜像文件,只是别名不同而巳。docker tag
命令添加的标签实际上起到了类似链接的作用。
3.使用inspect命令查看详细信息
使用docker [image] inspect
命令可以获取该镜像的详细信息,包括制作者、 适应架构、各层的数字摘要等:
4.使用 history 命令查看镜像历史
既然镜像文件由多个层组成,那么怎么知道各个层的内容具体是什么呢?这时候可以使用history
子命令, 该命令将列出各层的创建信息。
注意, 过长的命令被自动截断了, 可以使用前面提到的 --no-trunc
选项来输出完整命令。
3.搜索镜像
使用 docker search
命令可以搜索Docker Hub 官方仓库中的镜像。 语法为 docker search [option] keyword
。
支持的命令选项主要包括:
- -f,
--filter filter
: 过滤输出内容; --format string
: 格式化输出内容;--limit int
:限制输出结果个数, 默认为 25 个;--no-trunc
: 不截断输出结果。
返回了很多包含关键字的镜像,其中包括镜像名字、描述、收藏数(表示该镜像的受欢迎程度)、是否官方创建、是否自动创建等。默认的输出结果将按照星级评价进行排序。
4.删除和清理镜像
1 使用标签删除镜像
使用 docker rmi
或 docker image rm
命令可以删除镜像, 命令格式为 docker rmi IMAGE [IMAGE ... ]
, 其中 IMAGE 可以为标签或 ID。
支持选项包括:
- -f,
-force
: 强制删除镜像, 即使有容器依赖它; -no-prune
: 不要清理未带标签的父镜像。
当同一个镜像拥有多个标签的时候,
docker rmi
命令只是删除了该镜像多个标签中的指定标签而巳,并不影响镜像文件。
2. 使用镜像ID来删除镜像
当使用 docker rmi
命令,并且后面跟上镜像的 ID (也可以是能进行区分的部分ID串前缀)时,会先尝试删除所有指向该镜像的标签,然后删除该镜像文件本身。
如果要想强行删除镜像, 可以使用-f参数;
通常并不推荐使用-f参数来强制删除一个存在容器依赖的镜像。 正确的做法是,先删除依赖该镜像的所有容器, 再来删除镜像。
3. 清理镜像
使用Docker 一段时间后,系统中可能会遗留一些临时的镜像文件,以及一些没有被使用的镜像,可以通过docker image prune
命令来进行清理。
支待选项包括:
- -a,
-all
: 删除所有无用镜像, 不光是临时镜像; -filter filter
: 只清理符合给定过滤器的镜像;- -f,
-force
: 强制删除镜像, 而不进行提示确认。
5.创建镜像
1.基于已有容器创建
该方法主要是使用 docker [container] commit
命令。
命令格式为 docker [container] commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
, 主要选项包括:
- -a,
--author=" "
: 作者信息; - -c,
--change=[]
: 提交的时候执行 Dockerfle指令, 包括CMD|ENTRYPOINT|ENV|EXPOSE|LABEL|ONBUILD|USER|VOLUME|WORKDIR
等; - -m,
--message=" "
: 提交消息; - -p,
--pause=true
: 提交时暂停容器运行。
2.基于本地模板导入
用户也可以直接从一个操作系统模板文件导人一个镜像,主要使用 docker [container] import
命令。 命令格式为 docker [image] import [OPTIONS] file|URL|-[REPOSITORY[:TAG ] ]
要直接导入一个镜像,可以使用 OpenVZ 提供的模板来创建,或者用其他已导出的镜像模板来创建。 OPENVZ 模板的下载地址为http://openvz.org/Download/templates/precreated 。
3.基于Dockerfile创建
基于Dockerfile创建是最常见的方式。Dockerfile是一个文本文件,利用给定的指令描述基于某个父镜像创建新镜像的过程。
创建镜像的过程可以使用 docker [image] build
命令,编译成功后本地将多出一个python:3 镜像:
6.存出和载入镜像
1. 存出镜像
如果要导出镜像到本地文件,可以使用 docker [image] save
命令。该命令支持-o
、-output string
参数,导出镜像到指定的文件中 。
例如,导出本地的 ubuntu:18.04 镜像为文件 ubuntu_18.04.tar ,如下所示 :
之后,用户就可以通过复制 ubuntu 18.04.tar
文件将该镜像分享给他人。
2.载入镜像
可以使用 docker [image] load
将导出的 tar 文件再导人到本地镜像库。支持 -i
、-input string
选项,从指定文件中读入镜像内容。
7.上传镜像
可以使用 docker [image] push
命令上传镜像到仓库,默认上传到 Docker Hub 官方仓库(需要登录)。命令格式为 docker [image]push NAME [:TAG] | [REGISTRY_HOST [ :REGISTRY_PORT] / ]NAME [:TAG ]
。
用户在 Docker Hub 网站注册后可以上传自制的镜像 。
例如,用户user上传本地的 test:latest
镜像,可以先添加新的标签 user/test:latest,然后用 docker [image ] push
命令上传镜像 :
第一次上传时,会提示输入登录信息或进行注册,之后登录信息会记录到本地~/.docker
目录下。