Docker学习--Docker镜像的管理操作

一、获取镜像

docker pull [IMAGE_NAME]:[TAG]

[IMAGE_NAME]表示的是镜像的名称,[TAG]表示的是镜像的标签,也就是说我们需要通过"镜像名+标签"
的方式来下载镜像。

当然,下载镜像的时候也可以不指定TAG,这时候会默认下载latest标签的镜像。但是并不推荐下载latest标签的镜像,因为该镜像的内容会跟踪镜像的最新版本,并随之变化,所以它是不稳定的。在生产环境中,可能会出现莫名的bug,所以推荐最好还是指定具体的TAG,这样也可以一目了然的看清楚版本号。

举个栗子

[root@docker ~]# docker pull mysql:5.7

二、查看镜像

1、images 命令列出镜像
[root@docker ~]# docker images
REPOSITORY                            TAG                 IMAGE ID            CREATED             SIZE
docker.mynexus.com/myimages/jenkins   2.213-login         0ceb3de8ca91        18 hours ago        1.19GB
<none>                                <none>              37a99a93d5bc        18 hours ago        1.19GB
docker.mynexus.com/myimages/jenkins   2.213               b7692f1a5dea        19 hours ago        1.12GB
docker.mynexus.com/myimages/tomcat    8.5                 d7dcd3f88433        20 hours ago        1.05GB
docker.mynexus.com/myimages/jdk       1.8                 1d56be97ef09        22 hours ago        1.04GB
docker.mynexus.com/myimages/centos    7.6                 849ede3cd3db        22 hours ago        635MB
mysql                                 5.7                 db39680b63ac        11 days ago         437MB
daocloud.io/library/centos            centos7.6.1810      f1cb7c7d58b7        10 months ago       202MB

REPOSITORY:来自于哪个仓库
TAG:镜像的标签信息,比如1.8、latest表示不同的版本信息
IMAGE ID:镜像的ID,如果看到两个ID完全相同,那么实际上,他们指向的是同一个镜像,只是标签名称不同罢了。
CREATED:镜像最后的更新时间。
SIZE:镜像的大小。

2、使用tag命令为镜像添加标签

为了方便后续工作,快速的找到某个镜像,我们可以使用docker tag命令,为本地镜像添加有一个新的标签。

[root@docker ~]# docker images
REPOSITORY                            TAG                 IMAGE ID            CREATED             SIZE
mysql                                 5.7                 db39680b63ac        11 days ago         437MB

[root@docker ~]# docker tag mysql:5.7 docker.mynexus.com/myimages/mysql:5.7

