1.含义 镜像是运行容器的模板,官方Docker Hub 仓库已经提供了许多镜像共开发者使用。如果我们需要获取某个镜像则可以去Docker仓库下载所需的镜像。
2.格式: docker pull [指定仓库URL]/[命名空间]/[镜像名称]:[镜像版本ID]
默认情况下:镜像URL是:docker.io, 命名空间名称:library
3.实例:docker pull centos
下载的时候,我们可以看到有若干层组成,像a27fd8080b517143c这样的字符串是层的唯一ID(实际上,完整的ID包括256比特, 64个十六进制字符组成)。使用docker pull 命令下载中会获取并输出镜像的各层信息。当不同的镜像包括相同的层的时候,本地仅存一份内容,减小存储空间。
二、查看镜像信息
镜像主要包括镜像文件、镜像tag以及镜像详细信息等等
1.查看镜像列表
docker images
3.参数:
-a : 列出系统临时镜像文件
--digests=true|false : 列出系统镜像摘要
-q : 只显示镜像ID
2.字段信息
列举信息中,可以看到几个字段信息: 1)镜像来源:来自哪个仓库,默认来自:hub.docker.com 2)镜像标签:比喻1.17、1000-teach-2020-10-28-13-40-27 3)镜像ID:例如22fdec3d9a6d 4)镜像创建时间:例如:3 weeks ago 5)镜像大小:127MB 其中镜像的ID信息十分重要,它唯一标识了镜像。在使用镜像ID的时候,一般可以使用该ID的前若干个字符组成的可区分串来替代完整的ID。 TAG信息用于标记来自同一个仓库的不同镜像。TAG在同一个仓库中是唯一的。 镜像大小信息只是表示了该镜像的逻辑体积大小,实际上由于相同的镜像层本地只会存储一份,物理上占用的存储空间会小于各镜像逻辑体积之和。
3.查看镜像详细信息
使用docker inspect 命令获取镜像的详细信息,包括PID、作者、架构等等。
1.格式: docker inspect [镜像名称]:[版本号] | [镜像ID]
2.实例:
三、镜像tag
为了方便后续工作中使用特定的镜像,还可以使用docker tag命令来为本地的镜像添加标签。
1.格式 docker tag [镜像ID] [别名]:[版本号]
docker tag 5d0da3dc9764 nginx:latest
四、查看镜像历史
1.格式: docker history [镜像名称或ID]
3.作用: 查看镜像构建步骤。
4.注意: 有些构建信息过长,可以使用--no-trunc选项来输出完整信息。
五、搜索镜像
在docker中搜索镜像主要使用Search子命令,默认只搜索Docker Hub官方镜像仓库中的镜像
1.格式: docker search [参数] [镜像名称
搜索官方提供的带有Redis关键字的镜像
docker search -f is-official=true redis
3.解释: NAME : 镜像名称 DESCRIPTION 镜像简介 STARS 收藏数
OFFICIAL : 是否是官方镜像
AUTOMATED : 是否是自构建镜像
参数: -f: 过滤 is-official=true --no-trunc :
不截断输出 --limit : 设置查询的条数
六、删除镜像和清理镜像
1.删除镜像:不能删除正在使用镜像运行的容器。
docker rmi 镜像名称或ID
-f: 强制删除镜像
删除镜像为<none>的镜像
docker rmi -f $(docker images | grep "<none>" | awk '{print $3}')
删除所有没被使用的镜像(就是容器列表里没有使用的镜像)
docker image prune -a #这种会有确认提示
docker image prune -a -f #强制删除,不确认直接删除
1.使用 export 和 import
export 和 import的针对点是容器,将本机的容器导出为镜像包。
1.格式: docker export [容器名称] > [压缩包名称]
docker import [压缩包名称] [镜像名称]
2.示例
#使用export保存容器为镜像
[root@instance-gvpb80ao docs]# docker export daf9c3656be3 > nginx.tar
[root@instance-gvpb80ao docs]# ll | grep nginx.tar -rw-r--r-- 1 root root 135117824 9月 24 20:51 nginx.tar
使用import导入包为镜像 [root@instance-gvpb80ao docs]# docker import nginx.tar test/nginx:v1 sha256:02107323de1b074c5d2034b01eff855fec5922b45776c2721882d100ba6dd15b [root@instance-gvpb80ao docs]# docker images | grep test test/nginx v1
02107323de1b 22 seconds ago 131MB
2.使用 load 和 save
save 和 load的针对的点是镜像,将本机的镜像导入、导出为镜像包。
#1.格式:
docker save [镜像ID...] > [压缩包名称]
docker load < [压缩包名称]
注:使用镜像ID保存镜像时,导入时没有名称
#2.示例
#使用save保存镜像
[root@instance-gvpb80ao docs]# docker save 6858809bf669 > busybox.tar
[root@instance-gvpb80ao docs]# ll | grep busy
-rw-r--r-- 1 root root 1458176 9月 24 21:01 busybox.tar
#使用save保存多个镜像
[root@instance-gvpb80ao docs]# docker save -o test.tar busybox nginx:1.18.0
[root@instance-gvpb80ao docs]# docker load < test.tar
Loaded image: busybox:latest
Loaded image: nginx:1.18.0
#使用load导入镜像
[root@instance-gvpb80ao docs]# docker load < busybox.tar
[root@instance-gvpb80ao docs]# docker load -i busybox.tar
Loaded image ID: sha256:6858809bf669cc5da7cb6af83d0fae838284d12e1be0182f92f6bd96559873e3
[root@instance-gvpb80ao docs]# docker images | grep 685880
busybox latest 6858809bf669 2 weeks ago 1.23MB
3.两种方案的差别
1、针对的对象不一样
export和import针对的是容器,save和load针对的是镜像
2、save是完全保存, export是部分保存
3.文件大小不同
export导出的镜像文件体积小于 save 保存的镜像
4.是否可以对镜像重命名
docker import可以为镜像指定新名称,docker load不能对载入的镜像重命名。
5.是否可以同时将多个镜像打包到一个文件中
docker export不支持,docker save支持。
6.是否包含镜像历史
save保存的是原生的镜像,export保存成一个新的镜像
export 导出(import 导入)是根据容器拿到的镜像,再导入时会丢失镜像所有的历史记录和元数据信息(即仅保存容器当时的快照状态),所以无法进行回滚操作。
save 保存(load 加载)的镜像,没有丢失镜像的历史,可以回滚到之前的层(layer)。
[root@instance-gvpb80ao docs]# docker history 6858809bf669cc5da7cb6af83d0fae838284d12e1be0182f92f6bd96559873e3
IMAGE CREATED CREATED BY SIZE COMMENT
6858809bf669 2 weeks ago /bin/sh -c #(nop) CMD ["sh"] 0B
<missing> 2 weeks ago /bin/sh -c #(nop) ADD file:72be520892d0a903d… 1.23MB
7.应用场景不同
save应用场景在部署或者需要追溯的场景中,export应用场景在作为基础镜像时使用.
docker export的应用场景:主要用来制作基础镜像,比如我们从一个 ubuntu 镜像启动一个容器,然后安装一些软件和进行一些设置后,使用 docker export保存为一个基础镜像。然后,把这个镜像分发给其他人使用,比如作为基础的开发环境。
docker save的应用场景:如果我们的应用是使用docker-compose.yml编排的多个镜像组合,但我们要部署的客户服务器并不能连外网。这时就可以使用docker save将用到的镜像打个包,然后拷贝到客户服务器上使用docker load载入。