Docker镜像
Docker镜像
1、搜索镜像
在docker中搜索镜像主要使用Search子命令,默认只搜索Docker Hub官方镜像仓库中的镜像。
其语法为docker search [option] keyword
[root@web01 ~]# docker search nginx
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
nginx Official build of Nginx. 14587 [OK]
jwilder/nginx-proxy Automated Nginx reverse proxy for docker con… 1984 [OK]
richarvey/nginx-php-fpm Container running Nginx + PHP-FPM capable of… 810 [OK]
jc21/nginx-proxy-manager Docker container for managing Nginx proxy ho… 162
linuxserver/nginx An Nginx container, brought to you by LinuxS… 143
tiangolo/nginx-rtmp Docker image with Nginx using the nginx-rtmp… 117 [OK]
jlesage/nginx-proxy-manager Docker container for Nginx Proxy Manager 97 [OK]
bitnami/nginx Bitnami nginx Docker Image 95 [OK]
alfg/nginx-rtmp NGINX, nginx-rtmp-module and FFmpeg from sou… 89 [OK]
jasonrivers/nginx-rtmp Docker images to host RTMP streams using NGI… 88 [OK]
1.1命令选项
-f 过滤输出内容
docker search -f is-official=true nginx
#搜索官方提供的带有nginx关键字的镜像
docker search -f stars=800 nginx
#搜索被收藏超过800个的带有nginx关键字的镜像
--limit 限制输出结果
docker search --limit 3 nginx
#限制只显示3行
--no-trunc 不截断输出结果
[root@web01 ~]# docker search -f stars=8 --limit 3 --no-trunc nginx
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
nginx Official build of Nginx. 14587 [OK]
jwilder/nginx-proxy Automated Nginx reverse proxy for docker containers 1984 [OK]
bitnami/nginx Bitnami nginx Docker Image 95 [OK]
1.2输出参数释义
NAME #镜像仓库源的名称
DESCRIPTION #镜像的描述
STARS #是否为docker官方发布
OFFICIAL #类似与github里的star,表示收藏
AUTOMATED #自动构建
2、获取镜像
镜像是运行容器的模板,官方 Docker Hub 仓库已经提供了许多镜像共开发者使用。如果我们需要获取某 个镜像则可以去 docker 仓库下载所需的镜像。
下载镜像的格式:docker pull [仓库的 URL]/[名称空间]/[仓库的名称]:[版本号]
# 格式
docker pull [镜像名称]
# 实例
[root@Centos7 ~]# docker pull redis
Using default tag: latest
latest: Pulling from library/redis
# 镜像层
a076a628af6f: Already exists
f40dd07fe7be: Pull complete
ce21c8a3dbee: Pull complete
ee99c35818f8: Pull complete
56b9a72e68ff: Pull complete
3f703e7f380f: Pull complete
# 镜像ID号(镜像ID号是全球唯一)
Digest: sha256:0f97c1c9daf5b69b93390ccbe8d3e2971617ec4801fd0882c72bf7cad3a13494
# 镜像下载状态
Status: Downloaded newer image for redis:latest
# 镜像的全称(镜像的tag)
docker.io/library/redis:latest
3、查看镜像信息
#查看本地主机上已有的镜像的基本信息
[root@web01 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql latest c8562eaf9d81 8 weeks ago 546MB
nginx latest f6d0b4767a6c 2 months ago 133MB
php latest 5146e2c2c4ac 2 months ago 422MB
[root@web01 ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql latest c8562eaf9d81 8 weeks ago 546MB
nginx latest f6d0b4767a6c 2 months ago 133MB
php latest 5146e2c2c4ac 2 months ago 422MB
3.1字段信息
REPOSITORY #镜像来源:来自哪个仓库,默认来自:hub.docker.com
TAG #镜像标签
IMAGE ID #镜像 ID
CREATED #镜像创建时间
SIZE #镜像大小
#其中镜像的 ID 信息十分重要,它唯一标识了镜像。在使用镜像 ID 的时候,一般可以使用该 ID 的前若干个 字符组成的可区分串来替代完整的 ID。
#TAG 信息用于标记来自同一个仓库的不同镜像。TAG 在同一个仓库中是唯一的。
#镜像大小信息只是表示了该镜像的逻辑体积大小,实际上由于相同的镜像层本地只会存储一份,物理上占用 的存储空间会小于各镜像逻辑体积之和。
3.2image子命令选项
-a #列出所有镜像文件(包括临时文件)
[root@web01 ~]# docker images -a
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql latest c8562eaf9d81 8 weeks ago 546MB
nginx latest f6d0b4767a6c 2 months ago 133MB
php latest 5146e2c2c4ac 2 months ago 422MB
--digests=treu|false #列出镜像的数字摘要值
[root@web01 ~]# docker images --digests
REPOSITORY TAG DIGEST IMAGE ID CREATED SIZE
mysql latest sha256:feada149cb8ff54eade1336da7c1d080c4a1c7ed82b5e320efb5beebed85ae8c c8562eaf9d81 8 weeks ago 546MB
nginx latest sha256:10b8cc432d56da8b61b070f4c7d2543a9ed17c2b23010b43af434fd40e2ca4aa f6d0b4767a6c 2 months ago 133MB
php latest sha256:7f57b99687170c2bb06f4c56bd67b1a9ccc979883dea01b20728cc98b4c1ed0b 5146e2c2c4ac 2 months ago 422MB
-q #仅显示id信息
[root@web01 ~]# docker images -q
c8562eaf9d81
f6d0b4767a6c
5146e2c2c4ac
3.3使用inspect命令查看详细信息
#使用 docker inspect 命令获取镜像的详细信息,包括 PID、作者、架构等等。
[root@web01 ~]# docker inspect nginx
[
{
"Id": "sha256:f6d0b4767a6c466c178bf718f99bea0d3742b26679081e52dbf8e0c7c4c42d74",
"RepoTags": [
"nginx:latest"
],
"RepoDigests": [
"nginx@sha256:10b8cc432d56da8b61b070f4c7d2543a9ed17c2b23010b43af434fd40e2ca4aa"
],
"Parent": "",
"Comment": "",
"Created": "2021-01-12T10:17:41.649267496Z",
"Container": "faa742a137cfbf261402d359c09203c3fd894fa49689e4f4952a657ea80d9107",
......省略百万行......
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:cb42413394c4059335228c137fe884ff3ab8946a014014309676c25e3ac86864",
"sha256:1c91bf69a08b515a1f9c36893d01bd3123d896b38b082e7c21b4b7cc7023525a",
"sha256:56bc37de0858bc2a5c94db9d69b85b4ded4e0d03684bb44da77e0fe93a829292",
"sha256:3e5288f7a70f526d6bceb54b3568d13c72952936cebfe28ddcb3386fe3a236ba",
"sha256:85fcec7ef3efbf3b4e76a0f5fb8ea14eca6a6c7cbc0c52a1d401ad5548a29ba5"
]
},
"Metadata": {
"LastTagTime": "0001-01-01T00:00:00Z"
}
}
]
3.4使用history命令查看镜像历史
[root@web01 ~]# docker history nginx
IMAGE CREATED CREATED BY SIZE COMMENT
f6d0b4767a6c 2 months ago /bin/sh -c #(nop) CMD ["nginx" "-g" "daemon… 0B
<missing> 2 months ago /bin/sh -c #(nop) STOPSIGNAL SIGQUIT 0B
<missing> 2 months ago /bin/sh -c #(nop) EXPOSE 80 0B
<missing> 2 months ago /bin/sh -c #(nop) ENTRYPOINT ["/docker-entr… 0B
<missing> 2 months ago /bin/sh -c #(nop) COPY file:0fd5fca330dcd6a7… 1.04kB
<missing> 2 months ago /bin/sh -c #(nop) COPY file:0b866ff3fc1ef5b0… 1.96kB
<missing> 2 months ago /bin/sh -c #(nop) COPY file:e7e183879c35719c… 1.2kB
<missing> 2 months ago /bin/sh -c set -x && addgroup --system -… 63.7MB
<missing> 2 months ago /bin/sh -c #(nop) ENV PKG_RELEASE=1~buster 0B
<missing> 2 months ago /bin/sh -c #(nop) ENV NJS_VERSION=0.5.0 0B
<missing> 2 months ago /bin/sh -c #(nop) ENV NGINX_VERSION=1.19.6 0B
<missing> 2 months ago /bin/sh -c #(nop) LABEL maintainer=NGINX Do… 0B
<missing> 2 months ago /bin/sh -c #(nop) CMD ["bash"] 0B
<missing> 2 months ago /bin/sh -c #(nop) ADD file:422aca8901ae3d869… 69.2MB
4、管理镜像
4.1为镜像添加tag
#为了方便后续工作中使用特定的镜像,还可以使用 docker tag 命令来为本地的镜像添加标签。
[root@web01 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql latest c8562eaf9d81 8 weeks ago 546MB
nginx latest f6d0b4767a6c 2 months ago 133MB
php latest 5146e2c2c4ac 2 months ago 422MB
[root@web01 ~]# docker tag nginx:latest mynginx:vip
[root@web01 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql latest c8562eaf9d81 8 weeks ago 546MB
mynginx vip f6d0b4767a6c 2 months ago 133MB
nginx latest f6d0b4767a6c 2 months ago 133MB
php latest 5146e2c2c4ac 2 months ago 422MB
4.2删除镜像
#使用 docker rmi 或 docker image rm 命令可以删除镜像,命令格式为 docker rmi image
[root@web01 ~]# docker rmi nginx
Untagged: nginx:latest
Untagged: nginx@sha256:10b8cc432d56da8b61b070f4c7d2543a9ed17c2b23010b43af434fd40e2ca4aa
Deleted: sha256:f6d0b4767a6c466c178bf718f99bea0d3742b26679081e52dbf8e0c7c4c42d74
Deleted: sha256:4dfe71c4470c5920135f00af483556b09911b72547113512d36dc29bfc5f7445
Deleted: sha256:3c90a0917c79b758d74b7040f62d17a7680cd14077f734330b1994a2985283b8
Deleted: sha256:a1c538085c6f891424160d8db120ea093d4dda393e94cd4713e3fff3c82299b5
Deleted: sha256:a3ee2510dcf02c980d7aff635909612006fd1662084d6225e52e769b984abeb5
#使用-f参数强制删除
[root@web01 ~]# docker rmi -f php
Untagged: php:latest
Untagged: php@sha256:7f57b99687170c2bb06f4c56bd67b1a9ccc979883dea01b20728cc98b4c1ed0b
Deleted: sha256:5146e2c2c4ac6bb808ff89d9deb3484b1f21bb11a07ff4260d84f853a74edfd6
Deleted: sha256:1305ff34f09659a16159987ac094948f73e41c0298257cd8ffae62a0541c6285
Deleted: sha256:4b4756c2e8d748cb4e96a4b5be577449a5d361686b6539f6559934a64bd8b394
Deleted: sha256:a2e4d87ecd9eb2a63f7f5a817f9200e650f785b2ee941fb97bc757c0e45e1714
Deleted: sha256:a4e4da98dff58b2a708d5acdc054da2ab1eba5c5fbe0c3834a13cd738eb0556f
Deleted: sha256:3aca59586f3598fd37735949503c04d3df12e20ca22013c3e8004d19fefd0a4d
Deleted: sha256:52adbbc6d477ecd0fefc4505d463935729b8e0085d29b504d8b079e94683b6fe
Deleted: sha256:2a0f43b409eac35e37b47cfccde782adbc4fb0c296d6c129579cba206ee201bf
Deleted: sha256:0bcf38204745d0e87563ac7a5b18015183a4dce8b9151c09d7d7177b4a75f668
4.3清理镜像
#使用一段时间之后,docker 会产生很多临时文件,以及一些没有被使用的镜像,我们可以通过 docker image prune 命令来进行清理。
#参数
-a 删除所有无用的镜像,不光是临时镜像。
-f 强制删除,不进行提示
[root@web01 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql latest c8562eaf9d81 8 weeks ago 546MB
[root@web01 ~]# docker image prune -a
WARNING! This will remove all images without at least one container associated to them.
Are you sure you want to continue? [y/N] y
Deleted Images:
untagged: mysql:latest
untagged: mysql@sha256:feada149cb8ff54eade1336da7c1d080c4a1c7ed82b5e320efb5beebed85ae8c
deleted: sha256:c8562eaf9d81c779cbfc318d6e01b8e6f86907f1d41233268a2ed83b2f34e748
deleted: sha256:1b649b85960473808c6b812fc30c3f6a3ff1c0ffdcba5c9435daf01cf7d5373a
deleted: sha256:19cc889447050c16c797fd209fa114ee219de23facb37c00d4137a4ed4aad922
deleted: sha256:3c793c06a026d276cf56a6a6a75527026ed9eafa7a7d21a438f7d5ed2314148e
deleted: sha256:1e1cd89a2bc183a7fea3dab0b543e9924278321ad0921c22cc088adbf3c2e77b
deleted: sha256:83b2015dfd000588c7c947b2d89b3be7a8e5a3abc6ab562668c358033aa779ec
deleted: sha256:d08533f1e2acc40ad561a46fc6a76b54c739e6b24f077c183c5709e0a6885312
deleted: sha256:4f9d91a4728e833d1062fb65a792f06e22e425f63824f260c8b5a64b776ddc38
deleted: sha256:20bf4c759d1b0d0e6286d2145453af4e0e1b7ba3d4efa3b8bce46817ad4109de
deleted: sha256:a9371bbdf16ac95cc72555c6ad42f79b9f03a82d964fe89d52bdc5f335a5f42a
deleted: sha256:5b02130e449d94f51e8ff6e5f7d24802246198749ed9eb064631e63833cd8f1d
deleted: sha256:ab74465b38bc1acb16c23091df32c5b7033ed55783386cb57acae8efff9f4b37
deleted: sha256:cb42413394c4059335228c137fe884ff3ab8946a014014309676c25e3ac86864
Total reclaimed space: 546.1MB
[root@web01 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
5、构建镜像
5.1基于容器保存
#主要格式
docker [container id] commit
#主要参数
-a 作者信息
-m 提交信息
-p 提交时,暂停容器运行
[root@web01 ~]# docker commit -m "wabulabudabuda" -a "testtt" 2a18d2d50ab4 nginxtest:test
sha256:2d47c1f1dc71f903a1da53ec19acba82064ecdbd6e2cd3733cc4a705b5d4c260
[root@web01 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginxtest test 2d47c1f1dc71 8 seconds ago 133MB
nginx latest f6d0b4767a6c 2 months ago 133MB
5.2基于本地模板导入
[root@alvin-test-os ~]# cat ubuntu-18.04-x86_64-minimal.tar.gz | docker import - ubuntu:18.04
6、保存镜像
6.1使用export和import
#export 和 import 的针对点是容器,将本机的容器导出为镜像包。
=======================================
#使用export保存容器
[root@web01 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e4367530602e nginx "/docker-entrypoint.…" 16 seconds ago Up 15 seconds 80/tcp tender_perlman
[root@web01 ~]# docker export e4367530602e > /opt/nginx.tar
[root@web01 ~]# ll /opt/
total 132232
-rw-r--r-- 1 root root 135403008 Mar 18 22:38 nginx.tar
#使用import导入包为镜像
[root@web01 ~]# ll /opt/
total 132232
-rw-r--r-- 1 root root 135403008 Mar 18 22:38 nginx.tar
[root@web01 ~]# docker import /opt/nginx.tar test/nginx:v1
sha256:dcf499b2ef6b1125ee46e50b4868a046eaa9818242187ffb238de6450139025d
[root@web01 ~]# docker images | grep test
test/nginx v1 dcf499b2ef6b 15 seconds ago 131MB
nginxtest test 2d47c1f1dc71 12 minutes ago 133MB
nginx latest f6d0b4767a6c 2 months ago 133MB
6.2使用save和load
#save 和 load 的针对的点是镜像,将本机的镜像导入、导出为镜像包。
=======================================
#使用save保存镜像
[root@web01 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
test/nginx v1 dcf499b2ef6b 2 minutes ago 131MB
[root@web01 ~]# docker save dcf499b2ef6b > /opt/test1.tar
[root@web01 ~]# ll /opt | grep test
-rw-r--r-- 1 root root 135410176 Mar 18 22:44 test1.tar
#使用save保存多个镜像
[root@web01 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
test/nginx v1 dcf499b2ef6b 4 minutes ago 131MB
nginxtest test 2d47c1f1dc71 16 minutes ago 133MB
[root@web01 ~]# docker save -o /opt/test2.tar dcf499b2ef6b 2d47c1f1dc71
[root@web01 ~]# ll /opt | grep test2
-rw------- 1 root root 272559104 Mar 18 22:46 test2.tar
#使用load导入镜像
[root@web01 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest f6d0b4767a6c 2 months ago 133MB
[root@web01 ~]# docker load -i /opt/test2.tar
469e171abd93: Loading layer [==================================================>] 135.4MB/135.4MB
Loaded image ID: sha256:dcf499b2ef6b1125ee46e50b4868a046eaa9818242187ffb238de6450139025d
Loaded image ID: sha256:2d47c1f1dc71f903a1da53ec19acba82064ecdbd6e2cd3733cc4a705b5d4c260
[root@web01 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> dcf499b2ef6b 7 minutes ago 131MB
<none> <none> 2d47c1f1dc71 19 minutes ago 133MB
nginx latest f6d0b4767a6c 2 months ago 133MB
6.3方案对比
#文件大小不同
export 导出的镜像文件体积小于 save 保存的镜像
#是否可以对镜像重命名
docker import 可以为镜像指定新名称,docker load 不能对载入的镜像重命名。
#是否可以同时将多个镜像打包到一个文件中
docker export 不支持,docker save 支持。
#是否包含镜像历史
export 导出(import 导入)是根据容器拿到的镜像,再导入时会丢失镜像所有的历史记录和元数据信息(即仅 保存容器当时的快照状态),所以无法进行回滚操作。
save 保存(load 加载)的镜像,没有丢失镜像的历史,可以回滚到之前的层(layer)。
#应用场景不同
docker export 的应用场景:主要用来制作基础镜像,比如我们从一个 ubuntu 镜像启动一个容器,然后安 装一些软件和进行一些设置后,使用 docker export 保存为一个基础镜像。然后,把这个镜像分发给其他人使用, 比如作为基础的开发环境。
docker save 的应用场景:如果我们的应用是使用 docker-compose.yml 编排的多个镜像组合,但我们要部 署的客户服务器并不能连外网。这时就可以使用 docker save 将用到的镜像打个包,然后拷贝到客户服务器上使 用 docker load 载入。