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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM