Loading

Docker image/镜像相关命令

镜像相关命令

获取镜像

从官方仓库获取镜像

$ docker[image] pull NAME[:tag]
# 等同于
$ docker[image] pull registry.hub.docker.com/NAME[:tage]
  • 不加 tag,默认下载的 latest 版本

eg:

$ docker pull ubuntu:18.04

18.04: Pulling from library/ubuntu
f46992f278c2: Pull complete
Digest: sha256:0fedbd5bd9fb72089c7bbca476949e10593cebed9b1fb9edf5b79dbbacddd7d6
Status: Downloaded newer image for ubuntu:18.04
docker.io/library/ubuntu:18.04

使用非官方仓库下载镜像

$ docker[image] pull url/NAME[:tage]
# eg
$ docker pull hub.c.163.com/public/ubuntu:18.04

使用 images 命令列出镜像

使用 docker imagesdocker image ls 命令可以列出本地已有的镜像的基本信息

$ docker images

REPOSITORY              TAG           IMAGE ID       CREATED         SIZE
ubuntu                  18.04         7266638574fb   29 hours ago    56.6MB
rabbitmq                management    e06e2cb8dff0   8 months ago    178MB
openjdk                 11.0.10-jdk   e39d5911ffc8   8 months ago    637MB
halohub/halo            latest        95d3f180227d   8 months ago    316MB
im-server               0.1           81e97a086368   8 months ago    325MB
mongo                   4.4.3         095aea9826c2   8 months ago    469MB
postgres                12.5          72f9cd99893c   9 months ago    300MB
redis                   alpine        2bae1be2a13c   10 months ago   31.7MB
alpine                  latest        afeebe901d6b   10 months ago   5.32MB
redis                   latest        e26416b7c483   10 months ago   98.5MB
ubuntu                  latest        1c28a1589115   10 months ago   65.7MB
ubuntu                  <none>        84282c80cdda   10 months ago   56.7MB
arm64v8/elasticsearch   7.8.0         9522ad0a773f   16 months ago   1.33GB
houwm/jdk8              latest        bbfbacf7c6b0   22 months ago   251MB
python                  3.4-alpine    99a53e6ad17e   2 years ago     80.6MB
  • REPOSITORY:镜像来源的仓库

  • TAG:镜像的标签/版本

  • IMAGE ID:镜像的ID(唯一标识),如果两个镜像的ID相同,说明它们实际指向同一个镜像,只是具有不同的标签名称而已

  • CREATED:镜像最后的更新时间

  • SIZE:镜像大小

images 支持以下子命令

  • -a,-all=true|false:列出所有(包括临时文件)镜像文件,默认为否
  • --digests=ture|false:列出镜像的数字摘要,默认为否
  • -f,-filter=[]:过滤列出镜像,如 dangling=true 是现实被使用的镜像
  • --format="TEMPLATE":控制输出格式,如ID代表ID信息,Repository代表仓库信息等
  • --no-trunc=true|false:对输出结果中太长的部分是否截断,如镜像的ID信息,默认为是
  • -q,--quiet=true|false:仅输出ID信息

使用 tag 命令添加镜像标签

为了方便在后续工作中使用特定镜像,可以使用 docker tag 命令为本地镜像添加新的名称和标签

$ docker tag ubuntu:18.04 myubuntu:1.0

再次使用 docker images 可以看到多出了myubuntu:1.0 镜像

$ docker images

REPOSITORY              TAG           IMAGE ID       CREATED         SIZE
ubuntu                  18.04         7266638574fb   30 hours ago    56.6MB
myubuntu                1.0           7266638574fb   30 hours ago    56.6MB

使用 inspect 查看镜像的详细信息

$ docker[image] inspect NAME:TAG

例如查看镜像 ubuntu:18.04 的详细信息

$ docker inspect ubuntu:18.04

可以得到如下结果

