侧边栏壁纸
博主头像
晓然博主等级

走着、走着、花开了

  • 累计撰写 37 篇文章
  • 累计创建 15 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

[笔记]Docker核心技术之镜像

晓然
2023-03-07 / 0 评论 / 0 点赞 / 27 阅读 / 1,944 字
温馨提示:
本文最后更新于 2023-03-07,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

镜像简介

镜像是一个Docker的可执行文件,其中包括运行应用程序所需的所有代码内容、依赖库、环境变量和配置文件等;也可以通过镜像创建一个或多个容器。
(可以类比Ubuntu系统镜像、软件镜像之类)

镜像管理

镜像下载

命令格式

docker pull [OPTIONS] NAME[:TAG|@DIGEST]

作用
下载远程仓库中的镜像
使用演示
1.下载ubuntu镜像,发现默认使用的latest标签的镜像

xiaoran@cjdll:~$ docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
76769433fd8a: Pull complete 
Digest: sha256:2adf22367284330af9f832ffefb717c78239f6251d9d0f58de50b86229ed1427
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest

2下载Ubuntu 22.04镜像

xiaoran@cjdll:~$ docker pull ubuntu:22.04
22.04: Pulling from library/ubuntu
Digest: sha256:2adf22367284330af9f832ffefb717c78239f6251d9d0f58de50b86229ed1427
Status: Downloaded newer image for ubuntu:22.04
docker.io/library/ubuntu:22.04

镜像查看

命令格式

docker images [OPTIONS] [REPOSITORY[:TAG]]

作用
列出本地镜像
使用演示
1.查看本地所有镜像

xiaoran@cjdll:~$ docker images -a
镜像名称      镜像标签   镜像id         创建时间      镜像大小
REPOSITORY   TAG       IMAGE ID       CREATED      SIZE
ubuntu       22.04     74f2314a03de   2 days ago   77.8MB
ubuntu       latest    74f2314a03de   2 days ago   77.8MB
debian       latest    72b624312240   2 days ago   124MB

2.docker images命令支持通配符

xiaoran@cjdll:~$ docker images deb*
REPOSITORY   TAG       IMAGE ID       CREATED      SIZE
debian       latest    72b624312240   2 days ago   124MB
xiaoran@cjdll:~$ docker images ubu*
REPOSITORY   TAG       IMAGE ID       CREATED      SIZE
ubuntu       22.04     74f2314a03de   2 days ago   77.8MB
ubuntu       latest    74f2314a03de   2 days ago   77.8MB

3.查看指定版本,指定tag

xiaoran@cjdll:~$ docker images ubuntu:22.04
REPOSITORY   TAG       IMAGE ID       CREATED      SIZE
ubuntu       22.04     74f2314a03de   2 days ago   77.8MB

镜像搜索

命令格式

docker search [OPTIONS] TERM

作用
搜索Docker Hub(镜像仓库)上的镜像
使用示例

xiaoran@cjdll:~$ docker search ubuntu
NAME                             DESCRIPTION                                      STARS     OFFICIAL   AUTOMATED
ubuntu                           Ubuntu is a Debian-based Linux operating sys…   15667     [OK]       
websphere-liberty                WebSphere Liberty multi-architecture images …   292       [OK]       
open-liberty                     Open Liberty multi-architecture images based…   58        [OK]  

镜像删除

命令格式

docker rmi [OPTIONS] IMAGE [IMAGE...]

作用
删除一个或者多个镜像
演示
删除debian镜像,通过镜像名称

xiaoran@cjdll:~$ docker rmi debian
Untagged: debian:latest
Untagged: debian@sha256:f81bf5a8b57d6aa1824e4edb9aea6bd5ef6240bcc7d86f303f197a2eb77c430f
Deleted: sha256:72b6243122405be2c5c5e7e20d410f4c8fe301e1ce84cc60ea591b63167750e6
Deleted: sha256:cf2e8433dbf248a87d49abe6aa4368bb100969be2267db02015aa9c38d7225ed

2.通过镜像id删除debian 10版本

