1. 程式人生 > >從Docker零基礎到懂一點實踐教程(四)

從Docker零基礎到懂一點實踐教程(四)

Docker映象與倉庫(一)

檢視和刪除映象

Docker映象是一種使用聯合載入技術實現的層疊的只讀檔案系統,它是容器構建的基石。Docker的映象儲存在/var/lib/docker目錄下。通過docker info命令可以檢視到Docker使用的儲存驅動和儲存的位置。

[email protected]:~$ docker info
Containers: 7
 Running: 0
 Paused: 0
 Stopped: 7
Images: 1
Server Version: 1.12.1
Storage Driver: aufs
 Root Dir: /var/lib/docker/aufs
 Backing Filesystem: extfs
 Dirs: 19
Dirperm1 Supported: true Logging Driver: json-file Cgroup Driver: cgroupfs Plugins: Volume: local Network: null overlay host bridge Swarm: inactive Runtimes: runc Default Runtime: runc Security Options: apparmor seccomp Kernel Version: 4.4.0-36-generic Operating System: Ubuntu 16.04 LTS OSType: linux Architecture: x86_64 CPUs: 1
Total Memory: 992.4 MiB Name: scvmu01.shichen.org ID: VVPW:WOIW:TCPI:YDUG:J67N:5DHU:WSWW:RMMN:64FK:KNHO:NPPH:ATSL Docker Root Dir: /var/lib/docker Debug Mode (client): false Debug Mode (server): false Registry: https://index.docker.io/v1/ WARNING: No swap limit support Insecure Registries: 127.0.0.0/8 [email protected]
:~$ [email protected]:~$ sudo ls -la /var/lib/docker/aufs/ total 20 drwx------ 5 root root 4096 Aug 30 22:27 . drwx--x--x 10 root root 4096 Aug 30 22:27 .. drwx------ 21 root root 4096 Sep 1 22:06 diff drwx------ 2 root root 4096 Sep 1 22:06 layers drwx------ 21 root root 4096 Sep 1 22:06 mnt [email protected]:~$ [email protected]:~$ sudo ls -la /var/lib/docker/aufs/mnt total 84 drwx------ 21 root root 4096 Sep 1 22:06 . drwx------ 5 root root 4096 Aug 30 22:27 .. drwxr-xr-x 2 root root 4096 Aug 31 20:40 1e15fc06bd2fd1e73b4a005862893281844b591c65e481d53ca5b1450d148b18 drwxr-xr-x 2 root root 4096 Aug 31 20:40 1e15fc06bd2fd1e73b4a005862893281844b591c65e481d53ca5b1450d148b18-init drwxr-xr-x 2 root root 4096 Aug 30 22:42 1eb964a1fcf933a53166d0dc6686e94f702c2ebdb01f7e04c770696b288e7060 drwxr-xr-x 2 root root 4096 Sep 1 22:06 23e023a65314bba94bebc2b2959ffae289cd2059f8e58e4cf28aad5affedbf0c drwxr-xr-x 2 root root 4096 Sep 1 22:06 23e023a65314bba94bebc2b2959ffae289cd2059f8e58e4cf28aad5affedbf0c-init drwxr-xr-x 2 root root 4096 Aug 31 21:37 3b23d661ca8979d6da5dfc5a5c87eb3aacfb43e53ae524aed8c79741b25da5e8 drwxr-xr-x 2 root root 4096 Aug 31 21:37 3b23d661ca8979d6da5dfc5a5c87eb3aacfb43e53ae524aed8c79741b25da5e8-init drwxr-xr-x 2 root root 4096 Aug 31 22:08 8e3311ac85799cb4139c59ab2ae80c0b2bc6c27d351cd362a67749933ad4f349 drwxr-xr-x 2 root root 4096 Aug 31 22:08 8e3311ac85799cb4139c59ab2ae80c0b2bc6c27d351cd362a67749933ad4f349-init drwxr-xr-x 2 root root 4096 Aug 30 22:42 901e24caec5dfdf532a51b4f59664b6819df0fcc388477818e7fe4656d4704a0 drwxr-xr-x 2 root root 4096 Aug 31 22:09 91275f7560238e26c4cf6ed7a09ec4574dc28edef764a38634a1b6e0d6f847fe drwxr-xr-x 2 root root 4096 Aug 31 22:09 91275f7560238e26c4cf6ed7a09ec4574dc28edef764a38634a1b6e0d6f847fe-init drwxr-xr-x 2 root root 4096 Aug 30 22:42 a10221226a162e020ae141a4da3a839af8b6cff8035d12531560e7ffeaad8022 drwxr-xr-x 2 root root 4096 Aug 31 20:37 aaedd0f09104e8bfcb757b35f73e17dc37969b37add4e36b30fc2abc5f6e4e04 drwxr-xr-x 2 root root 4096 Aug 31 20:37 aaedd0f09104e8bfcb757b35f73e17dc37969b37add4e36b30fc2abc5f6e4e04-init drwxr-xr-x 2 root root 4096 Aug 30 22:42 d21b30190c94efbf4cfbaafdabe01c289fc77b3131d141d5a9bcc28d750d8b79 drwxr-xr-x 2 root root 4096 Aug 30 22:42 ed2f2039f8fdbf2fa8eff0f745c7b532be5519e8ee41533d214bddc4b94bfc19 drwxr-xr-x 2 root root 4096 Aug 31 22:07 f826245b6b5a4ad52e0e041ba293dce74435c80e0399bb48dc3aa63b3c03b856 drwxr-xr-x 2 root root 4096 Aug 31 22:07 f826245b6b5a4ad52e0e041ba293dce74435c80e0399bb48dc3aa63b3c03b856-init [email protected]:~$