[root@docker ~]# docker images
REPOSITORY                            TAG                 IMAGE ID            CREATED             SIZE
mysql                                 5.7                 db39680b63ac        11 days ago         437MB
docker.mynexus.com/myimages/mysql     5.7                 db39680b63ac        11 days ago         437MB
3、使用inspect命令查看镜像详细信息
[root@docker ~]# docker inspect docker.mynexus.com/myimages/jenkins:2.213-login
[
    {
        "Id": "sha256:0ceb3de8ca91c9483c9dbd33b427ffab7f4a198eb2350f04903ef4390aad31f6",
        "RepoTags": [
            "docker.mynexus.com/myimages/jenkins:2.213-login"
        ],
        "RepoDigests": [
            "docker.mynexus.com/myimages/jenkins@sha256:a120511d7bb63b037c553bbc8c597de2b198de55dc68140101eafe556c2440db"
        ],
        "Parent": "sha256:b7692f1a5dea408246deb245ca992d555b581676e1852a766810f020e8369bb5",
        "Comment": "jenkins login",
        "Created": "2020-01-08T12:50:04.45408124Z",
        "Container": "1d4d28476edc698bf2e760230a876f48062669264700c2b38478942ba8657525",
        "ContainerConfig": {
            "Hostname": "1d4d28476edc",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "ExposedPorts": {
                "22/tcp": {},
                "8080/tcp": {}
            },
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/jdk1.8.0_202/bin:/usr/local/jdk1.8.0_202/bin:/usr/local/apache-maven-3.6.1/bin",
                "JAVA_HOME=/usr/local/jdk1.8.0_202",
                "TOMCAT_HOME=/usr/local/tomcat",
                "MAVEN_HOME=/usr/local/apache-maven-3.6.1",
                "JENKINS_HOME=/home/.jenkins"
            ],
            "Cmd": [
                "/usr/bin/supervisord",
                "-c",
                "/etc/supervisord.conf"
            ],
            "Image": "docker.mynexus.com/myimages/jenkins:2.213",
            "Volumes": null,
            "WorkingDir": "/etc/yum.repos.d",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {
                "org.label-schema.build-date": "20181204",
                "org.label-schema.license": "GPLv2",
                "org.label-schema.name": "CentOS Base Image",
                "org.label-schema.schema-version": "1.0",
                "org.label-schema.vendor": "CentOS"
            }
        },
        "DockerVersion": "19.03.5",
        "Author": "",
        "Config": {
            "Hostname": "1d4d28476edc",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "ExposedPorts": {
                "22/tcp": {},
                "8080/tcp": {}
            },
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/jdk1.8.0_202/bin:/usr/local/jdk1.8.0_202/bin:/usr/local/apache-maven-3.6.1/bin",
                "JAVA_HOME=/usr/local/jdk1.8.0_202",
                "TOMCAT_HOME=/usr/local/tomcat",
                "MAVEN_HOME=/usr/local/apache-maven-3.6.1",
                "JENKINS_HOME=/home/.jenkins"
            ],
            "Cmd": [
                "/usr/bin/supervisord",
                "-c",
                "/etc/supervisord.conf"
            ],
            "Image": "docker.mynexus.com/myimages/jenkins:2.213",
            "Volumes": null,
            "WorkingDir": "/etc/yum.repos.d",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {
                "org.label-schema.build-date": "20181204",
                "org.label-schema.license": "GPLv2",
                "org.label-schema.name": "CentOS Base Image",
                "org.label-schema.schema-version": "1.0",
                "org.label-schema.vendor": "CentOS"
            }
        },
        "Architecture": "amd64",
        "Os": "linux",
        "Size": 1194720839,
        "VirtualSize": 1194720839,
        "GraphDriver": {
            "Data": {
                "LowerDir": "/var/lib/docker/overlay2/54ec8e9fd3c5295ba9284a1c54c2617e848dc45023fe6dbf3db51c125b449307/diff:/var/lib/docker/overlay2/cc8a1745d0330a40fb68bdf13d8d559627dcce6c9c4421a676aeb2757cd30ab3/diff:/var/lib/docker/overlay2/6bf246e397e90434975138d6f54be6ad4e26f8391e8fb2a0d35dc27a0e0673a4/diff:/var/lib/docker/overlay2/1dfb5f5ff0a2a682d60c4b0ec062b0f92e806e030fc8dd53c483886c9afbbbe7/diff:/var/lib/docker/overlay2/783e805d8d9c6a184fbc2ecaf297257f2cd0304596d6adf7f78777886beb06f4/diff:/var/lib/docker/overlay2/201a4983b938cad2075863e1d595dcee4b0909dfeea09b2300c98ce9185f012a/diff:/var/lib/docker/overlay2/b68d675bee27a2b751fc0e6d09eefcb44796e76bffa536bf5339a5d572f41235/diff:/var/lib/docker/overlay2/d29aeb9768ccefc6acce9b6155bfbf0251f4a3f4f1d80bc0ad4396569225e800/diff:/var/lib/docker/overlay2/f45743b8be2c5443d4b770230af82bb3a9cef7065e143cef1d0d1083e788d399/diff:/var/lib/docker/overlay2/7d9a34a8d9ba41b07657582862b620ba4cf8d7590ab964c0d8e64757fa9681b4/diff:/var/lib/docker/overlay2/b8fc6598a8d21f096c8b9049db7ceaf05f4bea8ed5aca21a11f47cf2b9a8ea84/diff:/var/lib/docker/overlay2/76fc7a630a563749f69c94d4ed6fd651c4e4d349775249862ab6f459b88bfdf6/diff:/var/lib/docker/overlay2/f8cbd0b495e93ee93a66b12db029e04e2d8159d07b338c9c6d3afda96b9146de/diff:/var/lib/docker/overlay2/d2049004a034cc5f15d1089af7cce882cb0d8b524e5f627673171a9c35efff40/diff:/var/lib/docker/overlay2/b7485ce4e67d60e7b89d39c5174542443351b8fcaf2dbbc2a5922444a50c844b/diff:/var/lib/docker/overlay2/c5caeb444834ebdedd5b476fdf719d46a0dbecd132d50948b6ef4e869e9cddb4/diff",
                "MergedDir": "/var/lib/docker/overlay2/c042b5f0e1fbff362e2682020a188041fe934a73183606d063967efda09fd315/merged",
                "UpperDir": "/var/lib/docker/overlay2/c042b5f0e1fbff362e2682020a188041fe934a73183606d063967efda09fd315/diff",
                "WorkDir": "/var/lib/docker/overlay2/c042b5f0e1fbff362e2682020a188041fe934a73183606d063967efda09fd315/work"
            },
            "Name": "overlay2"
        },
        "RootFS": {
            "Type": "layers",
            "Layers": [
                "sha256:89169d87dbe2b72ba42bfbb3579c957322baca28e03a1e558076542a1c1b2b4a",
                "sha256:07c7f9d65ede75da05e2232f6371cafb46489fc96350710fa6528b158a86ab70",
                "sha256:8c07108bee950e4a1cb69c2cbe83b9e744c730a78b13a2804c4ef5af1e5b8472",
                "sha256:a7807f1e64d3eaa87c2a9d64c5f40b8b93962b80075864f8c4f64d942fcbefb1",
                "sha256:624a70417d3cc05716ef2eb92482a6dc423795077ce676400e2162b8d48e0935",
                "sha256:264b2275105553f91fb53d610819d1feb1848a1fa8ad5e878cd051b24540f29c",
                "sha256:c9a4eaba70440e87e7dcee89c3c9f01b52f8f1daca0bc977d3696014500c9195",
                "sha256:62a87ee164785fa438c43ce67563a5413acdc07727a7f3bd93521f8035135e40",
                "sha256:873300318b33e9241f9ee66357fc8353f84feeda6ff011ff356b7c89fae0c22c",
                "sha256:6e5e69de5d992a020bead1fad39959cb715e2289239a218d7d3eb57c04fc13dc",
                "sha256:8bf76ff769f36a6a19043cae0fc0c20a2f538c93c4a2b27cc297252c97898927",
                "sha256:c1605813b47788a1e4376c476d2ed51f92036f4d07087ae88356cc1cb6a65b2b",
                "sha256:c77de2712437514cb11d32514b4e6dc6913822dda665dc4a79d81c03fc1f7639",
                "sha256:145a9ac317d3e0018ddb4ff384c862eed720a974a19a5e2010d04bafd19ad2b4",
                "sha256:229ee930416c8b8faaaddb1f7a823c693f215c3199c98233b59af0709f829439",
                "sha256:4a0011235e69ac7f07d299aecc545abc95502f3f3e3fa670b4fcde4680ded274",
                "sha256:69daafff7bb262b87b4f240078b904558099b363479ad25611ecf806b840176d"
            ]
        },
        "Metadata": {
            "LastTagTime": "2020-01-08T20:50:04.457918161+08:00"
        }
    }
]

