社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  docker

Docker之Docker镜像操作

海盗船长没有船y • 5 年前 • 460 次点击  

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