列出映象

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

我們可以使用docker images命令檢視映象列表。-a選項幫我們列出所有的映象,包括那些在預設情況下不顯示的中間層映象,-f選項可以為我們提供過濾條件,-q選項只顯示映象的唯一ID,而使用--no-trunc選項可以讓命令為我們輸出沒有截斷的映象ID。

schen@scvmu01:~$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              16.04               bd3d4369aebc        6 days ago          126.6 MB
ubuntu              latest              bd3d4369aebc        6 days ago          126.6 MB
ubuntu              xenial              bd3d4369aebc        6 days ago          126.6 MB
ubuntu              14.04               4a725d3b3b1c        6 days ago          188 MB
ubuntu              trusty              4a725d3b3b1c        6 days ago          188 MB
centos              centos7             970633036444        4 weeks ago         196.7 MB
centos              latest              970633036444        4 weeks ago         196.7 MB
schen@scvmu01:~$ 
schen@scvmu01:~$ docker images -q
bd3d4369aebc
bd3d4369aebc
bd3d4369aebc
4a725d3b3b1c
4a725d3b3b1c
970633036444
970633036444
schen@scvmu01:~$ 
schen@scvmu01:~$ docker images -q --no-trunc
sha256:bd3d4369aebc4945be269859df0e15b1d32fefa2645f5699037d7d8c6b415a10
sha256:bd3d4369aebc4945be269859df0e15b1d32fefa2645f5699037d7d8c6b415a10
sha256:bd3d4369aebc4945be269859df0e15b1d32fefa2645f5699037d7d8c6b415a10
sha256:4a725d3b3b1cc18c8cbd05358ffbbfedfe1eb947f58061e5858f08e2899731ee
sha256:4a725d3b3b1cc18c8cbd05358ffbbfedfe1eb947f58061e5858f08e2899731ee
sha256:97063303644439d9cea259b0e5f4b468633c90d88bf526acc67e5ae0a6e9427c
sha256:97063303644439d9cea259b0e5f4b468633c90d88bf526acc67e5ae0a6e9427c
schen@scvmu01:~$ 

映象標籤和倉庫

在剛才的docker images命令輸出結果中,我們看到兩個比較關鍵的概念:倉庫和標籤。

這裡的倉庫(“REPOSITORY”)指的是包含一系列關聯的映象的集合,例如“ubuntu”就是一個很大的倉庫,它裡面的映象對應了Ubuntu的不同版本。這與之前介紹過的Docker元件中的倉庫(“REGISTRY”)有著本質的區別,後者提供的是Docker映象的儲存服務。而在組織儲存服務時,一個“REGISTRY”通常包含多個“REPOSITORY”,而一個“REPOSITORY”通常又包含多個“IMAGE”。

在倉庫中不同的映象是以標籤進行區分的,而一個倉庫名加上一個標籤名,就構成了一個完整的映象名,而這個映象名則對應了一個映象以及它的唯一ID。還記得使用docker run命令時,我們並沒有指定映象ID,而是直接使用了倉庫名“ubuntu”,這是因為Docker會使用“latest”作為預設的標籤名查詢映象。

