docker--镜像管理

镜像管理

1.镜像的命名
一般情况下,镜像的命名是按照如下格式命名

服务器IP:端口/分类/镜像名:tag

如果不指定镜像,端口默认为 80,tag默认为 latest,分类也可以不写,如 dockers.io/nginx:latest
在把镜像上传到仓库的时候,镜像必须要按照这种格式命名,因为仓库地址就是由镜像前面的 IP 决定的。如果只是在本机使用镜像的话,可以随意命名
查看当前系统有多少镜像
如图这里还没有镜像

[root@master ~]# docker images
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE
docker pull [OPTIONS] NAME[:TAG|@DIGEST]

NAME 是要拉取的镜像的名称。
TAG 是可选的标签,指定了要拉取的特定版本。如果不指定标签,默认会拉取 latest 标签。
DIGEST 是镜像的摘要,它是唯一的并且不会改变,用于确保拉取的镜像是预期的。

例如,要拉取名为 nginx 的镜像的最新版本,可以使用以下命令:

[root@master ~]# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
a2abf6c4d29d: Pull complete 
a9edb18cadd1: Pull complete 
589b7251471a: Pull complete 
186b1aaa4aa6: Pull complete 
b4df32aa5a72: Pull complete 
a0bcbecc962e: Pull complete 
Digest: sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
[root@master ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
nginx        latest    605c77e624dd   2 years ago   141MB

2.对镜像重新打标签

如果想给本地的镜像起一个新的名字,可以用tag,语法如下
[root@master ~]# docker tag 旧的镜像名 新的镜像名
  
#例如:有一个 nginx 镜像,标签为 latest, 下面我们要更改他的镜像名,以及将其打上新标签v1.21.5,如下:
[root@master ~]# docker tag nginx:latest zhenyu-nginx:v1.21.5
[root@master ~]# docker images
REPOSITORY     TAG       IMAGE ID       CREATED       SIZE
zhenyu-nginx   v1.21.5   605c77e624dd   2 years ago   141MB
nginx          latest    605c77e624dd   2 years ago   141MB

3.删除镜像

如果要删除镜像,语法如下:

[root@master ~]# docker rmi 镜像名:tag
比如把上面的nginx:latest删除:
[root@master ~]# docker rmi  nginx:latest 
Untagged: nginx:latest
Untagged: nginx@sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31

如果要删除多个镜像,可以在命令中指定它们的名称或 ID。例如:
[root@master ~]# docker rmi 镜像名1 镜像名2 镜像名3

如果要删除所有未被使用的镜像,可以使用 -f 或 --force 选项。这会强制删除所有未被使用的镜像。例如:
[root@master ~]# docker rmi -f $(docker images -q)
或:
[root@master ~]# docker image prune -af

解释一下这个命令:

docker image prune:这是 Docker 提供的用于清理镜像的命令。
-a, --all:删除所有未被使用的镜像,包括悬空镜像和没有标签的镜像。
-f, --force:强制删除,不需要确认。
因此,docker image prune -af 命令会立即删除所有未被使用的镜像,不需要用户确认。

4.查看镜像的结构

#首先重新pull一个镜像
[root@master ~]# docker pull nginx
如果我们需要查看某镜像的制作步骤,可以用 docker history 命令,
[root@master ~]# docker history 镜像名

查看刚刚pull的镜像结构
[root@master ~]# docker history nginx:latest 
IMAGE          CREATED       CREATED BY                                      SIZE      COMMENT
605c77e624dd   2 years ago   /bin/sh -c #(nop)  CMD ["nginx" "-g" "daemon…   0B        
<missing>      2 years ago   /bin/sh -c #(nop)  STOPSIGNAL SIGQUIT           0B        
<missing>      2 years ago   /bin/sh -c #(nop)  EXPOSE 80                    0B        
<missing>      2 years ago   /bin/sh -c #(nop)  ENTRYPOINT ["/docker-entr…   0B        
<missing>      2 years ago   /bin/sh -c #(nop) COPY file:09a214a3e07c919a…   4.61kB    
<missing>      2 years ago   /bin/sh -c #(nop) COPY file:0fd5fca330dcd6a7…   1.04kB    
<missing>      2 years ago   /bin/sh -c #(nop) COPY file:0b866ff3fc1ef5b0…   1.96kB    
<missing>      2 years ago   /bin/sh -c #(nop) COPY file:65504f71f5855ca0…   1.2kB     
<missing>      2 years ago   /bin/sh -c set -x     && addgroup --system -…   61.1MB    
<missing>      2 years ago   /bin/sh -c #(nop)  ENV PKG_RELEASE=1~bullseye   0B        
<missing>      2 years ago   /bin/sh -c #(nop)  ENV NJS_VERSION=0.7.1        0B        
<missing>      2 years ago   /bin/sh -c #(nop)  ENV NGINX_VERSION=1.21.5     0B        
<missing>      2 years ago   /bin/sh -c #(nop)  LABEL maintainer=NGINX Do…   0B        
<missing>      2 years ago   /bin/sh -c #(nop)  CMD ["bash"]                 0B        
<missing>      2 years ago   /bin/sh -c #(nop) ADD file:09675d11695f65c55…   80.4MB

解释一下每个步骤:

CMD ["nginx", "-g", "daemon…:指定了容器启动时执行的命令。
STOPSIGNAL SIGQUIT:设置了容器的停止信号。
EXPOSE 80:指定容器监听的端口。
ENTRYPOINT ["/docker-entr…:指定了容器的入口点。
COPY file:09a214a3e07c919a…:复制了某个文件到镜像中。
COPY file:0fd5fca330dcd6a7…:复制了某个文件到镜像中。
COPY file:0b866ff3fc1ef5b0…:复制了某个文件到镜像中。
COPY file:65504f71f5855ca0…:复制了某个文件到镜像中。
set -x && addgroup --system -…:设置了一些环境变量,并添加了一个系统用户组。
ENV PKG_RELEASE=1~bullseye:设置了一个环境变量。
ENV NJS_VERSION=0.7.1:设置了一个环境变量。
ENV NGINX_VERSION=1.21.5:设置了一个环境变量。
LABEL maintainer=NGINX Do…:设置了一个标签。
CMD ["bash"]:指定了容器启动时执行的默认命令。
ADD file:09675d11695f65c55…:添加了一个文件到镜像中

5.导出镜像
在没有本地仓库的情况下,如何把本地已经pull下来的镜像传输到其他机器上呢?这里我们就需要把镜像导出为一个本地文件,然后在别一台机器上传。导出镜像的语法如下:

[root@master ~]# docker save 镜像名 > 文件名.tar

下面我们将本地的 nginx 导出为nginx.tar

[root@master ~]# ls
anaconda-ks.cfg 
[root@master ~]# docker save nginx:latest > nginx.tar
[root@master ~]# ls
anaconda-ks.cfg  nginx.tar

导出多个镜像,语法如下。

[root@master ~]# docker save 镜像名1 镜像名2 镜像名3 ... > file.tar

6.导入镜像

我们将上面导出的镜像在重新上传,
首先把镜像删除:

[root@master ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
nginx        latest    605c77e624dd   2 years ago   141MB
[root@master ~]# docker rmi -f 605c77e624dd
Untagged: nginx:latest
Untagged: nginx@sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31
Deleted: sha256:605c77e624ddb75e6110f997c58876baa13f8754486b461117934b24a9dc3a85
Deleted: sha256:b625d8e29573fa369e799ca7c5df8b7a902126d2b7cbeb390af59e4b9e1210c5
Deleted: sha256:7850d382fb05e393e211067c5ca0aada2111fcbe550a90fed04d1c634bd31a14
Deleted: sha256:02b80ac2055edd757a996c3d554e6a8906fd3521e14d1227440afd5163a5f1c4
Deleted: sha256:b92aa5824592ecb46e6d169f8e694a99150ccef01a2aabea7b9c02356cdabe7c
Deleted: sha256:780238f18c540007376dd5e904f583896a69fe620876cabc06977a3af4ba4fb5
Deleted: sha256:2edcec3590a4ec7f40cf0743c15d78fb39d8326bc029073b41ef9727da6c851f

导入镜像语法如下:

[root@master ~]# docker load -i 文件名.tar

将nginx.tar 导入为镜像:

[root@master ~]# docker load -i nginx.tar 
2edcec3590a4: Loading layer  83.86MB/83.86MB
e379e8aedd4d: Loading layer     62MB/62MB
b8d6e692a25e: Loading layer  3.072kB/3.072kB
f1db227348d0: Loading layer  4.096kB/4.096kB
32ce5f6a5106: Loading layer  3.584kB/3.584kB
d874fd2bc83b: Loading layer  7.168kB/7.168kB
Loaded image: nginx:latest
[root@master ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
nginx        latest    605c77e624dd   2 years ago   141MB
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江上清风至

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值