#查找debian 10 镜像id
xiaoran@cjdll:~$ docker images -a
REPOSITORY   TAG       IMAGE ID       CREATED      SIZE
ubuntu       22.04     74f2314a03de   2 days ago   77.8MB
ubuntu       latest    74f2314a03de   2 days ago   77.8MB
debian       10        f03c282363a3   2 days ago   114MB
#删除镜像id时,rmi后面加上镜像id
xiaoran@cjdll:~$ docker rmi f03c282363a3
Untagged: debian:10
Untagged: debian@sha256:2d356e1e22c0902f88ef65cb7159ecd5a96feb62345747edfd4324b0d83a2923
Deleted: sha256:f03c282363a3e8103837d375c8b96a55127c214229142a39022a95262a96f5fb
Deleted: sha256:77d93c617a90f9e3aadfe9a5913d628c22c234551bc34b1533bae5cc90458b89

3.当两个镜像id相同时,可以指定tag删除,如果通过镜像id删除时,会报错Error response from daemon: conflict: unable to delete 74f2314a03de (must be forced) - image is referenced in multiple repositories

#发现ubuntu的两个镜像id相同
xiaoran@cjdll:~$ docker images -a
REPOSITORY   TAG       IMAGE ID       CREATED      SIZE
ubuntu       22.04     74f2314a03de   2 days ago   77.8MB
ubuntu       latest    74f2314a03de   2 days ago   77.8MB
#镜像id方式,会报错
xiaoran@cjdll:~$ docker rmi 74f2
Error response from daemon: conflict: unable to delete 74f2314a03de (must be forced) - image is referenced in multiple repositories
# 通过指定tag方式删除
xiaoran@cjdll:~$ docker rmi ubuntu:latest
Untagged: ubuntu:latest
#再次查看镜像,发现latest已经删除
xiaoran@cjdll:~$ docker images -a
REPOSITORY   TAG       IMAGE ID       CREATED      SIZE
ubuntu       22.04     74f2314a03de   2 days ago   77.8MB

镜像保存备份

命令格式

docker save [OPTIONS] IMAGE [IMAGE...]

作用
将本地的一个或多个镜像打包保存成本地tar文件(输出到STDOUT)
演示
通过镜像id、镜像名称的方式,将ubuntu22.04和debian一起打包,并保存到本地/demo/linux.tar;不推荐镜像id方式打包。

#查看镜像id
xiaoran@cjdll:~$ docker images -a
REPOSITORY   TAG       IMAGE ID       CREATED      SIZE
ubuntu       22.04     74f2314a03de   2 days ago   77.8MB
debian       latest    72b624312240   2 days ago   124MB
xiaoran@cjdll:~$ sudo docker save  -o /demo/linux.tar 74f23 debian
# 查看目标文件是否生成
xiaoran@cjdll:~$ ls /demo/
linux.tar

镜像备份导入

命令格式

docker load [OPTIONS]

作用
将save命令打包的镜像导入本地镜像库
演示
导入上一步备份的镜像

xiaoran@cjdll:~$ sudo docker load -i /demo/linux.tar
202fe64c3ce3: Loading layer  80.33MB/80.33MB
cf2e8433dbf2: Loading layer  129.3MB/129.3MB
Loaded image: debian:latest

查看导入的镜像

xiaoran@cjdll:~$ docker images -a
REPOSITORY   TAG       IMAGE ID       CREATED      SIZE
<none>       <none>    74f2314a03de   2 days ago   77.8MB
debian       latest    72b624312240   2 days ago   124MB

发现镜像id为74f2314a03de的镜像的TAG 和 REPOSITORY变成了none,这是因为由于保存备份时是通过镜像id方式的,会导致这样,可以通过tag或者镜像名称,避免编程none,或者可以重命名镜像名称

镜像重命令

命令格式

docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]

作用
对本地镜像的NAME、TAG进行重命名,并产生一个命令后镜像
演示
将镜像id为74f2314a03de的镜像重命名为ubuntu latest

xiaoran@cjdll:~$ docker tag 74f ubuntu:latest
xiaoran@cjdll:~$ docker images -a
REPOSITORY   TAG       IMAGE ID       CREATED      SIZE
ubuntu       latest    74f2314a03de   2 days ago   77.8MB
debian       latest    72b624312240   2 days ago   124MB

将debian镜像,重命名为debian 11

xiaoran@cjdll:~$ docker tag debian debian:11
#发现重命名镜像后,是生成了一个新的目标镜像,并不是覆盖原有镜像
xiaoran@cjdll:~$ docker images -a
REPOSITORY   TAG       IMAGE ID       CREATED      SIZE
ubuntu       latest    74f2314a03de   2 days ago   77.8MB
debian       11        72b624312240   2 days ago   124MB
debian       latest    72b624312240   2 days ago   124MB