在倉庫中,你可能會注意到多個標籤對應同一個映象ID的情況,這是因為我們可以根據不同的需求,為同一個映象打上不同的標籤。例如“ubuntu:trusty”和“ubuntu:14.04”實際上指的是同一個映象。

檢視映象

$ docker inspect [OPTIONS] CONTAINER|IMAGE|TASK [CONTAINER|IMAGE|TASK...]

我們不僅可以使用docker inspect命令檢視容器的詳細資訊,還可以用它來檢視映象和任務的詳細資訊。

schen@scvmu01:~$ docker inspect ubuntu:latest
[
    {
        "Id": "sha256:bd3d4369aebc4945be269859df0e15b1d32fefa2645f5699037d7d8c6b415a10",
        "RepoTags": [
            "ubuntu:latest"
        ],
        "RepoDigests": [
            "[email protected]:f4691c96e6bbaa99d99ebafd9af1b68ace2aa2128ae95a60369c506dd6e6f6ab"
        ],
        "Parent": "",
        "Comment": "",
        "Created": "2016-08-26T18:50:27.629952966Z",
        "Container": "1ff47ae2a4ea4e3ca166eb799d9e4a59c953787577dc2e892b19b544ad290727",
        "ContainerConfig": {
            "Hostname": "3934ed318998",
            "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:16f57b8272173310ae88c29b8dcc337624e1d00054d0279309eccb6d40793766",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {}
        },
        "DockerVersion": "1.10.3",
        "Author": "",
        "Config": {
            "Hostname": "3934ed318998",
            "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"
            ],
            "ArgsEscaped": true,
            "Image": "sha256:16f57b8272173310ae88c29b8dcc337624e1d00054d0279309eccb6d40793766",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {}
        },
        "Architecture": "amd64",
        "Os": "linux",
        "Size": 126634686,
        "VirtualSize": 126634686,
        "GraphDriver": {
            "Name": "aufs",
            "Data": null
        },
        "RootFS": {
            "Type": "layers",
            "Layers": [
                "sha256:c8a75145fcc4e1a66cd86b3cbbe14da1a37894129005e461a43875a094b93412",
                "sha256:c6f2b330b60c7c32642c47871b28aab110a7214ed6aac305dd03f70b95cdc610",
                "sha256:055757a19384c8afff0e79db7bb84fd481d3a9565d78962c7f368d5ac5984998",
                "sha256:48373480614b79e5c1b0a080807fa8ffaea12695f548406ea77feb5074e195e3",
                "sha256:0cad5e07ba339f87eb58850252a0ad00e104bae4cfc66b376265e16c32a0aae9"
            ]
        }
    }
]
schen@scvmu01:~$ 

刪除映象

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

我們可以使用docker rmi命令來刪除一個映象,-f選項用來強制刪除,而--no-prune選項會保留被刪除映象中未打標籤的父映象。

schen@scvmu01:~$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              16.04               bd3d4369aebc        6 days ago          126.6 MB
ubuntu              latest              bd3d4369aebc        6 days ago          126.6 MB
ubuntu              xenial              bd3d4369aebc        6 days ago          126.6 MB
ubuntu              14.04               4a725d3b3b1c        6 days ago          188 MB
ubuntu              trusty              4a725d3b3b1c        6 days ago          188 MB
centos              centos7             970633036444        4 weeks ago         196.7 MB
centos              latest              970633036444        4 weeks ago         196.7 MB
schen@scvmu01:~$ 
schen@scvmu01:~$ docker rmi ubuntu:16.04
Untagged: ubuntu:16.04
schen@scvmu01:~$ 
schen@scvmu01:~$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              bd3d4369aebc        6 days ago          126.6 MB
ubuntu              xenial              bd3d4369aebc        6 days ago          126.6 MB
ubuntu              14.04               4a725d3b3b1c        6 days ago          188 MB
ubuntu              trusty              4a725d3b3b1c        6 days ago          188 MB
centos              centos7             970633036444        4 weeks ago         196.7 MB
centos              latest              970633036444        4 weeks ago         196.7 MB
schen@scvmu01:~$ 
schen@scvmu01:~$ docker rmi 4a725d3b3b1c
Error response from daemon: conflict: unable to delete 4a725d3b3b1c (must be forced) - image is referenced in one or more repositories
schen@scvmu01:~$ 
schen@scvmu01:~$ docker rmi -f 4a725d3b3b1c
Untagged: ubuntu:14.04
Untagged: ubuntu:trusty
Untagged: ubuntu@sha256:5b5d48912298181c3c80086e7d3982029b288678fccabf2265899199c24d7f89
Deleted: sha256:4a725d3b3b1cc18c8cbd05358ffbbfedfe1eb947f58061e5858f08e2899731ee
schen@scvmu01:~$ 
schen@scvmu01:~$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              bd3d4369aebc        6 days ago          126.6 MB
ubuntu              xenial              bd3d4369aebc        6 days ago          126.6 MB
centos              centos7             970633036444        4 weeks ago         196.7 MB
centos              latest              970633036444        4 weeks ago         196.7 MB
schen@scvmu01:~$ 
schen@scvmu01:~$ docker rmi -f $(docker images -q centos | sort -u)
Untagged: centos:centos7
Untagged: centos:latest
Untagged: centos@sha256:a66ffcb73930584413de83311ca11a4cb4938c9b2521d331026dad970c19adf4
Deleted: sha256:97063303644439d9cea259b0e5f4b468633c90d88bf526acc67e5ae0a6e9427c
schen@scvmu01:~$ 
schen@scvmu01:~$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              bd3d4369aebc        6 days ago          126.6 MB
ubuntu              xenial              bd3d4369aebc        6 days ago          126.6 MB
schen@scvmu01:~$ 

