Docker镜像管理

Docker镜像管理

1:什么是镜像

镜像文件一般由若干个层(layer)组成,f17d81b4b692这样的串是层的唯一ID,(实际上完整的id是256比特,64个十六进制字符组成),使用docker pull 命令下载中会获取并输出镜像的各层信息,当不同的镜像包括相同的层时,本地仅存了层的一份内容,减少了存储空间。

2:搜索镜像

命令选项:
-f –filter :过滤输出内容
–fromat string: 格式化输出内容
–limit int : 限制输出结果个数,默认25个
–no-trunc:不截断输出结果

[root@virtual_host ~]# docker search nginx
NAME                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
nginx                             Official build of Nginx.                        16245     [OK]   
---

3:拉取镜像并启动

# 拉取Centos系统镜像,如果不指定TAG,则默认会选择latest标签,下载仓库中最新版本的镜像。
[root@virtual_host ~]# docker  pull centos
Using default tag: latest
latest: Pulling from library/centos
a1d0c7532777: Pull complete 
Digest: sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177
Status: Downloaded newer image for centos:latest

#生产环境应指定版本TAG镜像,拉取nginx:1.20.1稳定版
[root@ecs-test ~]# docker pull nginx:1.20.1
1.20.1: Pulling from library/nginx
b380bbd43752: Pull complete 
83acae5e2daa: Pull complete 
33715b419f9b: Pull complete 
eb08b4d557d8: Pull complete 
74d5bdecd955: Pull complete 
0820d7f25141: Pull complete 
Digest: sha256:a98c2360dcfe44e9987ed09d59421bb654cb6c4abe50a92ec9c912f252461483
Status: Downloaded newer image for nginx:1.20.1
docker.io/library/nginx:1.20.1

