Docker 镜像(Image)

这篇博客详细介绍了Docker镜像的管理,包括如何获取、列出、查看、删除和创建镜像,以及如何使用Dockerfile创建镜像,还涉及到镜像的存储和迁移。重点讲解了docker pull、docker images、docker inspect、docker history、docker rmi等关键命令的使用方法。

Docker 镜像类似于虚拟机镜像,可以将它理解为一个只读的模板 。例如,一个镜像可以包含一个基本的操作系统环境,里面仅安装了 Apache 应用程序(或用户需要的其他软件) 。 可以把它称为一个 Apache 镜像 。镜像是创建 Docker 容器的基础 。通过版本管理和增量的文件系统, Docker 提供了一套十分简单的机制来创建和更新现有的镜像,用户甚至可以从网上下载一个已经做好的应用镜像,并直接使用 。
 

获取镜像:docker [image] pull NAME [ :TAG] 。

docker pull ubuntu: 18. 04  获取一个 Ubuntu 18.04 系统的基础镜像

docker pull ubuntu   下载一个最新版本的Ubunt操作系统的镜像,如果不显式指定TAG, 则默认会选择la迳釭标签,这会下载仓库中最新版本的镜像。

pull 子命令支持的 选项主要包括:

  • -a, --all-ags=trueifalse: 是否获取仓库中的所有镜像,默认为否;
  • --disable-content-trust:取消镜像的内容校验,默认为真。
     

使用images命令列出镜像

docker images 

  • 来自于哪个仓库, 比如 ubuntu 表示 ubuntu 系列的基础镜像;
  • 镜像的标答信息, 比如 18.04 、 latest 表示不同的版本信息。 标签只是标记, 并不能标识镜像内容;
  • 镜像的ID(唯一标识镜像), 如果两个镜像的ID 相同, 说明它们实际上指向了同一个镜像, 只是具有不同标签名称而已;
  • 创建时间, 说明镜像最后的更新时间;
  • 镜像大小, 优秀的镜像往往体积都较小。
     

 images子命令主要支持如下选项, 用户可以自行进行尝试:

  • -a, --all 式rue I false: 列出所有(包括临时文件)镜像文件,默认为否;
  • --digests=trueifalse: 列出镜像的数字摘要值,默认为否;
  • -f, --filer=[] : 过滤列出的镜像, 如dangling 式rue 只显示没有被使用的镜像;也可指定带有特定标注的镜像等;
  • --format="TEMPLATE" : 控制输出格式,如. ID代表ID信息,.Repository代表仓库信息等;
  • --no-七rune吐rueI false: 对输出结果中太长的部分是否进行截断,如镜像的ID信息,默认为是;
  • -q, --quiet式rueI false: 仅输出ID信息, 默认为否。
     

使用tag命令添加镜像标签

docker tag ubuntu:latest myubuntu:latest

myubuntu:latest镜像的ID跟ubun四: lates七是完全一致的,它们实际上指向了同一个镜像文件,只是别名不同而巳。docker tag命令添加的标签实际上起到了类似链接的作用。

使用inspect命令查看详细信息

docker inspect ubuntu:latest

上面代码返回的是一 个 JSON 格式的消息, 如果我们只要其中一项内容时, 可以使用 -f 来指定, 例如, 获取镜像的RepoTags:

docker inspect --format='{{.RepoTags}}' ubuntu:latest

docker inspect --format='{{.RepoTags}}{{.Created}}-{{range .ContainerConfig.Hostname}}' ubuntu:latest

使用 hitory 命令查看镜像历史

docker history ubuntu:latest

注意, 过长的命令被自动截断了, 可以使用前面提到的 --no-trunc 选项来输出完整命令。

搜寻镜像

使用 docker search 命令可以搜索Docker Hub 官方仓库中的镜像。 语法为 docker search [option] keyword。 支持的
命令选项主要包括:

  • -f, --filter filter: 过滤输出内容;
  • - -format string: 格式化输出内容;
  • --limit int:限制输出结果个数, 默认为 25 个;
  • --no-trunc: 不截断输出结果。
     

docker search nginx

例如, 搜索官方提供的带 nginx关键字的镜像, 如下所示:
docker search --filter=is-official=true nginx

搜索所有收藏数超过10的,关键词为nginx的镜像,如下所示:

docker search --filter=stars=10 nginx

删除和清理镜像

使用 docker rmi 或 docker image rm 命令可以删除镜像, 命令格式为 docker rmi IMGE [IMAGE ... ], 其中 IMAGE 可以为标签或 ID。支持选项包括:

  • -f, -force: 强制删除镜像, 即使有容器依赖它;
  • -no-prune: 不要清理未带标签的父镜像。

使用标签删除镜像

docker rmi myubuntu:latest

当同一个镜像拥有多个标签的时候, docker rmi 命令只是删除了该镜像多个标签中的指定标签而巳, 并不影响镜像文件。

但当镜像只剩下 一个标签的时候就要小心了, 此时再使用 docker rmi 命令会彻底删除镜像。

使用镜像ID来删除镜像

docker rmi 94e814e2efa8

当使用 docker rmi 命令, 并且后面跟上镜像的 ID (也可以是能进行区分的部分ID串前缀)时, 会先尝试删除所有指向该镜像的标签, 然后删除该镜像文件本身。

注意, 当有该镜像创建的容器存在时, 镜像文件默认是无法被删除的。

如果要想强行删除镜像, 可以使用-f参数:

docker rmi -f 94e814e2efa8

注意, 通常并不推荐使用-f参数来强制删除一个存在容器依赖的镜像。 正确的做法是,先删除依赖该镜像的所有容器, 再来删除镜像。

清理镜像

使用Docker 一段时间后, 系统中可能会遗留一些临时的镜像文件, 以及一些没有被使用的镜像, 可以通过docker image prune命令来进行清理。
支待选项包括:

  • -a, -all: 删除所有无用镜像, 不光是临时镜像;
  • -filter filter: 只清理符合给定过滤器的镜像;
  • -f, -force: 强制删除镜像, 而不进行提示确认。

docker image prune-f

创建镜像

基于已有容器创建

该方法主要是使用 docker [container] commit命令。

命令格式为 docker [container] commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]], 主要选项包括:

  • -a, --author="": 作者信息;
  • -c, - -change=[] : 提交的时候执行 Dockerfle指令, 包括 CMD|ENTRYPOINT |ENV|EXPOSE|LABEL|ONBUILD|USER|VOLUME|WORKIRNVIEXPOSEILABELIONBUILDIUSERIVOLUMEIWORKIR等;
  • -m, - -message="": 提交消息;
  • -p, --pause=true: 提交时暂停容器运行。

基于本地模板导入

基于 Dockerfile 创建

存出和载人镜像

存出镜像

如果要导出镜像到本地文件,可以使用 docker [image] save 命令 。 该命令支持 -o 、 -output string 参数 , 导出镜像到指定的文件中 。

docker save -o ubuntu_latest.tar ubuntu:latest

之后,用户就可以通过复制 ubuntu_latest.tar 文件将该镜像分享给他人。

载入镜像

可以使用 docker [image] load 将导出的 tar 文件再导人到本地镜像库。支持 -i, -input string 选项,从指定文件中读人镜像内容。

docker load -i ubuntu_latest.tar  (Loaded image: ubuntu:latest)

上传镜像

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值