執行命令docker rmi ubuntu:16.04返回Untagged: ubuntu:16.04說明刪除了標籤,但並沒有刪除映象檔案,這是因為還有標籤指向這個映象。我們可以依次刪除某個映象檔案所有的標籤,這樣當最後一個標籤被刪除的時候映象檔案也會隨之刪除,當然還有個簡單的方法,那就是像docker rmi -f 4a725d3b3b1c這樣直接指定映象ID。另外,docker rmi命令並不支援直接刪除某一個倉庫的所有映象,但我們可以變通一下,藉助docker images -q命令來完成這個任務。

獲取和推送映象

查詢映象

大致來說查詢映象有兩種方法:
1. 通過“Docker Hub”網站查詢映象;
2. 通過命令列查詢映象;

通過“Docker Hub”網站查詢映象

要通過“Docker Hub”網站查詢映象,首先要註冊成為docker.com會員,註冊過程十分簡單,只需要驗證郵箱即可。註冊的賬號可以用來查詢、上傳和分享映象,以及享受docker.com提供的其他服務。“Docker Hub”網站的網址如下:

我們使用自己的賬戶登入網站後,直接在最上面的“Search”文字框內輸入想要查詢的REPOSITORY倉庫名並點選回車即可。網站為我們提供了簡單的過濾器,其中Offical為官方映象,Automated為通過自動化構建的映象,而DownloadsStars分別是以下載量和評分數進行排序。

例如,搜尋並點選名為“ubuntu”的官方倉庫,我們就會來到這個倉庫的詳情頁面,在“Repo Info”選項卡中我們可以看到一些必要的介紹,在“Tags”選項卡中我們可以瀏覽到這個倉庫的全部標籤,每個標籤都對應一個映象。

通過命令列查詢映象

$ docker search [OPTIONS] TERM

接下來我們看如何通過命令列查詢映象,這裡用到的就是docker search命令,--automated選項可以讓命令只返回通過自動化構建的映象,--no-trunc選項可以讓命令返回未被截斷的輸出結果,而-s選項可以指定返回結果的最低評分數。另外,使用docker search命令最多返回25條結果。