docker inspect返回的是JSON格式的信息,如果想获得其中指定的一项内容可以通过-f来指定,比如获取镜像的"Metadata"。

[root@docker ~]# docker inspect -f {{".Metadata"}} docker.mynexus.com/myimages/jenkins:2.213-login
4、使用history查看镜像历史

我们知道,一个镜像是由多层(layer)组成的,那要怎样才能知道各个层的具体内容呢?
通过docker history命令可以查看各个层(layer)的创建信息。

[root@docker ~]# docker history docker.mynexus.com/myimages/jenkins:2.213-login
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
0ceb3de8ca91        20 hours ago        /usr/bin/supervisord -c /etc/supervisord.conf   74.8MB              jenkins login
b7692f1a5dea        21 hours ago        /bin/sh -c #(nop)  CMD ["/usr/bin/supervisor…   0B                  
b172e0f0d1a5        21 hours ago        /bin/sh -c #(nop)  EXPOSE 22 8080               0B                  
d7c34b8860bd        21 hours ago        /bin/sh -c #(nop)  ENV PATH=/usr/local/sbin:…   0B                  
a2b3b2f20893        21 hours ago        /bin/sh -c #(nop)  ENV JENKINS_HOME=/home/.j…   0B                  
ed60c9be924e        21 hours ago        /bin/sh -c #(nop)  ENV MAVEN_HOME=/usr/local…   0B                  
91a020491882        21 hours ago        /bin/sh -c #(nop)  ENV JAVA_HOME=/usr/local/…   0B                  
5212bad652e9        21 hours ago        /bin/sh -c #(nop) ADD file:9ead2d2ac6ab8e28d…   62.5MB              
b49e6ba89c09        21 hours ago        /bin/sh -c #(nop) ADD file:c49318ed696cf108a…   10.7MB              
1ed7e1ac2563        21 hours ago        /bin/sh -c #(nop)  MAINTAINER wangchao xxx@1…   0B                  
d7dcd3f88433        22 hours ago        /bin/sh -c #(nop)  CMD ["/usr/bin/supervisor…   0B                  
71630bf7c85d        22 hours ago        /bin/sh -c #(nop)  EXPOSE 22 8080               0B                  
36c1b1987e9c        22 hours ago        /bin/sh -c #(nop)  ENV TOMCAT_HOME=/usr/loca…   0B                  
53c87afbc9b1        22 hours ago        /bin/sh -c #(nop) ADD file:c335e1bd332344c60…   328B                
72a5cac97409        22 hours ago        /bin/sh -c #(nop) ADD file:5b8e9f5725ca73b7d…   9.06MB              
f1cbe521bf98        22 hours ago        /bin/sh -c #(nop)  MAINTAINER wangchao xxx@1…   0B                  
1d56be97ef09        24 hours ago        /bin/sh -c #(nop)  CMD ["/usr/bin/supervisor…   0B                  
f5bb76dc23e0        24 hours ago        /bin/sh -c #(nop)  EXPOSE 22                    0B                  
755dcc52290a        24 hours ago        /bin/sh -c #(nop)  ENV PATH=/usr/local/sbin:…   0B                  
49f097c64eec        24 hours ago        /bin/sh -c #(nop)  ENV JAVA_HOME=/usr/local/…   0B                  
2a8bfbadf841        24 hours ago        /bin/sh -c #(nop) ADD file:65d2a21c343d4f40c…   403MB               
88a3f6ac5457        24 hours ago        /bin/sh -c #(nop)  MAINTAINER wangchao xxx@1…   0B                  
849ede3cd3db        25 hours ago        /bin/sh -c #(nop)  CMD ["/usr/bin/supervisor…   0B                  
7520fbdc1812        25 hours ago        /bin/sh -c #(nop)  EXPOSE 22                    0B                  
e9c8489855d5        25 hours ago        /bin/sh -c #(nop) ADD file:3e453899cf6fcb72a…   147B                
fe6f8ae0c507        25 hours ago        /bin/sh -c #(nop) ADD file:e191e3c1ab4e45cc4…   9.16kB              
d558a284455f        25 hours ago        /bin/sh -c echo "root:wangchao123" | chpasswd   1.71kB              
c61bfe2f796d        25 hours ago        /bin/sh -c ssh-keygen -A -t dsa -f /etc/ssh/…   3.41kB              
ede4759702d1        25 hours ago        /bin/sh -c ssh-keygen -t ecdsa -f /etc/ssh/s…   406B                
c01202fdef9e        25 hours ago        /bin/sh -c ssh-keygen -t rsa -f /etc/ssh/ssh…   2.07kB              
2d1f20ad5ab4        25 hours ago        /bin/sh -c yum -y install vim screen lrzsz t…   270MB               
e0aa8e731c4a        25 hours ago        /bin/sh -c wget http://mirrors.aliyun.com/re…   2.52kB              
1414b16ec46b        25 hours ago        /bin/sh -c #(nop) WORKDIR /etc/yum.repos.d      0B                  
01982b98f200        25 hours ago        /bin/sh -c yum -y install wget                  140MB               
72d4a75b066c        25 hours ago        /bin/sh -c rpm -ivh http://mirrors.aliyun.co…   23.2MB              
6b231eb9d9d5        25 hours ago        /bin/sh -c #(nop)  MAINTAINER wangchao xxx@1…   0B                  
f1cb7c7d58b7        10 months ago       /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B                  
<missing>           10 months ago       /bin/sh -c #(nop)  LABEL org.label-schema.sc…   0B                  
<missing>           10 months ago       /bin/sh -c #(nop) ADD file:54b004357379717df…   202MB               

