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 载入。
posted @ 2022-10-16 21:27  大胡萝卜没有须  阅读(1286)  评论(0编辑  收藏  举报