[email protected]:~$ docker search ubuntu
NAME                       DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
ubuntu                     Ubuntu is a Debian-based Linux operating s...   4606      [OK]       
ubuntu-upstart             Upstart is an event-based replacement for ...   66        [OK]       
rastasheep/ubuntu-sshd     Dockerized SSH service, built on top of of...   36                   [OK]
torusware/speedus-ubuntu   Always updated official Ubuntu docker imag...   27                   [OK]
ubuntu-debootstrap         debootstrap --variant=minbase --components...   25        [OK]       
nuagebec/ubuntu            Simple always updated Ubuntu docker images...   8                    [OK]
nickistre/ubuntu-lamp      LAMP server on Ubuntu                           8                    [OK]
nimmis/ubuntu              This is a docker images different LTS vers...   5                    [OK]
maxexcloo/ubuntu           Docker base image built on Ubuntu with Sup...   2                    [OK]
jordi/ubuntu               Ubuntu Base Image                               1                    [OK]
darksheer/ubuntu           Base Ubuntu Image -- Updated hourly             1                    [OK]
admiringworm/ubuntu        Base ubuntu images based on the official u...   1                    [OK]
datenbetrieb/ubuntu        custom flavor of the official ubuntu base ...   0                    [OK]
lynxtp/ubuntu              https://github.com/lynxtp/docker-ubuntu         0                    [OK]
smartentry/ubuntu          ubuntu with smartentry                          0                    [OK]
webhippie/ubuntu           Docker images for ubuntu                        0                    [OK]
croscon/ubuntu             Crosconized Ubuntu                              0                    [OK]
life360/ubuntu             Ubuntu is a Debian-based Linux operating s...   0                    [OK]
esycat/ubuntu              Ubuntu LTS                                      0                    [OK]
teamrock/ubuntu            TeamRock's Ubuntu image configured with AW...   0                    [OK]
konstruktoid/ubuntu        Ubuntu base image                               0                    [OK]
widerplan/ubuntu           Our basic Ubuntu images.                        0                    [OK]
ustclug/ubuntu             ubuntu image for docker with USTC mirror        0                    [OK]
dorapro/ubuntu             ubuntu image                                    0                    [OK]
uvatbc/ubuntu              Ubuntu images with unprivileged user            0                    [OK]
[email protected]:~$ 
[email protected]:~$ docker search -s 3 ubuntu
Flag --stars has been deprecated, use --filter=stars=3 instead
NAME                       DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
ubuntu                     Ubuntu is a Debian-based Linux operating s...   4606      [OK]       
ubuntu-upstart             Upstart is an event-based replacement for ...   66        [OK]       
rastasheep/ubuntu-sshd     Dockerized SSH service, built on top of of...   36                   [OK]
torusware/speedus-ubuntu   Always updated official Ubuntu docker imag...   27                   [OK]
ubuntu-debootstrap         debootstrap --variant=minbase --components...   25        [OK]       
nuagebec/ubuntu            Simple always updated Ubuntu docker images...   8                    [OK]
nickistre/ubuntu-lamp      LAMP server on Ubuntu                           8                    [OK]
nimmis/ubuntu              This is a docker images different LTS vers...   5                    [OK]
[email protected]:~$ 
[email protected]:~$ docker search --automated -s 3 ubuntu
Flag --automated has been deprecated, use --filter=automated=true instead
Flag --stars has been deprecated, use --filter=stars=3 instead
NAME                       DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
rastasheep/ubuntu-sshd     Dockerized SSH service, built on top of of...   36                   [OK]
torusware/speedus-ubuntu   Always updated official Ubuntu docker imag...   27                   [OK]
nuagebec/ubuntu            Simple always updated Ubuntu docker images...   8                    [OK]
nickistre/ubuntu-lamp      LAMP server on Ubuntu                           8                    [OK]
nimmis/ubuntu              This is a docker images different LTS vers...   5                    [OK]
[email protected]:~$ 
[email protected]:~$ docker search --automated -s 3 --no-trunc ubuntu
Flag --automated has been deprecated, use --filter=automated=true instead
Flag --stars has been deprecated, use --filter=stars=3 instead
NAME                       DESCRIPTION                                                                                       STARS     OFFICIAL   AUTOMATED
rastasheep/ubuntu-sshd     Dockerized SSH service, built on top of official Ubuntu images.                                   36                   [OK]
torusware/speedus-ubuntu   Always updated official Ubuntu docker image with Torusware Speedus acceleration software          27                   [OK]
nuagebec/ubuntu            Simple always updated Ubuntu docker images with SSH access and supervisord.                       8                    [OK]
nickistre/ubuntu-lamp      LAMP server on Ubuntu                                                                             8                    [OK]
nimmis/ubuntu              This is a docker images different LTS version of Ubuntu with a working init process and syslog    5                    [OK]
[email protected]:~$ 

不難發現,所有非官方倉庫的名稱都是由“/”分割的兩部分組成,第一部分為倉庫提供者的docker.com使用者名稱,第二部分為倉庫的實際名稱,這兩部分共同構成了完整的倉庫名,使用的時候應該把它看做一個整體。

拉取映象

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

當我們找到合適的映象並把它下載到本地時,就需要用到docker pull命令,當指定-a選項時命令將會把所匹配到的映象倉庫中所有的映象檔案都下載下來。