发现了上面过长的信息被省略了,看不到全部的内容,这时候,可以通过添加–no-trunc参数来查看。

[root@docker ~]# docker history --no-trunc docker.mynexus.com/myimages/jenkins:2.213-login

三、删除镜像

1、通过标签删除镜像
docker rmi [TAG]

支持的参数如下:
-f, --force:强制删除镜像,即便有容器引用该镜像
--no-prune:不要删除未带标签的父镜像

docker rmi [TAG]会删除指定标签的镜像,但是镜像本身不会被删除,因为一个镜像的可以有多个标签 ,就像是Linux文件的硬链接,当镜像只剩下一个标签的时候,使用标签删除镜像,才会删除镜像本身。

2、通过ID删除镜像
docker rmi [ID]

使用镜像的ID删除镜像,会先删除这个镜像得所有标签,然后再删除镜像本身。

需要注意的是:如果存在镜像创建的容器,这个时候镜像是无法被删除的。不过你可以使用-f参数强制删除镜像,但是并不建议这么做。

3、删除所有未打dangling标签的镜像
[root@docker ~]# docker rmi $(docker images -q -f dangling=true)
4、删除所有镜像
[root@docker ~]# docker rmi $(docker images -q)
5、清理镜像

在使用Docker一段时间之后,系统一般会残存一些临时的、没有被使用的镜像文件,可以通过下面这个命令你进行清理:

