Py学习  »  docker

Docker之Docker镜像操作

海盗船长没有船y • 3 年前 • 293 次点击  

1.获取镜像

通过使用 docker [image] pull 命令直接从 Docker Hub 镜像源来下载镜像。 该命令的格式为

docker [image] pull NAME [:TAG] 
  • 1
  • 1
  • 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
  • 1
  • 1

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
  • 1
  • 1

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 目录下。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/74760
 
293 次点击