schen@scvmu01:~$ docker images -a
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              bd3d4369aebc        7 days ago          126.6 MB
ubuntu              xenial              bd3d4369aebc        7 days ago          126.6 MB
centos              centos7             970633036444        5 weeks ago         196.7 MB
schen@scvmu01:~$ 
schen@scvmu01:~$ docker pull ubuntu:12.04
12.04: Pulling from library/ubuntu
4bae8cb7faf8: Pull complete 
6fdbc48ff694: Pull complete 
76b89518fcb8: Pull complete 
e24f10461f80: Pull complete 
7f76cfd9cb68: Pull complete 
Digest: sha256:84c52bdd388c686ed2c72804acbb6710cc103c959cfbfee80d1c857532c502c2
Status: Downloaded newer image for ubuntu:12.04
schen@scvmu01:~$ 
schen@scvmu01:~$ docker images -a
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              bd3d4369aebc        7 days ago          126.6 MB
ubuntu              xenial              bd3d4369aebc        7 days ago          126.6 MB
ubuntu              12.04               a11493a01736        7 days ago          103.6 MB
centos              centos7             970633036444        5 weeks ago         196.7 MB
schen@scvmu01:~$ 

這裡有一個小技巧,因為docker.com的官方伺服器架設在國外,所以在國內的訪問有可能會很慢,我們可以通過為Docker新增映象站點的方法解決這個問題。目前國內有很多家提供映象加速服務的網站,大多數都需要註冊賬戶後才能使用。註冊的方法很簡單,步驟也大同小異,這裡就不再贅述了。

拿到映象站點的URL後,我們需要將它新增到docker的配置檔案中,編輯/etc/default/docker檔案,並向DOCKER_OPTS引數新增--registry-mirror欄位。最後,我們需要重啟docker守護程序令更改生效。

schen@scvmu01:~$ sudo vi /etc/default/docker
schen@scvmu01:~$ 
schen@scvmu01:~$ grep DOCKER_OPTS /etc/default/docker
# Use DOCKER_OPTS to modify the daemon startup options.
#DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4"
DOCKER_OPTS="--registry-mirror=https://username.mirror.website.com"
schen@scvmu01:~$ 
schen@scvmu01:~$ sudo service docker restart
schen@scvmu01:~$ 

推送映象

我們不僅可以從“Docker Hub”上下載映象,還可以將我們的映象推送到“Docker Hub”上去,這就需要用到docker push命令,它的完整格式如下:

$ docker push [OPTIONS] NAME[:TAG]

首先,我們檢視一下本地已經存在的映象:

schen@scvmu01:~$ docker images
REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
shichen/build_test    latest              38555e155ef6        6 weeks ago         222.4 MB
shichen/nginx         latest              38555e155ef6        6 weeks ago         222.4 MB
shichen/commit_test   latest              7f6c25158375        6 weeks ago         222.4 MB
ubuntu                16.04               bd3d4369aebc        7 weeks ago         126.6 MB
ubuntu                latest              bd3d4369aebc        7 weeks ago         126.6 MB
ubuntu                xenial              bd3d4369aebc        7 weeks ago         126.6 MB
ubuntu                12.04               a11493a01736        7 weeks ago         103.6 MB
centos                centos7             970633036444        11 weeks ago        196.7 MB
schen@scvmu01:~$ 

我決定把“shichen/nginx”映象推送到“Docker Hub”上去,但是遇到了“unauthorized: authentication required”的問題:

[email protected]:~$ docker push shichen/nginx
The push refers to a repository [docker.io/shichen/nginx]
08fe14740277: Preparing 
d17b6212b3e7: Preparing 
0cad5e07ba33: Preparing 
48373480614b: Preparing 
055757a19384: Preparing 
c6f2b330b60c: Waiting 
c8a75145fcc4: Waiting 
unauthorized: authentication required
[email protected]:~$ 

這是因為我還沒有登入自己的賬戶,因此使用docker login命令登入之後,就可以順利推送映象了:

schen@scvmu01:~$ docker login --username=shichen
Password: 
Login Succeeded
schen@scvmu01:~$ docker push shichen/nginx
The push refers to a repository [docker.io/shichen/nginx]
08fe14740277: Pushed 
d17b6212b3e7: Pushed 
0cad5e07ba33: Pushed 
48373480614b: Pushed 
055757a19384: Pushed 
c6f2b330b60c: Pushed 
c8a75145fcc4: Pushed 
latest: digest: sha256:f33ea62b40cd88d86e16d241e114a8a20b06bc5058c62513c4a63ee3b56bc4c2 size: 1781
schen@scvmu01:~$ 

Docker並不會把所有的映象都傳上去,而只會提交修改的部分。