[
    {
        "Id": "sha256:7266638574fb52620df20fea4dbcc00e2e508f497033dd80fc0a7a02e024a118",
        "RepoTags": [
            "myubuntu:1.0",
            "ubuntu:18.04"
        ],
        "RepoDigests": [
            "ubuntu@sha256:0fedbd5bd9fb72089c7bbca476949e10593cebed9b1fb9edf5b79dbbacddd7d6"
        ],
        "Parent": "",
        "Comment": "",
        "Created": "2021-10-16T01:47:38.799627788Z",
        "Container": "6f3fdaf3fd520e2fbc9582c3e4a7420e45a0a5bb1358b7d49cba43e635c6ff6e",
        "ContainerConfig": {
            "Hostname": "6f3fdaf3fd52",
            "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 [\"bash\"]"
            ],
            "Image": "sha256:3ef4f79929dfb2c09550123b7bb6923b23cccff8e00c8a2a37ed758f3b9898ab",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {}
        },
        "DockerVersion": "20.10.7",
        "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": [
                "bash"
            ],
            "Image": "sha256:3ef4f79929dfb2c09550123b7bb6923b23cccff8e00c8a2a37ed758f3b9898ab",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": null
        },
        "Architecture": "arm64",
        "Variant": "v8",
        "Os": "linux",
        "Size": 56629564,
        "VirtualSize": 56629564,
        "GraphDriver": {
            "Data": {
                "MergedDir": "/var/lib/docker/overlay2/a23bfae2444e5d12231573215580fdadfc066be57ad65b355be4c91d27d549a0/merged",
                "UpperDir": "/var/lib/docker/overlay2/a23bfae2444e5d12231573215580fdadfc066be57ad65b355be4c91d27d549a0/diff",
                "WorkDir": "/var/lib/docker/overlay2/a23bfae2444e5d12231573215580fdadfc066be57ad65b355be4c91d27d549a0/work"
            },
            "Name": "overlay2"
        },
        "RootFS": {
            "Type": "layers",
            "Layers": [
                "sha256:0588f50388e8c774dceb269b18ef6448aad63daa67b14244656f79c1a29ec54a"
            ]
        },
        "Metadata": {
            "LastTagTime": "2021-10-17T07:25:36.478608383Z"
        }
    }
]

使用 hsitory 查看镜像历史

镜像文件是由多个层组成,可以使用 history 命令查看镜像的每个层的信息,例如查看 ubuntu:18.04 的历史

$ docker history ubuntu:18.04

IMAGE          CREATED        CREATED BY                                      SIZE      COMMENT
7266638574fb   30 hours ago   /bin/sh -c #(nop)  CMD ["bash"]                 0B
<missing>      30 hours ago   /bin/sh -c #(nop) ADD file:35e2504756850fc1a…   56.6MB

注意,如果命令太长被截断了,可以使用 --no-trunc 来输出完成命令

$ docker history --no-trunc ubuntu:18.04

IMAGE                                                                     CREATED        CREATED BY                                                                                          SIZE      COMMENT
sha256:7266638574fb52620df20fea4dbcc00e2e508f497033dd80fc0a7a02e024a118   30 hours ago   /bin/sh -c #(nop)  CMD ["bash"]                                                                     0B
<missing>                                                                 30 hours ago   /bin/sh -c #(nop) ADD file:35e2504756850fc1add00516fa89b0499b59c348457a96708eedb61313e7b25e in /    56.6MB

搜索镜像

搜索官方仓库 Docker Hub 的镜像

$ docker search [option] keyword

支持的 option 主要包括

  • -f:过滤输出内容
  • --format:格式化输出内容
  • --limit:限制输出个数,默认 255
  • --no-trunc:不截断输出结果

例如,搜索官方提供的 nginx

$ docker search --filter=is-official=true nginx

NAME      DESCRIPTION                STARS     OFFICIAL   AUTOMATED
nginx     Official build of Nginx.   15642     [OK]

例如,搜索收藏数大于 200 的 nginx 镜像

$ docker search --filter=stars=200 nginx

NAME                       DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
nginx                      Official build of Nginx.                        15642     [OK]
jwilder/nginx-proxy        Automated Nginx reverse proxy for docker con…   2077                 [OK]
richarvey/nginx-php-fpm    Container running Nginx + PHP-FPM capable of…   818                  [OK]
jc21/nginx-proxy-manager   Docker container for managing Nginx proxy ho…   256

删除镜像

使用标签删除镜像

$ docker rmi NAME:TAG
$ docker image rm NAME:TAG

支持选项包括

  • -f:强制删除镜像,即使有容器依赖该镜像
  • -no-prune:不要清理未带标签的父镜像

例如,删除 myubuntu:1.0

$ docker rmi myubuntu:1.0

Untagged: myubuntu:1.0

使用镜像ID删除镜像

可以使用 docker rmi 后面来跟上镜像ID来删除镜像

删除有容器依赖的镜像

$ docker rmi ubuntu:18.04
Error response from daemon: conflict: unable to remove repository reference "ubuntu:18.04" (must force) - container 9656574ad170 is using its referenced image 7266638574fb

无法删除,有容器依赖的镜像,可以添加 -f 选项,强制删除(不推荐),应该先删除容器,再删除镜像

# 删除容器
$ docker rm 9656574ad170
# 删除镜像
$ docker rmi ubuntu:18.04

清理镜像

使用 Docker 一段时间后,系统可能会遗留一些,临时镜像,使用docker image prune命令来进行清理

支持的选项包括

  • -a:删除没用到的镜像(没创建r容器),不光是临时镜像
  • --filter:只清理符合条件的镜像
  • -f:强制删除镜像,不进行提示

创建镜像