docker image prune

支持的参数如下:
-a, --all:删除所有没有用的镜像,而不仅仅是临时文件
--filter filter:添加过滤条件,只删除符合条件的
-f, --force:强制删除惊醒文件,无需弹出提示确认

此外,执行完docker image prune之后,还会告诉我们本次清理释放了多少存储空间。

四、创建镜像

Docker创建镜像有三种方法:
1)基于已有的镜像创建
2)基于Dokcerfile创建
3)基于本地模板创建

1、基于已有的镜像创建

通过下面命令来创建

docker container commit 

支持的参数如下:

-a, --author string ="":作者信息
-c, --change list =[]:可以在提交的时候执行Dockerfile指令。如CMD、ENTRYPOINT、ENV、EXPOSE、LABEL、ONBUILD、USER、VOLUME等
-m, --message string ="":提交信息
-p, --pause =true:提交时,暂停容器运行

接下来就举一个实际工作中遇到的例子,这个在我的Dockerfile创建基础镜像的专篇中已经讲过了,这里再复制过来一下,哈哈。
就是在制作Jenkins镜像的时候,刚启动的jenkins镜像,是没安装过插件的,等我们安装好插件并且设置好密码之后,这时候jenkins镜像就是即开即用的了(直接运行就可以用用户名密码登录),所以我们需要提交新的镜像。

获取Container ID

[root@docker home]# docker ps
CONTAINER ID        IMAGE                                       COMMAND                  CREATED             STATUS              PORTS                                          NAMES
1d4d28476edc        docker.mynexus.com/myimages/jenkins:2.213   "/usr/bin/supervisor…"   35 minutes ago      Up 35 minutes       0.0.0.0:6622->22/tcp, 0.0.0.0:9080->8080/tcp   jenkins

提交新的镜像

[root@docker home]# docker container commit -m "jenkins login" 1d4d28476edc docker.mynexus.com/myimages/jenkins:2.213-login
sha256:0ceb3de8ca91c9483c9dbd33b427ffab7f4a198eb2350f04903ef4390aad31f6
2、基于Dokcerfile创建

请看我的另外一篇文章《Docker学习–用Dockerfile构建常用基础镜像》

3、基于本地模板创建

这个这里就不说了。

五、镜像的导入导出

如果想把自己的镜像传给别人,那该怎么办呢?Docker提供了导入和导出的命令:

docker savedocker load

1、导出镜像
[root@docker ~]# docker save -o jenkins-login.tar docker.mynexus.com/myimages/jenkins:2.213-login
2、导入镜像

把导出的镜像传到别的服务器上做导入

[root@docker2 ~]# docker load --input jenkins-login.tar 

也可以使用重定向进行导入

[root@docker2 ~]# docker load < jenkins-login.tar 

Docker镜像的导入和导出是完整的,导入导出前后的ID不会发生变化。

六、镜像的上传

制作好镜像之后,我们可以推送镜像到托管服务器上。

可以推送到Docker Hub、docker-registry、Harbor、nexus等等仓库,就看你是用什么仓库管理镜像的了。

上面这些仓库的上传操作在之前相关的文章中都有讲过:

《Docker学习–Docker仓库之Docker Hub的简单了解》

《Docker学习–Docker仓库之私有仓库docker-registry的简单了解》

《Docker学习–Docker仓库之企业级私有仓库Harbor》

《Docker学习–Docker仓库之使用nexus3作为私有仓库》

参考文章:
https://www.cnblogs.com/quanxiaoha/p/10628017.html
https://www.cnblogs.com/quanxiaoha/p/10632039.html
http://k8s.unixhot.com/docker/docker-images.html#input-output-image

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值