作為驗證,我們可以在“Docker Hub”網站上,訪問到這個映象。當然,我們也可以通過docker search命令找到它:

schen@scvmu01:~$ docker search shichen/nginx
NAME            DESCRIPTION   STARS     OFFICIAL   AUTOMATED
shichen/nginx                 0          

構建映象

構建映象是Docker中的重要操作,它可以:
- 儲存我們對容器的修改,讓我們可以在別的地方再次使用它;
- 根據構建方法的不同,它還為我們提供了自定義映象的能力;
- 構件映象是以軟體的形式為我們打包並分發服務及其執行環境;

Docker中構建映象有兩種方法,一種是使用docker commit命令通過容器構建,另一種是通過docker build命令從Dockerfile構建。

通過commit構建映象

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

我們可以通過docker commit命令通過容器構建映象,使用-a選項指定映象的作者,使用-m選項指定映象構建的資訊,而-p選項可以控制構建映象過程中是否暫停容器的執行。

首先,我們啟動一個互動式容器,並將其命名為commit_test,使用apt-get命令為其安裝Nginx服務。

schen@scvmu01:~$ docker run -it -p 80 --name commit_test ubuntu /bin/bash
root@1a1544b45688:/# apt-get update
Get:1 http://archive.ubuntu.com/ubuntu xenial InRelease [247 kB]
Get:2 http://archive.ubuntu.com/ubuntu xenial-updates InRelease [95.7 kB]
......                             
Reading package lists... Done
root@1a1544b45688:/# apt-get install -y nginx
Reading package lists... Done
Building dependency tree       
......
Processing triggers for systemd (229-4ubuntu7) ...
root@1a1544b45688:/# exit
exit
schen@scvmu01:~$ 
schen@scvmu01:~$ docker ps -l
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
1a1544b45688        ubuntu              "/bin/bash"         12 minutes ago      Exited (0) 3 seconds ago                       commit_test
schen@scvmu01:~$ 

接下來我們使用docker commit命令,將這個容器提交為映象。

schen@scvmu01:~$ docker commit -a 
            
           

相關推薦

Docker基礎一點實踐教程

Docker映象與倉庫(一) 檢視和刪除映象 Docker映象是一種使用聯合載入技術實現的層疊的只讀檔案系統,它是容器構建的基石。Docker的映象儲存在/var/lib/docker目錄下。通過docker info命令可以檢視到Docker使用的儲存

Docker基礎一點實踐教程

Docker容器的資料管理 Docker容器的資料卷 Docker的設計理念是提供應用程式之間的隔離,因此Docker容器的生存週期通常與應用程式是一致的,但我們對資料的生存週期卻有著不一樣的需求。此外,我們也需要一個在容器之間共享資料的機制。這些因素催

Docker基礎一點實踐教程

Docker容器的網路連線 Docker容器的網路基礎 docker0 通過ifconfig命令我們可以檢視到一個名為“docker0”的虛擬網橋,Docker就是通過這個網路裝置為容器提供各種網路服務的。 schen@scvmu01:~/d

Docker基礎一點實踐教程

Docker客戶端和守護程序 Docker的CS模式 在Docker的實現機制中,有兩個重要的概念,“Docker客戶端”和“Docker守護程序”。“Docker守護程序”執行在宿主計算機上,在CS模式中充當Server的角色,它為“Docker客戶端

基礎APP自動化測試教程

