天天看點

容器技術Docker雲計算實戰 鏡像操作大總結

Docker實戰之鏡像操作:

擷取鏡像:

docker pull NAME[:TAG]

root@doc-vm:~# docker pull hello-world

Using default tag: latest

latest: Pulling from library/hello-world

ca4f61b1923c: Pull complete

Digest: sha256:150f6d05b8898b79f55114991c01b89688a02dab6115e402b7855792a440caff

Status: Downloaded newer image for hello-world:latest

latest标簽意味着這個鏡像的内容會跟蹤最新的非穩定版本而發步,内容是不穩定的。不要在生産環境中使用latest标簽的鏡像。

使用其他鏡像源進行下載下傳:

root@doc-vm:~# docker pull hub.c.163.com/public/ubuntu:14.04

14.04: Pulling from public/ubuntu

f4ab0b34ba6a: Pull complete

2f0787dc0bfe: Pull complete

54c427d77362: Pull complete

51e87d5424ff: Pull complete

5dfa314e7290: Pull complete

a3ed95caeb02: Pull complete

Digest: sha256:ffc2fc66f8e0bfa4b417b817054d3ebec130c8db44342b8fa394e25779633257

Status: Downloaded newer image for hub.c.163.com/public/ubuntu:14.04

pull指令支援的選項:

-a, --all-tags=true|false:是否擷取倉庫中的所有鏡像,預設是否。

檢視鏡像資訊:

docker images

root@doc-vm:~# docker images

REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE

nginx                         latest              9e7424e5dbae        5 days ago          108 MB

hello-world                   latest              f2a91732366c        7 days ago          1.85 kB

ubuntu                        latest              20c44cd7596f        10 days ago         123 MB

tomcat                        latest              11df4b40749f        13 days ago         558 MB

mysql                         latest              5709795eeffa        3 weeks ago         408 MB

busybox                       latest              6ad733544a63        3 weeks ago         1.13 MB

centos                        latest              d123f4e55e12        3 weeks ago         197 MB

hub.c.163.com/public/ubuntu   14.04               2fe5c4bba1f9        20 months ago       237 MB

images的子選項:

-a, --all=true|false:列出所有鏡像檔案,預設是否

--digest=true|false:列出鏡像的數字摘要值,預設是否

-f,--filter=[]:過濾列出的鏡像

--format="TEMPLATE":控制輸出格式

--no-turnc=true|false:對輸出結果中太長的部分是否進行截斷,預設為是

-q,--quiet=true|false:僅僅輸出ID資訊,預設是否

使用tag指令添加鏡像标簽:

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

root@doc-vm:~# docker tag ubuntu:latest mysystem:latest

mysystem                      latest              20c44cd7596f        10 days ago         123 MB

實際上指向的是同一個檔案,隻是别名而已。

使用inspect指令檢視詳細資訊:

docker inspect [OPTIONS] NAME|ID [NAME|ID...]

root@doc-vm:~# docker inspect ubuntu

