使用Docker镜像(docker镜像操作命令有哪些,并介绍它们的用法)
off999 2024-11-11 12:40 28 浏览 0 评论
写在前面
镜像是Docker三大核心概念中最重要的一部分,而Docker运行容器前需要本地存在对应的镜像,如果镜像不存在,Docker会尝试从默认的镜像仓库中下载(默认使用Docker Hub公共注册服务器的仓库),用户也可以通过配置来使用自定义的镜像仓库,笔者在前面就自定义了镜像仓库。
既然镜像这么重要,那么本篇就围绕镜像这一核心概念来具体介绍相关操作:(1)如何使用pull命令从Docker Hub仓库中下载镜像到本地;(2)如何查看本地已有的镜像信息和管理镜像标签;(3)如何在远端仓库中使用search命令进行搜索和过滤;(4)如何删除镜像标签和镜像文件;(5)如何创建用户定制的镜像并且保存为外部文件;(6)如何往Docker Hub仓库中推送自己的镜像。
获取镜像
镜像是运行容器的前提,因此首先是需要获取镜像,开发者可以使用docker [image] pull命令直接从官方的Docker Hub网站上进行获取,该命令的格式为docker [image] pull NAME[:TAG],其中NAME是镜像仓库名称,用来区分镜像,而TAG则是镜像的标签,一般用来表示版本信息,因此通常情况下描述一个镜像需要使用"名称+标签"这一格式。
举个例子,获取一个Ubuntu18.04系统的基础镜像可以使用如下命令:
[envythink@localhost ~]nbsp;docker pull ubuntu:18.04运行结果如下所示:
对于Docker镜像来说,如果后面不显式指定TAG,则默认会选择latest标签,也就是会下载仓库中最新版本的镜像。
此时上面的命令可以修改为:
[envythink@localhost ~]nbsp;docker pull ubuntu其实也就相当于执行docker pull ubuntu:latest命令。请注意,镜像的latest标签是最新版的,因此可能是不稳定的,所以在生产环境中一定不能使用默认的latest标签。
细心的你可能发现了在下载过程中,镜像文件是由若干层(layer)组成,像171857c49d0f这样的字符串其实就是该层的唯一id(完整的id包括256比特,64个十六进制字符组成)。使用docker pull命令下载镜像的时候,里面会输出镜像各层的信息,当不同的镜像包含相同的层时,本地仅存储层的一份内容,这无疑可以减少存储空间。
现在有一个问题,就是在不同的镜像服务器的情况下,可能会出现镜像重名的情况。也就是说,其实镜像的仓库名称中还应该添加仓库地址(register,注册服务器)作为前缀,如果你之前使用的是默认的官方DockerHub地址,就可以忽略该前缀。
举个例子,使用docker pull ubuntu:18.04命令其实就相当于执行docker pull register.hub.docker.com/ubuntu:18.04命令,即从默认的注册服务器DockerHub Register中的ubuntu仓库来下载标记为18.04的镜像。
由于官方镜像仓库在国外,因此访问速度是非常慢的,通常是从非官方仓库下载,此时需要在仓库名称前指定完整的仓库地址。举个例子,假设从网易蜂巢的镜像源来下载ubuntu:18.04的镜像,此时可以使用的命令如下:
docker pull hub.c.163.com/public/ubuntu:18.04当然这个pull命令支持添加一些选项参数,如-a或者--all-tags它的值可以是true或者false,表示是否获取仓库中的所有镜像,默认肯定是否。--disable-content-trust参数表示取消镜像的内容校验,默认是真。
前面也说过官方镜像仓库在国外,所以访问速度是非常慢的,同时为了避免每次执行命令前都添加register地址,因此可以使用镜像代理服务来加速Docker镜像的获取过程。CentOS系统只需在/etc/docker/daemon.json文件中添加一行配置即可,如下所示:
{"registry-mirrors": ["http://f1361db2.m.daocloud.io"]}当然也可以在启动配置参数中添加--registry-mirror=proxy_URL来指定镜像代理服务器地址。
为了后续演示的需要,这里先使用docker pull ubuntu:18.04命令来下载一个18.04版本的ubuntu系统镜像,然后就使用该镜像创建一个容器,并在其中运行bash命令,执行输出“Hello World”的命令,如下所示:
[envythink@localhost ~]nbsp;docker run -it ubuntu bash
root@cae6035fd1b2:/# echo "Hello World"
Hello World
root@cae6035fd1b2:/# exit查看镜像信息
使用images命令列出所有镜像
开发者可以使用docker images或者docker image ls命令来列出本地主机上已有的所有镜像的基本信息,如下所示:
[envythink@localhost ~]nbsp;docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest 9140108b62dc 8 hours ago 72.9MB
haproxy latest 4e531c2cb889 5 months ago 92.4MB
pxc latest a6a51beefff1 9 months ago 494MB
percona/percona-xtradb-cluster latest a6a51beefff1 9 months ago 494MB接下来详细解释一下上述列出的信息:
- REPOSITORY:表示来自哪个仓库。这里的ubuntu则表示ubuntu系列的基础镜像。
- TAG:表示镜像的标签。这里的latest表示最新的版本信息,请注意标签只是标记,并不能标识镜像内容。
- IMAGE ID:表示镜像的ID,注意这是镜像的唯一标识ID。如果两个镜像的ID相同,说明它们指向了同一个镜像,只是具有不同的标签名称而已。
- CREATED:表示创建时间,也就是镜像最后的更新时间。
- SIZE:表示镜像大小,一般来说比较优秀的镜像其体积就越小。
由于镜像ID非常重要,它唯一标识了镜像,因此在使用镜像ID的时候,可以使用该ID的前若干个字符组成的可区分串来代替完整的ID。TAG信息只是用来标记来自同一仓库的不同镜像,如ubuntu仓库的多个镜像,则使用TAG消息来区分不同的发行版本,如18.04、20.04等。SIZE信息只是表示该镜像的逻辑体积大小,实际上由于相同的镜像层本地只会存储一份,因此物理上占用的存储空间会小于各镜像的逻辑体积之和。
当然images也支持多种子命令,如-a或者--all=true|false表示列出所有(包含临时文件)镜像大小,默认是fasle。-f或者--filter=[]参数,它表示过滤列出的镜像,如dangling=true等,它只显示没有被使用的镜像,也可指定带有特定标注的镜像等。更多的子命令可以使用man docker-images命令来进行查看。
使用tag命令来添加镜像标签
一般来说,为了后续工作中使用特定镜像,会使用docker tag命令来为本地镜像任意添加新的标签。举个例子,给之前下载的ubuntu镜像添加一个新的envyubuntu:latest标签,如下所示:
[envythink@localhost ~]nbsp;docker tag ubuntu:latest envyubuntu:latest然后再次使用docker images命令来列举出本地主机上的镜像信息,可以看到多了一个envyubuntu:latest标签的镜像,如下所示:
[envythink@localhost ~]nbsp;docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
envyubuntu latest 9140108b62dc 8 hours ago 72.9MB
ubuntu latest 9140108b62dc 8 hours ago 72.9MB
haproxy latest 4e531c2cb889 5 months ago 92.4MB
pxc latest a6a51beefff1 9 months ago 494MB
percona/percona-xtradb-cluster latest a6a51beefff1 9 months ago 494MB这样后续就可以直接使用envyubuntu:latest来表示这个镜像,细心的你可能发现这个envyubuntu:latest镜像和之前的ubuntu:latest镜像两者的镜像ID一样,因此可以知道docker tag只是给原来的镜像添加了一个新的快捷访问方式,也就是CentOS中的链接。
使用inspect来查看详细信息
如果我们需要查看某个镜像的详细信息,可以使用docker inspect [image]命令来进行查看:
可以发现上面返回的是一个JSON格式的对象,但是显示的内容太多,如果只想其中某一项内容时,可以使用-f参数来进行过滤,如只想获取镜像的Architecture信息:
[envythink@localhost ~]nbsp;docker inspect envyubuntu:latest -f {{".Architecture"}}
amd64使用history命令查看镜像历史
前面也说过镜像文件由多个层组成,现在问题来了,如何知道每个层的具体内容?可以使用history命令来列出各层的创建信息。
举个例子,可以使用如下命令来查看envyubuntu:latest镜像的创建过程:
[envythink@localhost ~]nbsp;docker history envyubuntu:latest
IMAGE CREATED CREATED BY SIZE COMMENT
9140108b62dc 8 hours ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B
<missing> 8 hours ago /bin/sh -c mkdir -p /run/systemd && echo 'do… 7B
<missing> 8 hours ago /bin/sh -c [ -z "$(apt-get indextargets)" ] 0B
<missing> 8 hours ago /bin/sh -c set -xe && echo '#!/bin/sh' > /… 811B
<missing> 8 hours ago /bin/sh -c #(nop) ADD file:da80f59399481ffc3… 72.9MB 可以发现上面一些过长的命令被自动截断了,如果想查看完整的输出命令,可以使用--no-trunc选项参数来设置。
搜索镜像
开发者可以使用docker search [option] keyword命令来搜索Docker Hub官方仓库中的镜像。该命令支持的选项参数如下:(1)-f或者--filter filter表示过滤输出内容;(2)--format string表示格式化输出内容;(3)--limit int表示限制输出结果的个数,默认为25个;(4)--no-trunc表示不截断输出结果。
这些选项参数都不用记忆,用的使用时候使用man docker-search命令查看一下即可。举个例子,搜索官方提供的镜像中包含nginx关键字的镜像,如下所示:
[envythink@localhost ~]nbsp;docker search --filter=is-official=true nginx
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
nginx Official build of Nginx. 13785 [OK]再举个例子,搜索官方提供的镜像中所有收藏数超过8的包含tensorflow关键字的镜像:
[envythink@localhost ~]nbsp;docker search --filter=stars=8 tensorflow
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
tensorflow/tensorflow Official Docker images for the machine learn… 1766
jupyter/tensorflow-notebook Jupyter Notebook Scientific Python Stack w/ … 236
tensorflow/serving Official images for TensorFlow Serving (http… 97
xblaster/tensorflow-jupyter Dockerized Jupyter with tensorflow 54 [OK]
rocm/tensorflow Tensorflow with ROCm backend support 54
floydhub/tensorflow tensorflow 25 [OK]
bitnami/tensorflow-serving Bitnami Docker Image for TensorFlow Serving 14 [OK]
opensciencegrid/tensorflow-gpu TensorFlow GPU set up for OSG 12 从返回结果中可以看到有关镜像的基本信息,如镜像名称、描述、收藏数(受欢迎程度)、是否官方创建、是否自动创建等,注意默认的输出结果是按照星级评价来进行排序的。
其实这些在man docker-search命令中都有介绍:
删除和清理镜像
使用标签删除镜像
开发者可以使用docker rmi或者docker image rm命令来删除镜像,相应的命令格式为docker rmi IMAGE[IMAGE...],其中IMAGE可以是标签或者ID。
该命令支持的选项参数如下:(1)-f或者--force表示强制删除镜像,即使有容器依赖它;(2)-no-prune表示不清理未带标签的父镜像。
同样这些选项参数都不用记忆,用的时候使用man docker-image-rm命令查看一下即可。
举个例子,将之前创建的envyubuntu:latest镜像给删除,相应的命令如下:
[envythink@localhost ~]nbsp;docker image rm envyubuntu:latest
Untagged: envyubuntu:latest请注意我们删除上述envyubuntu:latest镜像的时候,本地的ubuntu:latest镜像是不受到任何影响的。当某一个镜像拥有多个标签的时候,此时执行docker image rm或者是docker rmi命令的时候,只是删除了该镜像多个标签中的指定标签而已,并不影响镜像文件,也就是仅仅删除了这个镜像的一个标签副本而已。
此时开发者可以确认一下,本地的ubuntu:latest镜像依旧也是存在的:
[envythink@localhost ~]nbsp;docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest 9140108b62dc 9 hours ago 72.9MB
haproxy latest 4e531c2cb889 5 months ago 92.4MB
pxc latest a6a51beefff1 9 months ago 494MB
percona/percona-xtradb-cluster latest a6a51beefff1 9 months ago 494MB但是需要注意,如果这个镜像只剩下一个标签,那么此时执行docker image rm或者是docker rmi命令的时候就会删除这个镜像文件的所有文件层。
使用镜像ID来删除镜像
前面说过当使用docker image rm或者是docker rmi命令的时候,其后面也是可以接镜像的ID(也可以是能进行区分的部分ID串前缀),此时会先尝试删除所有指向该镜像的标签,然后删除该镜像文件本身。因为多个标签指向的都是同一个镜像ID,所以最终肯定会删除该镜像本身。
但是需要注意,当有该镜像创建的容器存在时,镜像文件默认是无法被删除的。
举个例子,可以使用之前的ubuntu:latest镜像来创建一个简单的容器,并输出一句话:
[envythink@localhost ~]nbsp;docker run ubuntu:latest echo "hello,I am envy"
hello,I am envy接着使用docker ps -a命令来查看本机上存在的所有容器:
[envythink@localhost ~]nbsp;docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fd56a307081b ubuntu:latest "echo 'hello,I am en…" 24 seconds ago Exited (0) 23 seconds ago nostalgic_lewin可以看到这个容器就是基于前面的ubuntu:latest镜像而创建出来的,不过它的状态是退出而已。但是开发者是无法删除该ubuntu:latest镜像的,Docker会提示有容器正在运行,无法删除,如下所示:
[envythink@localhost ~]nbsp;docker image rm ubuntu:latest
Error response from daemon: conflict: unable to remove repository reference "ubuntu:latest" (must force) - container cae6035fd1b2 is using its referenced image 9140108b62dc且它告诉我们,如果想强行删除镜像,可以使用-f参数:
[envythink@localhost ~]nbsp;docker image rm -f ubuntu:latest
Untagged: ubuntu:latest
Untagged: ubuntu@sha256:bc2f7250f69267c9c6b66d7b6a81a54d3878bb85f1ebb5f951c896d13e6ba537但是笔者并不建议使用-f参数来强制删除一个存在容器依赖的镜像,正确的做法是先删除依赖该镜像的所有容器,再删除镜像。
第一步,查看本地已经存在的容器,如下所示:
[envythink@localhost ~]nbsp;docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fd56a307081b ubuntu:latest "echo 'hello,I am en…" 13 minutes ago Exited (0) 13 minutes ago nostalgic_lewin第二步,删除容器ID为fd56a307081b的容器,注意删除容器使用的命令是docker rm:
[envythink@localhost ~]nbsp;docker rm fd56a307081b
fd56a307081b第三步,查看当前本地主机上的所有镜像信息:
[envythink@localhost ~]nbsp;docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
envyubuntu latest 9140108b62dc 9 hours ago 72.9MB
ubuntu latest 9140108b62dc 9 hours ago 72.9MB第四步,使用镜像ID来删除镜像,此时会正常打印输出各层的信息:
[envythink@localhost ~]nbsp;docker image rm ubuntu:latest
Untagged: ubuntu:latest
Deleted: sha256:bc2f7250f69267c9c6b66d7b6a81a54d3878bb85f1ebb5f951c896d13e6ba567
Deleted: sha256:bc937250f69267c9c6b66d7b6a81a54d38726785f1ebb5f951c896d13e6b0978相关推荐
- 安全教育登录入口平台(安全教育登录入口平台官网)
-
122交通安全教育怎么登录:122交通网的注册方法是首先登录网址http://www.122.cn/,接着打开网页后,点击右上角的“个人登录”;其次进入邮箱注册,然后进入到注册页面,输入相关信息即可完...
- 大鱼吃小鱼经典版(大鱼吃小鱼经典版(经典版)官方版)
-
大鱼吃小鱼小鱼吃虾是于谦跟郭麒麟的《我的棒儿呢?》郭德纲说于思洋郭麒麟作诗的相声,最后郭麒麟做了一首,师傅躺在师母身上大鱼吃小鱼小鱼吃虾虾吃水水落石出师傅压师娘师娘压床床压地地动山摇。...
-
- 哪个软件可以免费pdf转ppt(免费的pdf转ppt软件哪个好)
-
要想将ppt免费转换为pdf的话,我们建议大家可以下一个那个wps,如果你是会员的话,可以注册为会员,这样的话,在wps里面的话,就可以免费将ppt呢转换为pdfpdf之后呢,我们就可以直接使用,不需要去直接不需要去另外保存,为什么格式转...
-
2026-02-04 09:03 off999
- 电信宽带测速官网入口(电信宽带测速官网入口app)
-
这个网站看看http://www.swok.cn/pcindex.jsp1.登录中国电信网上营业厅,宽带光纤,贴心服务,宽带测速2.下载第三方软件,如360等。进行在线测速进行宽带测速时,尽...
- 植物大战僵尸95版手机下载(植物大战僵尸95 版下载)
-
1可以在应用商店或者游戏平台上下载植物大战僵尸95版手机游戏。2下载教程:打开应用商店或者游戏平台,搜索“植物大战僵尸95版”,找到游戏后点击下载按钮,等待下载完成即可安装并开始游戏。3注意:确...
- 免费下载ppt成品的网站(ppt成品免费下载的网站有哪些)
-
1、Chuangkit(chuangkit.com)直达地址:chuangkit.com2、Woodo幻灯片(woodo.cn)直达链接:woodo.cn3、OfficePlus(officeplu...
- 2025世界杯赛程表(2025世界杯在哪个国家)
-
2022年卡塔尔世界杯赛程公布,全部比赛在卡塔尔境内8座球场举行,2022年,决赛阶段球队全部确定。揭幕战于当地时间11月20日19时进行,由东道主卡塔尔对阵厄瓜多尔,决赛于当地时间12月18日...
- 下载搜狐视频电视剧(搜狐电视剧下载安装)
-
搜狐视频APP下载好的视频想要导出到手机相册里方法如下1、打开手机搜狐视频软件,进入搜狐视频后我们点击右上角的“查找”,找到自已喜欢的视频。2、在“浏览器页面搜索”窗口中,输入要下载的视频的名称,然后...
- 永久免费听歌网站(丫丫音乐网)
-
可以到《我爱音乐网》《好听音乐网》《一听音乐网》《YYMP3音乐网》还可以到《九天音乐网》永久免费听歌软件有酷狗音乐和天猫精灵,以前要跳舞经常要下载舞曲,我从QQ上找不到舞曲下载就从酷狗音乐上找,大多...
- 音乐格式转换mp3软件(音乐格式转换器免费版)
-
有两种方法:方法一在手机上操作:1、进入手机中的文件管理。2、在其中选择“音乐”,将显示出手机中的全部音乐。3、点击“全选”,选中所有音乐文件。4、点击屏幕右下方的省略号图标,在弹出菜单中选择“...
- 电子书txt下载(免费的最全的小说阅读器)
-
1.Z-library里面收录了近千万本电子书籍,需求量大。2.苦瓜书盘没有广告,不需要账号注册,使用起来非常简单,直接搜索预览下载即可。3.鸠摩搜书整体风格简洁清晰,书籍资源丰富。4.亚马逊图书书籍...
- 最好免费观看高清电影(播放免费的最好看的电影)
-
在目前的网上选择中,IMDb(互联网电影数据库)被认为是最全的电影网站之一。这个网站提供了各种类型的电影和电视节目的海量信息,包括剧情介绍、演员表、评价、评论等。其还提供了有关电影制作背后的详细信息,...
- 孤单枪手2简体中文版(孤单枪手2简体中文版官方下载)
-
要将《孤胆枪手2》游戏的征兵秘籍切换为中文,您可以按照以下步骤进行操作:首先,打开游戏设置选项,通常可以在游戏主菜单或游戏内部找到。然后,寻找语言选项或界面选项,点击进入。在语言选项中,选择中文作为游...
欢迎 你 发表评论:
- 一周热门
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)