APP自動化框架選擇 目前較火的自動化工具特點對比: Appium(適用於Android&iOS;支援多語言;不需要應用原始碼)Uiautomator(適用於Android;僅Java語言;不需要應用原始碼)Robotium(適用於Android;僅Java語言;不需要應用原始碼)Calabash(

基礎快速入門SpringBoot2.0教程

trace ssh ket files frame ali serialize fis 系統服務 一、JMS介紹和使用場景及基礎編程模型簡介:講解什麽是小寫隊列,JMS的基礎知識和使用場景 1、什麽是JMS: Java消息服務(Java Message Service),J

Python基礎入門到高階教程附安裝指南、安裝包、程式碼

你想要進入一個全新的領域時,首先要弄清楚的就是它的體系。那麼在Python領域,應該掌握哪些知識點呢? Python基礎與高階程式設計   1、Linux環境搭建與python安裝 2、Python語法基礎 3、Python字串解析 4、Python時間和日曆

Swift教程_基礎學習Swift完整例項_swift基礎簡單值、控制流、方法和閉包

三、Swift基礎介紹 本章將對Swift做一個簡單說明,內容取自《The Swift Programming Language》,並加之自己的理解。首先swift全域性作用域中的程式碼會被自動當做程

Swift教程_基礎學習Swift完整例項_swift例項簡介

一、文章簡介 本人最近開始學習有關Swift這個新東東,由於沒有專案支撐,只能通過官方文件進行自學,精簡的看了Swift官方文件,感覺理解起來還是比較簡單,於是突發奇想,想把官方object-c的sa

Swift教程_基礎學習Swift完整例項_swift完整例項構建展示層

本章節主要來完善前前面已經建立好的storyboard中的頁面,包括自定義的view等。 1.PKOElementTableViewCell 該自定義view作為列表的行view,包含左側的圖片以及中間的文字描述。這裡要注意需要通過setNeedsDisplay告訴系統進行繪製。 程式碼如下。 import

Swift教程_基礎學習Swift完整例項_總結

五、總結 加上寫博文的時間,用了前前後後一週左右的時間,每晚2小時左右,完成了這個改造,由於我是第一次碰swift,有些東西還用不順手,用時比較長。期間還簡單學習了一下swift基本語法和部分用法。

Swift教程_基礎學習Swift完整例項_swift完整例項新增View的動畫效果、新增View的陰影

6.新增View的動畫效果 本章節主要來做明細頁面點選後翻轉的動畫效果,該效果可以進行多種改變,以達到想要的效果。 1.首先我們需要進行翻轉的正反兩個view,前面我們已經做好了,分別是PKOElementDetailImageView和PKOElementDetailIm

開始學 Web 之 ES6ES6基礎語法二

一、Promise Promise是一個物件,代表了未來某個將要發生的事件(,這個事件通常是一個非同步操作) 有了Promise物件, 可以將非同步操作以同步的流程表達出來, 避免了層層巢狀的回撥函式(俗稱'回撥地獄')。 ES6的Promise是一個建構函式, 用來生成promise例項。 1、prom

最新Django2.0.1線上教育基礎到上線教程5-完結

4-5 user modesl.py設計 迴圈引用: 設計app時每個app都有model 如圖:我們在user中定義usercourse記錄使用者學習的課程。會有兩個外來鍵:user和course。 我們就會import Cou

python基礎教程

一次 不同 ble 排序。 itl tuple uda 基本 append 列表   本節繼續討論列表不同元組和字符串的地方:列表是可變的(mutable)----可以改變列表的內容,並且列表有很多有用的、專門的方法。 List函數可以將一個字符串拆分成列表。 >

開始學 Web 之 DOM節點

def clas scrip while p標簽 設置 ner 操作 text 大家好,這裏是「 Daotin的夢囈 」從零開始學 Web 系列教程。此文首發於「 Daotin的夢囈 」公眾號,歡迎大家訂閱關註。在這裏我會從 Web 前端零基礎開始,一步步學習 Web 相

基礎快速入門SpringBoot2.0

acc href 項目文件 apache tro maven打包 相關 utf tps 零基礎快速入門SpringBoot2.0 (一) 一、SpringBoot2.x依賴環境和版本新特性說明 簡介:講解新版本依賴環境和springboot2新特性概述

DirectX12D3D12基礎教程——初識DirectXMath庫、使用獨立堆建立常量緩衝、理解管線狀態物件、理解圍欄同步

目錄   1、前言及本章內容提要 2、初識DirectXMath庫 3、使用獨立堆建立常量緩衝 4、理解管線狀態物件 5、理解圍欄同步 6、完整程式碼 1、前言及本章內容提要 經過了之前3篇教程的跨度有點大的學習,我想大家現在應該對D3D12程式

基礎入門學習Python》10--列表:一個打了激素的陣列

  前言 有時候我們需要把一些東西暫時儲存起來,因為他們有著一些直接或間接的聯絡,我們需要把它們放在某個組或者集合中,未來可能用得上。 很多接觸過程式設計的朋友都知道,都接觸過陣列這個概念,那麼陣列這個概念事實上很簡單,把一大堆同總型別資料挨個擺在一塊,然後通過陣列的下標進行索

基礎入門學習Python》12--列表:一個打了激素的陣列(三)

前言 這節課我們繼續談一下Python列表一些知識(其中包括比較操作符,邏輯操作符,連線操作符,重複操作符,成員關係操作符,還有一些其他關於列表的方法) 視訊中的0知識點 Python常用操作符 比較操作符 ​ >>> list1 = [123] >&g