镜像详细信息查看

命令格式

docker inspect [OPTIONS] NAME|ID [NAME|ID...]
# 或者
docker image inspect [OPTIONS] IMAGE [IMAGE...]

作用
查看本地一个或多个镜像的详细信息
演示
通过镜像id方式查看ubuntu镜像详细信息docker inspect 74f2

[
    {
        "Id": "sha256:74f2314a03de34a0a2d552b805411fc9553a02ea71c1291b815b2f645f565683",
        "RepoTags": [
            "ubuntu:latest"
        ],
        "RepoDigests": [],
        "Parent": "",
        "Comment": "",
        "Created": "2023-03-01T04:38:49.239257335Z",
        "Container": "298f60554671ae2f5bf43b9892526aaa221e8093c9cee1ca68ef65fc3ac67600",
        "ContainerConfig": {
            "Hostname": "298f60554671",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "/bin/sh",
                "-c",
                "#(nop) ",
                "CMD [\"/bin/bash\"]"
            ],
            "Image": "sha256:6088cf91777e3b0190e579c7c7cab9c65626f5ff625373bcdb02ae877a9118d8",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {
                "org.opencontainers.image.ref.name": "ubuntu",
                "org.opencontainers.image.version": "22.04"
            }
        },
        "DockerVersion": "20.10.12",
        "Author": "",
        "Config": {
            "Hostname": "",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "/bin/bash"
            ],
            "Image": "sha256:6088cf91777e3b0190e579c7c7cab9c65626f5ff625373bcdb02ae877a9118d8",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {
                "org.opencontainers.image.ref.name": "ubuntu",
                "org.opencontainers.image.version": "22.04"
            }
        },
        "Architecture": "amd64",
        "Os": "linux",
        "Size": 77810712,
        "VirtualSize": 77810712,
        "GraphDriver": {
            "Data": {
                "MergedDir": "/var/lib/docker/overlay2/ea2774b7bd12f55e0c410b60eda3e545eeb2001455a9d40120893646af4397dc/merged",
                "UpperDir": "/var/lib/docker/overlay2/ea2774b7bd12f55e0c410b60eda3e545eeb2001455a9d40120893646af4397dc/diff",
                "WorkDir": "/var/lib/docker/overlay2/ea2774b7bd12f55e0c410b60eda3e545eeb2001455a9d40120893646af4397dc/work"
            },
            "Name": "overlay2"
        },
        "RootFS": {
            "Type": "layers",
            "Layers": [
                "sha256:202fe64c3ce39b94d8beda7d7506ccdfcf7a59f02f17c915078e4c62b5c2ed11"
            ]
        },
        "Metadata": {
            "LastTagTime": "2023-03-04T05:44:08.300907262+08:00"
        }
    }
]

也可以配合grep命令,筛选查看,比如查看镜像id

xiaoran@cjdll:~$ docker inspect 74f2314a03 | grep Id
        "Id": "sha256:74f2314a03de34a0a2d552b805411fc9553a02ea71c1291b815b2f645f565683",

通过参数-f查看id

xiaoran@cjdll:~$ docker inspect -f "{{json .Id}}"   74f2314a03
"sha256:74f2314a03de34a0a2d552b805411fc9553a02ea71c1291b815b2f645f565683"

镜像历史信息

命令格式

docker history [OPTIONS] IMAGE

作用
查看本地一个镜像历史(历史分层)信息;需要了解dockerfie
演示

xiaoran@cjdll:~$ docker history 74f2314a03de
IMAGE          CREATED      CREATED BY                                       SIZE      COMMENT
74f2314a03de   2 days ago   /bin/sh -c #(nop)  CMD ["/bin/bash"]             0B        
<missing>      2 days ago   /bin/sh -c #(nop) ADD file:fb4c8244f4468cdd3…   77.8MB    
<missing>      2 days ago   /bin/sh -c #(nop)  LABEL org.opencontainers.…   0B        
<missing>      2 days ago   /bin/sh -c #(nop)  LABEL org.opencontainers.…   0B        
<missing>      2 days ago   /bin/sh -c #(nop)  ARG LAUNCHPAD_BUILD_ARCH      0B        
<missing>      2 days ago   /bin/sh -c #(nop)  ARG RELEASE                   0B 

总结

待更新

0

评论区