创建镜像主要有三种方式,非别是

  • 基于容器创建
  • 基于本地模板导入
  • 基于Dockerfile创建

下面介绍主要第一种方式,第二种方式用的不多,基于Dockerfile创建是一个重点,会单独写一个文档介绍

基于已有容器创建

$ docker commit [option] container-id NAME:TAG

例如,先使用 ubuntu:18.04 创建一个容器,在进入容器,创建一个文件,此时容器内容已经以原有镜像不同了,再使用命令基于当前容器创建一个自己的镜像

$ docker run -it ubuntu:18.04 bash

root@e4a1ee5a2941:/# touch test.txt
root@e4a1ee5a2941:/# echo hello > test.txt
root@e4a1ee5a2941:/# exit
exit

$ docker commit -m "Add a new file" -a="linck" e4a1ee5a2941 test:0.1
sha256:2360c72e2c2c393d7f654a882cfba163518d802f65b477a5bdadb336dedbf320

$ docker images
REPOSITORY              TAG           IMAGE ID       CREATED         SIZE
test                    0.1           2360c72e2c2c   5 seconds ago   56.6MB
ubuntu                  18.04         7266638574fb   37 hours ago    56.6MB

$ docker history test:0.1
IMAGE          CREATED          CREATED BY                                      SIZE      COMMENT
2360c72e2c2c   16 seconds ago   bash                                            49B       Add a new file
7266638574fb   37 hours ago     /bin/sh -c #(nop)  CMD ["bash"]                 0B
<missing>      37 hours ago     /bin/sh -c #(nop) ADD file:35e2504756850fc1a…   56.6MB

可选的 option 主要包括

  • -a,--author="":作者信息
  • -m,--message="":提交信息
  • -p,--pause=true:提交时,暂停容器的运行
  • -c,--change=[],提交时,执行Dockerfile命令

基于模板导入

$ docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]

例如下载了ubuntu-18.04 的模板压缩包,之后使用命令导入

$ docker import ubuntu-18.04-x86_64-minimal.tar.gz ubuntu:18.04

导出和载入镜像

使用 save 和 load 命令来导出和导入 docker 镜像

# 导出 test:0.1 镜像到 test:0.1.tar 文件
$ docker save -o test:0.1.tar test:0.1

$ ls -l
-rw-------  1 linchangkun  staff  58894336 10 17 23:28 test:0.1.tar

# 删除 test:0.1 镜像
$ docker rmi test:0.1
REPOSITORY              TAG           IMAGE ID       CREATED         SIZE
ubuntu                  18.04         7266638574fb   38 hours ago    56.6MB
rabbitmq                management    e06e2cb8dff0   8 months ago    178MB
openjdk                 11.0.10-jdk   e39d5911ffc8   8 months ago    637MB
mongo                   4.4.3         095aea9826c2   8 months ago    469MB
postgres                12.5          72f9cd99893c   9 months ago    300MB
ubuntu                  <none>        84282c80cdda   10 months ago   56.7MB
arm64v8/elasticsearch   7.8.0         9522ad0a773f   16 months ago   1.33GB
houwm/jdk8              latest        bbfbacf7c6b0   22 months ago   251MB
python                  3.4-alpine    99a53e6ad17e   2 years ago     80.6MB

# 从文件载入 test:0.1 镜像
$ docker load -i test:0.1.tar
6839163c14a9: Loading layer  3.584kB/3.584kB
Loaded image: test:0.1

# 查看 test:0.1 镜像已经有了
$ docker images
REPOSITORY              TAG           IMAGE ID       CREATED          SIZE
test                    0.1           2360c72e2c2c   22 minutes ago   56.6MB
ubuntu                  18.04         7266638574fb   38 hours ago     56.6MB
rabbitmq                management    e06e2cb8dff0   8 months ago     178MB
openjdk                 11.0.10-jdk   e39d5911ffc8   8 months ago     637MB
mongo                   4.4.3         095aea9826c2   8 months ago     469MB
postgres                12.5          72f9cd99893c   9 months ago     300MB
ubuntu                  <none>        84282c80cdda   10 months ago    56.7MB
arm64v8/elasticsearch   7.8.0         9522ad0a773f   16 months ago    1.33GB
houwm/jdk8              latest        bbfbacf7c6b0   22 months ago    251MB
python                  3.4-alpine    99a53e6ad17e   2 years ago      80.6MB

运行镜像

运行镜像会利用该镜像启动一个容器,例如使用刚刚下载的 ubuntu:18.04 镜像创建一个容器,并在其中使用 bash,执行打印 Hello World!

$ docker run -it ubuntu:18.04 bash

root@9656574ad170:/# echo "Hello World!"
Hello World!
root@9656574ad170:/# exit
exit
posted @ 2021-10-17 23:35  zerolinck  阅读(1405)  评论(0编辑  收藏  举报