如果从非官方的仓库下载,需要在仓库名称前指定完整的仓库地址,例如:从网易蜂巢的镜像源下载ubuntu:18.04
docker pull hub.c.163.com/public/ubuntu:18.04
#查看images
[root@virtual_host ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
nginx         1.20.1    c8d03f6b8b91   2 months ago   133MB
hello-world   latest    feb5d9fea6a5   3 months ago   13.3kB
centos        latest    5d0da3dc9764   3 months ago   231MB

#使用交互式运行centos容器并分配伪终端
#查看容器系统版本
[root@virtual_host ~]# docker run -it centos /bin/bash
[root@1524349d8edb /]# cat /etc/redhat-release 
CentOS Linux release 8.4.2105

4:删除镜像

#使用标签删除,可以删除某个标签副本
[root@virtual_host ~]# docker rmi centos:latest
Untagged: centos:latest
Untagged: centos@sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177
Deleted: sha256:5d0da3dc976460b72c77d94c8a1ad043720b0416bfc16c52c45d4847e53fadb6
Deleted: sha256:74ddd0ec08fa43d09f32636ba91a0a3053b02cb4627c35051aff89f853606b59


#强制删除,一般不建议使用,会导致某些问题
[root@virtual_host ~]# docker rmi -f nginx:1.20.1 
Untagged: nginx:1.20.1
Untagged: nginx@sha256:a98c2360dcfe44e9987ed09d59421bb654cb6c4abe50a92ec9c912f252461483
Deleted: sha256:c8d03f6b8b915209c54fc8ead682f7a5709d11226f6b81185850199f18b277a2
Deleted: sha256:67a7407724b6c71e2355fc2236b5be27d1f03bf9cbdffdfbb97c1d2a326ccf94
Deleted: sha256:d9ba8a6f08b1a478a08ac08edeaa89e657a78f71a3f8bdb8eea8f211cfa6bd4a
Deleted: sha256:146919003c6b6842551d30de0707b1c329aa26176093e1b0447090c7faa86696
Deleted: sha256:39bab5abc501ec6f680443ad530ba82576ac0943a63ccafc35a81c75e2f90223
Deleted: sha256:451162614317f9aa771883ba0c53581bf6c2fc84463783d334f7d9c10e076a95
Deleted: sha256:e81bff2725dbc0bf2003db10272fef362e882eb96353055778a66cda430cf81b

#使用镜像ID删除,会删除镜像文件本身
root@virtual_host ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
hello-world   latest    feb5d9fea6a5   3 months ago   13.3kB
[root@virtual_host ~]# docker rmi feb
Untagged: hello-world:latest
Untagged: hello-world@sha256:507ecde44b8eb741278274653120c2bf793b174c06ff4eaa672b713b3263477b
Deleted: sha256:feb5d9fea6a5e9606aa995e879d862b825965ba48de054caab5ef356dc6b3412
Deleted: sha256:e07ee1baac5fae6a26f30cabfe54a36d3402f96afda318fe0a96cec4ca393359

#删除有正在运行该镜像创建的容器时,应先删除容器id,然后删除镜像id
查看nginx 镜像id
[root@virtual_host ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED                  SIZE
nginx        alpine    bef258acf10d   Less than a second ago   23.4MB

#查看容器id
[root@virtual_host ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS     NAMES
6cb0b89b1bf3   nginx:alpine   "/docker-entrypoint.…"   48 seconds ago   Up 47 seconds   80/tcp    nginx

#删除容器及镜像
[root@virtual_host ~]# docker rm -f 6cb
6cb
[root@virtual_host ~]# docker rmi -f bef
Untagged: nginx:alpine
Untagged: nginx@sha256:da9c94bec1da829ebd52431a84502ec471c8e548ffb2cedbf36260fd9bd1d4d3
Deleted: sha256:bef258acf10dc257d641c47c3a600c92f87be4b4ce4a5e4752b3eade7533dcd9
Deleted: sha256:af2fcce448e2e4451a5f4796a9bf9cb5c9b5f88e0d6d10029cada42fb9d268ac
Deleted: sha256:b9e199348d7206cb55d8ab0724d68196a04635b74a0a448bee4e881e1a227d02
Deleted: sha256:0ca7a3881c86d6b0a75111269877b29812ee3f38943c2e0940b6aa5c91a6d9f9
Deleted: sha256:9c73bb886729dedf383ca0f3d1e19cc9d7bad261f81386201e70d99da5f03d9e
Deleted: sha256:d92f4554946db13553972cf0f964d343e1b5525328b06548893f0143fbd1d144
Deleted: sha256:8d3ac3489996423f53d6087c81180006263b79f206d3fdec9e66f0e27ceb8759

5:清理镜像

使用Docker一段时间后,系统中会遗留一些临时的镜像文件,以及一些没有被使用的镜像,可以通过docker image prun命令清理,支持选项:

-a,-all :删除所有无用镜像,不光是临时镜像
-filter filter :只清理符合给定过滤器的镜像
-f,-force:强制删除镜像。

[root@virtual_host ~]# docker image prune -f
Total reclaimed space: 0B

6:使用tag命令添加镜像标签

[root@virtual_host ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED                  SIZE
nginx        alpine    bef258acf10d   Less than a second ago   23.4MB
httpd        alpine    294cecd6c779   7 days ago               58.2MB
redis        alpine    3900abf41552   4 weeks ago              32.4MB
caddy        alpine    439af64db489   6 weeks ago              40.1MB

#添加一个自定义nginx标签
[root@virtual_host ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED                  SIZE
nginx        alpine    bef258acf10d   Less than a second ago   23.4MB
nginx        v1        bef258acf10d   Less than a second ago   23.4MB
httpd        alpine    294cecd6c779   7 days ago               58.2MB
redis        alpine    3900abf41552   4 weeks ago              32.4MB
caddy        alpine    439af64db489   6 weeks ago              40.1MB

7:使用inspect命令查看详细信息

[root@virtual_host ~]# docker inspect nginx:alpine 
[
    {
        "Id": "sha256:bef258acf10dc257d641c47c3a600c92f87be4b4ce4a5e4752b3eade7533dcd9",
        "RepoTags": [
            "nginx:alpine",
            "nginx:v1"
        ],
        "RepoDigests": [
            "nginx@sha256:da9c94bec1da829ebd52431a84502ec471c8e548ffb2cedbf36260fd9bd1d4d3"
        ],
        "Parent": "",
        "Comment": "",
        "Created": "2022-01-25T20:39:11.21594189Z",
        "Container": "5c96fae18bfe5309fd16ced41e0839c3f87c35781793208ad2e779d8a2c68ecb",
        "ContainerConfig": {
            "Hostname": "5c96fae18bfe",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "ExposedPorts": {
                "80/tcp": {}
            },
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "NGINX_VERSION=1.21.6",
                "NJS_VERSION=0.7.2",
                "PKG_RELEASE=1"
            ],
            "Cmd": [
                "/bin/sh",
                "-c",
                "#(nop) ",
                "CMD [\"nginx\" \"-g\" \"daemon off;\"]"
            ],
            "Image": "sha256:5b7833cf5df3837cb43ec5096f639f42341c5371e4338c6eb2f5f5fc37b4b248",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": [
                "/docker-entrypoint.sh"
            ],
            "OnBuild": null,
            "Labels": {
                "maintainer": "NGINX Docker Maintainers <docker-maint@nginx.com>"
            },
            "StopSignal": "SIGQUIT"
        },
        "DockerVersion": "20.10.7",
        "Author": "",
        "Config": {
            "Hostname": "",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "ExposedPorts": {
                "80/tcp": {}
            },
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "NGINX_VERSION=1.21.6",
                "NJS_VERSION=0.7.2",
                "PKG_RELEASE=1"
            ],
            "Cmd": [
                "nginx",
                "-g",
                "daemon off;"
            ],
            "Image": "sha256:5b7833cf5df3837cb43ec5096f639f42341c5371e4338c6eb2f5f5fc37b4b248",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": [
                "/docker-entrypoint.sh"
            ],
            "OnBuild": null,
            "Labels": {
                "maintainer": "NGINX Docker Maintainers <docker-maint@nginx.com>"
            },
            "StopSignal": "SIGQUIT"
        },
        "Architecture": "amd64",
        "Os": "linux",
        "Size": 23434185,
        "VirtualSize": 23434185,
        "GraphDriver": {
            "Data": {
                "LowerDir": "/var/lib/docker/overlay2/a7a97dec7d2934007b3bca421475827c7741b36a07c8b46a4d6908f0d4155ec9/diff:/var/lib/docker/overlay2/989b2bfa24178498e3b550fa7023e91172aae1511e07fdd8650f6ed0e7c35e4c/diff:/var/lib/docker/overlay2/eac65a9d63b60a028c777263c3be9fd2dfb8a8ea16a162c2c0f0c4b768d048fd/diff:/var/lib/docker/overlay2/fd0ae684c2ec41a87f209d8594bffa6d96c9d35e278d32ffc6d3069f5fb585c9/diff:/var/lib/docker/overlay2/1a2c1bdce7de178f2a04280cf0281b08e0bbbe180363c9203e5c6dc5610cf20b/diff",
                "MergedDir": "/var/lib/docker/overlay2/22f9c210ac0423a69c8fb71f3e660d4b043cd4d291e3f219ab797699c3cb40a1/merged",
                "UpperDir": "/var/lib/docker/overlay2/22f9c210ac0423a69c8fb71f3e660d4b043cd4d291e3f219ab797699c3cb40a1/diff",
                "WorkDir": "/var/lib/docker/overlay2/22f9c210ac0423a69c8fb71f3e660d4b043cd4d291e3f219ab797699c3cb40a1/work"
            },
            "Name": "overlay2"
        },
        "RootFS": {
            "Type": "layers",
            "Layers": [
                "sha256:8d3ac3489996423f53d6087c81180006263b79f206d3fdec9e66f0e27ceb8759",
                "sha256:67bae81de3dc5ccf5101dd4973e8e4b10ee3d5681feb9c30119e6acee1e12dd5",
                "sha256:89f4d03665cee1ca943d0b55c086ea7577f4658c2cabe69eaf640f1dc47129f9",
                "sha256:318191938fd7801d80ad617482e4312f0ced71e6c1d4bcb02e12d90a9d65eb11",
                "sha256:a770f8eba3cb3840d7579e2c4925c9fa275813e8719fe5435905b887a9ee7674",
                "sha256:6fda88393b8b02872c87c6626807e7bfac1f49e63f47a5ddba0cd11fae99b575"
            ]
        },
        "Metadata": {
            "LastTagTime": "2021-12-27T23:30:07.206141383-05:00"
        }
    }
]

·······································································
#使用-f 指定获取特定参数
[root@virtual_host ~]# docker inspect nginx:alpine -f {{".Architecture"}} 
amd64

8:使用history命令查看镜像历史

[root@virtual_host ~]# docker history nginx:alpine 
IMAGE          CREATED                  CREATED BY                                      SIZE      COMMENT
bef258acf10d   Less than a second ago   /bin/sh -c #(nop)  CMD ["nginx" "-g" "daemon…   0B        
<missing>      Less than a second ago   /bin/sh -c #(nop)  STOPSIGNAL SIGQUIT           0B        
<missing>      Less than a second ago   /bin/sh -c #(nop)  EXPOSE 80                    0B        
<missing>      Less than a second ago   /bin/sh -c #(nop)  ENTRYPOINT ["/docker-entr…   0B        
<missing>      Less than a second ago   /bin/sh -c #(nop) COPY file:09a214a3e07c919a…   4.61kB    
<missing>      Less than a second ago   /bin/sh -c #(nop) COPY file:0fd5fca330dcd6a7…   1.04kB    
<missing>      Less than a second ago   /bin/sh -c #(nop) COPY file:0b866ff3fc1ef5b0…   1.96kB    
<missing>      Less than a second ago   /bin/sh -c #(nop) COPY file:65504f71f5855ca0…   1.2kB     
<missing>      Less than a second ago   /bin/sh -c set -x     && addgroup -g 101 -S …   17.8MB    
<missing>      Less than a second ago   /bin/sh -c #(nop)  ENV PKG_RELEASE=1            0B        
<missing>      Less than a second ago   /bin/sh -c #(nop)  ENV NJS_VERSION=0.7.2        0B        
<missing>      Less than a second ago   /bin/sh -c #(nop)  ENV NGINX_VERSION=1.21.6     0B        
<missing>      Less than a second ago   /bin/sh -c #(nop)  LABEL maintainer=NGINX Do…   0B        
<missing>      4 weeks ago              /bin/sh -c #(nop)  CMD ["/bin/sh"]              0B        
<missing>      4 weeks ago              /bin/sh -c #(nop) ADD file:9233f6f2237d79659…   5.59MB    

9:创建镜像

创建镜像的方法有以下3种方式:
(1)基于已有镜像的容器创建
(2)基于本地模板导入
(3)基于Dockerfile创建

(1)基于已有镜像的容器创建
命令格式:docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
主要选项:
-a:作者信息
-m:提交消息
-c:提交的时候执行Docker指令
-p:提交时暂停容器运行
	运行docker run后,进入到该容器中,我们做一些变更,比如安装一些东西,然后针对这个容器进行创建新的镜像
	
# 查看所有容器
[root@virtual_host ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED              STATUS                     PORTS     NAMES
cec08e21ac4b   nginx:alpine   "/docker-entrypoint.…"   About a minute ago   Exited (0) 3 seconds ago             nginx
# 启动ID为c6a的容器,ID可简写为前3位
[root@virtual_host ~]# docker start cec
cec
# 进入cec容器
[root@virtual_host ~]# docker exec -it cec /bin/sh
/ # 
# 写入测试网页
/ # echo "<a href="https://www.cnblogs.com/devopsdu"><h1>DevOpsdu</h1></a>" >/usr/share/nginx/html/index.html 

# 退出容器
/ # exit

# 创建新的镜像
[root@virtual_host ~]# docker commit -m "devopsdu" -a "devops" nginx nginx:devopsdu  
sha256:33459ba5bab2f8300948a344f2daf5b2223f565ad668726647ec60ea3a326e21

[root@virtual_host ~]# docker images
REPOSITORY   TAG        IMAGE ID       CREATED                  SIZE
nginx        alpine     bef258acf10d   Less than a second ago   23.4MB
nginx        v1         bef258acf10d   Less than a second ago   23.4MB
nginx        devopsdu   33459ba5bab2   3 seconds ago            23.4MB

(2)基于本地模板导入
[root@virtual_host ~]# docker images
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE
[root@virtual_host ~]# ls
anaconda-ks.cfg  nginx.tar.gz
[root@virtual_host ~]# docker load < nginx.tar.gz 
7d0ebbe3f5d2: Loading layer [==================================================>]  83.88MB/83.88MB
9a3a6af98e18: Loading layer [==================================================>]     62MB/62MB
9a94c4a55fe4: Loading layer [==================================================>]  3.072kB/3.072kB
6173b6fa63db: Loading layer [==================================================>]  4.096kB/4.096kB
235e04e3592a: Loading layer [==================================================>]  3.584kB/3.584kB
762b147902c0: Loading layer [==================================================>]  7.168kB/7.168kB
Loaded image: nginx:latest
[root@virtual_host ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED                  SIZE
nginx        latest    c316d5a335a5   Less than a second ago   142MB

(3)基于Dockerfile创建
基于nginx:alpine镜像构建一个自定义页面的新镜像
[root@virtual_host ~]# cat dockerfile 
FROM nginx:latest
RUN echo "<a href="https://www.cnblogs.com/devopsdu"><h1>DevOpsdu</h1></a>" >/usr/share/nginx/html/index.html
# 构建
[root@virtual_host ~]# docker build -t nginx:devopsdu .
Sending build context to Docker daemon  145.9MB
Step 1/2 : FROM nginx:latest
 ---> c316d5a335a5
Step 2/2 : RUN echo "<a href="https://www.cnblogs.com/devopsdu"><h1>DevOpsdu</h1></a>" >/usr/share/nginx/html/index.html
 ---> Running in f3d652072ad4
Removing intermediate container f3d652072ad4
 ---> 094758ba18b8
Successfully built 094758ba18b8
Successfully tagged nginx:devopsdu
[root@virtual_host ~]# docker images
REPOSITORY   TAG        IMAGE ID       CREATED                  SIZE
nginx        latest     c316d5a335a5   Less than a second ago   142MB
nginx        devopsdu   094758ba18b8   4 seconds ago            142MB

10:存出和载入镜像

#导出镜像到本地文件
[root@virtual_host ~]# docker save -o devopsdu.tar.gz nginx:devopsdu 
[root@virtual_host ~]# ls
anaconda-ks.cfg  devopsdu.tar.gz

#载入镜像
docker load -i < devopsdu.tar.gz 
或者
docker load < devopsdu.tar.gz

11:上传镜像

# 这里我选择使用自建harbor
# 登录仓库
[root@virtual_host ~]# docker login registry.kubernetes.com
Username: admin
Password: 
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded
[root@virtual_host ~]# docker  images
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE
[root@virtual_host ~]# docker pull nginx:alpine
alpine: Pulling from library/nginx
59bf1c3509f3: Pull complete 
8d6ba530f648: Pull complete 
5288d7ad7a7f: Pull complete 
39e51c61c033: Pull complete 
ee6f71c6f4a8: Pull complete 
f2303c6c8865: Pull complete 
Digest: sha256:da9c94bec1da829ebd52431a84502ec471c8e548ffb2cedbf36260fd9bd1d4d3
Status: Downloaded newer image for nginx:alpine
docker.io/library/nginx:alpine
# 更改tag
[root@virtual_host ~]# docker tag nginx:alpine registry.kubernetes.com/library/nginx:alpine
# 推送镜像到仓库
[root@virtual_host ~]# docker push registry.kubernetes.com/library/nginx:alpine 
The push refers to repository [registry.kubernetes.com/library/nginx]
6fda88393b8b: Pushed 
a770f8eba3cb: Pushed 
318191938fd7: Pushed 
89f4d03665ce: Pushed 
67bae81de3dc: Pushed 
8d3ac3489996: Pushed 
alpine: digest: sha256:050385609d832fae11b007fbbfba77d0bba12bf72bc0dca0ac03e09b1998580f size: 1568
posted @ 2022-02-03 15:14  Layzer  阅读(346)  评论(0编辑  收藏  举报