[

    {

        "Id": "sha256:20c44cd7596ff4807aef84273c99588d22749e2a7e15a7545ac96347baa65eda",

        "RepoTags": [

            "mysystem:latest",

            "ubuntu:latest"

        ],

        "RepoDigests": [

            "ubuntu@sha256:cb67b69a3b83dc209418cf15dace1a2fe336e37ef6a972a00fb9e02a608a8184"

        "Parent": "",

        "Comment": "",

        "Created": "2017-11-17T21:59:25.014645802Z",

        "Container": "e5f1a9df75b86a5d803eaf6f3fed6a0f8ef5fbf15a6c5039df087e4348ed8171",

        "ContainerConfig": {

            "Hostname": "e5f1a9df75b8",

            "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\"]"

            "ArgsEscaped": true,

            "Image": "sha256:b5771e7d8dcc594b886dbdd6a9c3de60d45252ca657dfdff6e1d996728dfa2cd",

            "Volumes": null,

            "WorkingDir": "",

            "Entrypoint": null,

            "OnBuild": null,

            "Labels": {}

        },

        "DockerVersion": "17.06.2-ce",

        "Author": "",

        "Config": {

            "Hostname": "",

                "/bin/bash"

            "Labels": null

        "Architecture": "amd64",

        "Os": "linux",

        "Size": 122792927,

        "VirtualSize": 122792927,

        "GraphDriver": {

            "Name": "aufs",

            "Data": null

        "RootFS": {

            "Type": "layers",

            "Layers": [

                "sha256:788ce2310e2fdbbf81fe21cbcc8a44da4cf648b0339b09c221abacb4cd5fd136",

                "sha256:aa4e47c4511638484cd5d95eadd7a8e4da307375ba31ff50d47aa9065dce01e0",

                "sha256:b3968bc26fbd527f214f895aeef940a6930c62d853fe8b12bd479f0b53518150",

                "sha256:c9748fbf541d3e043521e165b015d45825de33c00a8acb037443cfbd0cb5e677",

                "sha256:2f5b0990636a87f1557d64ba39808dcd64031328b2a159c5805115b8e725bbbc"

            ]

        }

    }

]

傳回的是Josn格式的資訊,指定其中一項可以是:

root@doc-vm:~# docker inspect -f {{".Os"}} ubuntu

linux

搜尋鏡像:

docker search [OPTIONS] TERM

--automated-true|false:僅僅顯示自動建立的鏡像,預設是否

--no-trunc=true|false:輸出資訊不截斷顯示,預設是否

-s,--stare=X:僅僅顯示評價為指定星級以上的鏡像,預設是0,也就是輸出所有的鏡像。

root@doc-vm:~# docker search ubuntu

NAME                                                   DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED

ubuntu                                                 Ubuntu is a Debian-based Linux operating s...   6868      [OK]

dorowu/ubuntu-desktop-lxde-vnc                         Ubuntu with openssh-server and NoVNC            146                  [OK]

rastasheep/ubuntu-sshd                                 Dockerized SSH service, built on top of of...   117                  [OK]

ansible/ubuntu14.04-ansible                            Ubuntu 14.04 LTS with ansible                   89                   [OK]

ubuntu-upstart                                         Upstart is an event-based replacement for ...   80        [OK]

neurodebian                                            NeuroDebian provides neuroscience research...   40        [OK]

ubuntu-debootstrap                                     debootstrap --variant=minbase --components...   32        [OK]

nuagebec/ubuntu                                        Simple always updated Ubuntu docker images...   22                   [OK]

tutum/ubuntu                                           Simple Ubuntu docker images with SSH access     19

1and1internet/ubuntu-16-nginx-php-phpmyadmin-mysql-5   ubuntu-16-nginx-php-phpmyadmin-mysql-5          18                   [OK]

... ...

使用docker history檢視鏡像曆史:

鏡像是由多個層組成的,檢視每個層的具體内容。

root@doc-vm:~# docker history ubuntu

IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT

20c44cd7596f        10 days ago         /bin/sh -c #(nop)  CMD ["/bin/bash"]            0 B

<missing>           10 days ago         /bin/sh -c mkdir -p /run/systemd && echo '...   7 B

<missing>           10 days ago         /bin/sh -c sed -i 's/^#\s*\(deb.*universe\...   2.76 kB

<missing>           10 days ago         /bin/sh -c rm -rf /var/lib/apt/lists/*          0 B

<missing>           10 days ago         /bin/sh -c set -xe   && echo '#!/bin/sh' >...   745 B

<missing>           10 days ago         /bin/sh -c #(nop) ADD file:280a445783f309c...   123 MB

删除鏡像:

使用docker rmi删除鏡像,指令格式:docker rmi IMAGE [IMAGE...]

如果鏡像有多個标簽,docker rmi指令隻會删除該鏡像的指定标簽,并不會影響鏡像檔案,當隻剩下一個标簽的時候才會删除真正的鏡像。

docker rmi ID [ID...]

首先會嘗試删除所有指向該鏡像的标簽,然後删除該鏡像的檔案本身。

當基于該鏡像的容器正在運作的時候,預設是無法删除的,可以使用-f參數強制删除。

建立鏡像:

基于已經有的鏡像建立鏡像:

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

-a,--author="":作者資訊

-c,--change=[]:送出的時候執行Dockerfile指令

-m,--message="":送出資訊

-p,--pause=true:送出時暫停容器的運作

root@doc-vm:~# docker run -it ubuntu bash

root@6ea8cd52c3eb:/# touch test

root@6ea8cd52c3eb:/# exit

exit

root@doc-vm:~# docker ps -a

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES

6ea8cd52c3eb        ubuntu              "bash"              52 seconds ago      Exited (0) 30 seconds ago                       nervous_hoover

root@doc-vm:~# docker commit -m "Added a Docker image" -a "deepking" 6ea8cd52c3eb ubuntutest:1.0

sha256:4ef2ad9d1aea15766c612d3c0090ad6128f803ebb8f4a4b75005d90001dbc893

ubuntutest                    1.0                 4ef2ad9d1aea        7 seconds ago       123 MB

基于本地模闆導入:

主要使用docker import [OPTIONS] file|url|-[REPOSITORY[:TAG]]

使用OpenVZ提供的模闆;來建立,下載下傳位址是:https://openvz.org/Download/template/precreated

root@doc-vm:~# cd Downloads/

root@doc-vm:~/Downloads# ll

total 705496

drwxr-xr-x  2 doc doc      4096 11月 29 12:33 ./

drwxr-xr-x 16 doc doc      4096 11月 29 12:13 ../

-rw-rw-r--  1 doc doc 111337720 11月 29 12:14 centos-6-x86-20170709.tar.xz

-rw-rw-r--  1 doc doc  67229480 11月 29 12:13 centos-6-x86-minimal-20170709.tar.xz

-rw-rw-r--  1 doc doc  69329732 11月 29 12:13 centos-7-x86_64-minimal-20170709.tar.xz

-rw-rw-r--  1 doc doc  81103335 11月 29 12:13 debian-6.0-x86-minimal.tar.gz

-rw-rw-r--  1 doc doc 155356791 11月 29 12:16 debian-6.0-x86.tar.gz

-rw-rw-r--  1 doc doc 181654531 11月 29 12:18 ubuntu-15.10-x86_64.tar.gz

-rw-rw-r--  1 doc doc  56375699 9月  14 17:13 VMwareTools-10.1.15-6627299.tar.gz

root@doc-vm:~# cat debian-6.0-x86-minimal.tar.gz | docker import - debian:6.0

存儲和載入鏡像:

root@doc-vm:~# docker save -o tomcat_latest.tar tomcat   # 存儲鏡像

root@doc-vm:~# ll

drwxr-xr-x 16 doc  doc       4096 11月 29 13:52 ./

drwxr-xr-x  3 root root      4096 11月 27 21:52 ../

-rw-------  1 root root 576676352 11月 29 13:52 tomcat_latest.tar

root@doc-vm:~# docker load --input tomcat_latest.tar     # 載入鏡像

Loaded image: tomcat:latest 

上傳鏡像:

docker push NAME[:TAG] | [REGISTRY_HOST[:REGISTRY_PORT]/]NAME[:TAG]

第一次上傳會提示登入。

 本文轉自 棋帥小七 51CTO部落格,原文連結:http://blog.51cto.com/xvjunjie/2045609