1. 程式人生 > 其它 >【轉】docker images 介紹

【轉】docker images 介紹

原文:https://www.cnblogs.com/ylqh/p/10600700.html

-----------------------------------------------

映象是動態的容器的靜態表示,包括容器所要執行的應用程式碼以及執行時的配置。Docker映象包括一個或者多個只讀層(read-only layers),因此,映象一旦被建立就再也不能被修改了,一個執行著的Docker容器時一個映象的例項(instantiation)。從同一個映象中執行的容器包含有相同的應用程式碼和執行時依賴。但是不像映象是靜態的,每個執行著的容器都有一個可寫層(writable layer,也成為容器層 container layer),它位於底下的若干只讀層之上。執行時的所有變化,包括對資料和檔案的寫和更新,都會儲存在這個層中,因此,從同一個映象執行的多個容器包含了不同的容器層。

關於映象是什麼總結:

1.一個分層儲存的檔案

2.一個軟體的環境

3.一個映象可以建立N個容器

4.又稱一種標準化的交付

5.一個不包含Linux核心又精簡的Liunx作業系統

助理解:映象不是單一的檔案,而是多層構成,我們可以通過docker history <ID/NAME> 檢視映象中各層內容及其大小,每層對應著一個Dockerfile中的一條指令,另外docker映象儲存在/var/lib/docker/<storage-d'river>中。

映象從哪裡來的呢?

Docker hub是由Docker公司負責維護的公共註冊中心,包含大量的容器映象,Docker工具預設從這個公共映象庫下載映象,地址為:https://hub.docker.com/search/?q=&type=image

映象加速器的配置:https://www.daocloud.io/mirror

配置方法:

curl -sSL https://get.daocloud.io/daotools/set_mirror.sg | sh -s http://f1361db2.m.daocloud.io

Docker有三種方式建立映象:

  •  基於已有映象的容器建立:建立一個容器,執行若干命令後,在使用docker commit來生成一個新的映象。不建議使用這種方案。
  • 基於本地模板匯入,使用OpenVZ提供的模板來建立,docker import來生成新的映象。不經常用。
  •  基於Dockerfile建立,建立一個Dockerfile,然後在使用docker build來建立一個映象,大多數都會使用Dockerfile來建立映象。

映象相關的基礎理論

1. 理解Host OS ,Guest OS and Base image相關理論

 舉例說明:一臺主機上安裝的時Centos作業系統,現在上面跑了一個Ubuntu容器。此時,Host OS時Centos,Guest OS是Ubuntu。Guest OS也被稱為容器的Base Image。

說明:

  • linux核心和版本:所有 Linux 發行版都採用相同的 Linux 核心(kernel),然後所有發行版對核心都有輕微改動。這些改動都會上傳回 linux 社群,並被合併。
  • linux容器環境:因為所有Linux發行版都包含同一個linux 核心(有輕微修改),以及不同的自己的軟體,因此,會很容易地將某個 userland 軟體安裝在linux 核心上,來模擬不同的發行版環境。比如說,在 Ubuntu 上執行 Centos 容器,這意味著從 Centos 獲取 userland 軟體,執行在 Ubuntu 核心上。因此,這就像在同一個作業系統(linux 核心)上執行不同的 userland 軟體(發行版的)。這就是為什麼Docker 不支援在 Linux 主機上執行 FreeBSD 或者windows 容器。

容器的base image 並不是真正的base OS,base image 會遠遠的比 base OS更輕量。它只安裝發行版特殊的部分

base image的用途或者作用是什麼呢?

  docker容器檔案系統與host OS是隔離的,容器映象中的應用軟體無法看到主機檔案系統,除非將主機檔案系統掛載為容器的卷。因此,可以想象一下,你容器中的應用依賴於各種作業系統庫,因此我們不得不將這些庫打包到映象之中,另外,base image會讓我們使用到各個發行版的包管理系統,比如yum 和 apt-get。而且,各個linux發行版的base image也不是普通的發行版,而是一個簡化了的版本。而且,base image並不帶有linux核心,因為主機會使用主機的核心。

  因此,需要注重理解image 和 OS這兩個概念,之所以成為base OS,是因為base image中並不包括完整的OS,而這一點,是容器與虛擬機器之間的本質區別之一。容器是共享主機上的linux核心。

2. Container Base image

從上面內容可以看出,容器把linux映象從核心空間和使用者空間進行了分開管理,對host OS而言,它更側重與核心,加上少量的使用者空間內容;對Guest OS 而言,它只側重於使用者空間,只包括庫檔案,編譯器,配置檔案,以及使用者程式碼。

docker images詳細用法

1.獲取映象

用法:docker pull NAME[:TAG],如果沒有顯示TAG,則預設是latest標籤,也就是最新版本的映象。

root@S1:~# docker pull ubuntu  
Using default tag: latest
latest: Pulling from library/ubuntu
898c46f3b1a1: Pull complete 
63366dfa0a50: Pull complete 
041d4cd74a92: Pull complete 
6e1bee0f8701: Pull complete 
Digest: sha256:017eef0b616011647b269b5c65826e2e2ebddbe5d1f8c1e56b3599fb14fabec8
Status: Downloaded newer image for ubuntu:latest
預設下載的是最新的ubuntu映象,預設下載的映象地址registry.hub.docker.com 相當於如下命令: docker pull registry.hub.docker.com/ubuntu:latest root@S1:~# docker run -d -t -i ubuntu /bin/bash 082d88976a54d5b05ae39fd5eed6ccff28a6a8881bde553cd48efd75ac3bd754

2.檢視映象資訊:

使用docker images 命令可以列出本地主機已有的映象。

root@S1:~# docker  images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              94e814e2efa8        2 weeks ago         88.9MB
hello-world         latest              fce289e99eb9        2 months ago        1.84kB

REPOSITORY:來自哪一個倉庫,比如ubuntu倉庫
TAG:映象的標籤資訊,最新的
映象的id號:這個是唯一的
映象建立時間
映象大小

其中映象的id資訊非常重要,因為他是唯一標識了映象
tag資訊用於標記來自同一個倉庫的不同映象,後續工作我們可以使用tag為本地映象新增新的標籤,我們也可以將它用於ci/cd相結合起來使用(後續文章會介紹到,盡情關注)

eg:新增一個新的標籤:
root@S1:~# docker tag ubuntu:latest ubuntu:16.04
root@S1:~# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              16.04               94e814e2efa8        2 weeks ago         88.9MB
ubuntu              latest              94e814e2efa8        2 weeks ago         88.9MB
hello-world         latest              fce289e99eb9        2 months ago        1.84kB

這裡細心的同學會發現,不同的標籤的映象的ID是完全一致的,說明它們實際上指向了同一個映象檔案,只是名字不同而已,可以理解為linux的軟連線或者window的快捷方式。

檢視映象的詳細資訊
root@S1:~# docker inspect 94e814e2efa8
[
    {
        "Id": "sha256:94e814e2efa8845d95b2112d54497fbad173e45121ce9255b93401392f538499",
        "RepoTags": [
            "ubuntu:16.04",
            "ubuntu:latest"
        ],
        "RepoDigests": [
            "ubuntu@sha256:017eef0b616011647b269b5c65826e2e2ebddbe5d1f8c1e56b3599fb14fabec8"
        ],
        "Parent": "",
        "Comment": "",
        "Created": "2019-03-12T00:20:17.419392342Z",
        "Container": "94772adb8869651410d18062838667884a555cf1878d567734e99dc695d6f5bf",
        "ContainerConfig": {
            "Hostname": "94772adb8869",
            "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:881686baf75637792ebd93d88243b6f5bb89833ce325f9e32e2e70208f0efb64",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {}
        },
        "DockerVersion": "18.06.1-ce",
        "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"
            ],
            "ArgsEscaped": true,
            "Image": "sha256:881686baf75637792ebd93d88243b6f5bb89833ce325f9e32e2e70208f0efb64",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": null
        },
        "Architecture": "amd64",
        "Os": "linux",
        "Size": 88908191,
        "VirtualSize": 88908191,
        "GraphDriver": {
            "Data": {
                "LowerDir": "/var/lib/docker/overlay2/e9af142ff18154b104fcae496ca9cdba91a7de36d929738a61fb044df3fd21cb/diff:/var/lib/docker/overlay2/4ebe2a5f541f89e24fc6a4c6f22817e0b5e39358ee9ba507f792e606386c2727/diff:/var/lib/docker/overlay2/66fa62d0da114b8b02bd376cc4507b196dccccf0c1f9635d9db5d5706e95cc39/diff",
                "MergedDir": "/var/lib/docker/overlay2/ef8439354f7b197a7bbfa74fa6b0dfd0dabf4bd8009b7528ce5b1d0992b290a5/merged",
                "UpperDir": "/var/lib/docker/overlay2/ef8439354f7b197a7bbfa74fa6b0dfd0dabf4bd8009b7528ce5b1d0992b290a5/diff",
                "WorkDir": "/var/lib/docker/overlay2/ef8439354f7b197a7bbfa74fa6b0dfd0dabf4bd8009b7528ce5b1d0992b290a5/work"
            },
            "Name": "overlay2"
        },
        "RootFS": {
            "Type": "layers",
            "Layers": [
                "sha256:762d8e1a60542b83df67c13ec0d75517e5104dee84d8aa7fe5401113f89854d9",
                "sha256:e45cfbc98a505924878945fdb23138b8be5d2fbe8836c6a5ab1ac31afd28aa69",
                "sha256:d60e01b37e74f12aa90456c74e161f3a3e7c690b056c2974407c9e1f4c51d25b",
                "sha256:b57c79f4a9f3f7e87b38c17ab61a55428d3391e417acaa5f2f761c0e7e3af409"
            ]
        },
        "Metadata": {
            "LastTagTime": "2019-03-26T19:07:55.36713665+08:00"
        }
    }
]

docker inspect命令返回的是一個JSON格式的訊息,如果我們只要其中一項內容時,可以使用-f 引數來指定,如:
root@S1:~# docker inspect -f {{".Metadata"}} 94e814e2efa8
{2019-03-26 19:07:55.36713665 +0800 CST}

3.搜尋映象:

  使用docker search命令可以搜尋遠端倉庫中共享的映象,預設搜尋Docker Hub官方倉庫中的映象,用法:docker search TERM

 

root@S1:~# docker search mysql

NAME                                                   DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
mysql                                                  MySQL is a widely used, open-source relation…   7955                [OK]                
mariadb                                                MariaDB is a community-developed fork of MyS…   2660                [OK]                
mysql/mysql-server                                     Optimized MySQL Server Docker images. Create…   598                                     [OK]
zabbix/zabbix-server-mysql                             Zabbix Server with MySQL database support       176                                     [OK]
hypriot/rpi-mysql                                      RPi-compatible Docker Image with Mysql          110                                     
zabbix/zabbix-web-nginx-mysql                          Zabbix frontend based on Nginx web-server wi…   92                                      [OK]
centurylink/mysql                                      Image containing mysql. Optimized to be link…   60                                      [OK]
1and1internet/ubuntu-16-nginx-php-phpmyadmin-mysql-5   ubuntu-16-nginx-php-phpmyadmin-mysql-5          50                                      [OK]
centos/mysql-57-centos7                                MySQL 5.7 SQL database server                   49                                      
mysql/mysql-cluster                                    Experimental MySQL Cluster Docker images. Cr…   41                                      
tutum/mysql                                            Base docker image to run a MySQL database se…   31                                      
schickling/mysql-backup-s3                             Backup MySQL to S3 (supports periodic backup…   25                                      [OK]
bitnami/mysql                                          Bitnami MySQL Docker Image                      25                                      [OK]
zabbix/zabbix-web-apache-mysql                         Zabbix frontend based on Apache web-server w…   24                                      [OK]
zabbix/zabbix-proxy-mysql                              Zabbix proxy with MySQL database support        20                                      [OK]
linuxserver/mysql                                      A Mysql container, brought to you by LinuxSe…   20                                      
centos/mysql-56-centos7                                MySQL 5.6 SQL database server                   13                                      
circleci/mysql                                         MySQL is a widely used, open-source relation…   12                                      
mysql/mysql-router                                     MySQL Router provides transparent routing be…   8                                       
openshift/mysql-55-centos7                             DEPRECATED: A Centos7 based MySQL v5.5 image…   6                                       
dsteinkopf/backup-all-mysql                            backup all DBs in a mysql server                6                                       [OK]
jelastic/mysql                                         An image of the MySQL database server mainta…   1                                       
cloudposse/mysql                                       Improved `mysql` service with support for `m…   0                                       [OK]
ansibleplaybookbundle/mysql-apb                        An APB which deploys RHSCL MySQL                0                                       [OK]
widdpim/mysql-client                                   Dockerized MySQL Client (5.7) including Curl…   0                                       [OK]

返回了很多包含關鍵字的映象,其中包括映象名字,描述,星級(表示該映象的受歡迎程度),是否官方建立,是否自動建立等

預設的輸出結果是按照星級評價進行排序的,官方的映象說明是官方專案組建立和維護的,automated資源則是允許使用者驗證映象的來源和內容。

個人建議:如果自己的線上服務使用的化,自己寫dockerfile構建映象比較好

4.刪除映象

 docker rmi 命令可以刪除映象,命令格式docker rmi ID/REPOSITORY:TAG(可以為標籤或者ID)

  使用映象標籤刪除映象: 如果一個映象有兩個或兩個以上的標籤,刪除的只是標籤。

  

root@S1:~# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              16.04               94e814e2efa8        2 weeks ago         88.9MB
ubuntu              latest              94e814e2efa8        2 weeks ago         88.9MB
hello-world         latest              fce289e99eb9        2 months ago        1.84kB
root@S1:~# docker rmi ubuntu:16.04
Untagged: ubuntu:16.04
root@S1:~# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              94e814e2efa8        2 weeks ago         88.9MB
hello-world         latest              fce289e99eb9        2 months ago        1.84kB
現在只剩下一個標籤的時候,再去用標籤刪除的話,會將映象永久的刪除,如下:
root@S1:~# docker rmi ubuntu:latest 
Untagged: ubuntu:latest
Untagged: ubuntu@sha256:017eef0b616011647b269b5c65826e2e2ebddbe5d1f8c1e56b3599fb14fabec8
Deleted: sha256:94e814e2efa8845d95b2112d54497fbad173e45121ce9255b93401392f538499
Deleted: sha256:e783d8ee44ce099d51cbe699f699a04e43c9af445d85d8576f0172ba92e4e16c
Deleted: sha256:cc7fae10c2d465c5e4b95167987eaa53ae01a13df6894493efc5b28b95c1bba2
Deleted: sha256:99fc3504db138523ca958c0c1887dd5e8b59f8104fbd6fd4eed485c3e25d2446
Deleted: sha256:762d8e1a60542b83df67c13ec0d75517e5104dee84d8aa7fe5401113f89854d9

 使用映象ID刪除映象:

  當使用docker rmi 命令後面跟上映象的ID(也可以是ID能區分的部分字首)時,會嘗試先刪除所有指向該映象的標籤,然後刪除該映象檔案本身。如果有該映象的容器存在時,映象檔案預設時無法被刪除的,(可以用-f強制刪除 但是不推薦)例如:

root@S1:~# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
59fa4f00d111        ubuntu:16.04        "/bin/bash"         5 minutes ago       Up 4 minutes                            pensive_napier
root@S1:~# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              16.04               9361ce633ff1        2 weeks ago         118MB
root@S1:~# docker stop 59fa4f00d111
d59fa4f00d111
root@S1:~# docker rm 59fa4f00d111
59fa4f00d111
root@S1:~# docker rmi 9361ce633ff1
Untagged: ubuntu:16.04
Untagged: ubuntu@sha256:58d0da8bc2f434983c6ca4713b08be00ff5586eb5cdff47bcde4b2e88fd40f88
Deleted: sha256:9361ce633ff193349d54bed380a5afe86043b09fd6ea8da7549dbbedfc2a7077
Deleted: sha256:59a6856f439d187f3ce3381d0a6b0816db99cc3d8468bcf8c9d1c39d2071dcff
Deleted: sha256:82997a16a0d57ac7d8b416c0d83f5841193b6a56a7844b486ab6324730867fe0
Deleted: sha256:5c6983f277f26021b5e38501fdf06fa29f7158a93641f3f10aedbdc9869121d0
Deleted: sha256:aa54c2bc12290df2851a94b8834cae75e4627219d2b423d4d3db8b0a497e79a2
root@S1:~# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
root@S1:~# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

刪除映象的規則,應該先刪除容器,在刪除映象,之前的版本刪除還在容器的映象還會生成一個臨時映象,ubuntu16.04系統,docker18.09的是可以強制刪除掉的

5.建立映象

基於已有映象的容器建立:該方法主要是使用docker commit 命令,命令格式:docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG] ],主要選項包括:

  -a --author=‘ ’ 作者資訊

  -c --change 對建立的映象應用Dockerfile指令

  -m--message=‘ ’ 提交資訊

  -p --pause=true 提交映象的時候 暫停容器的執行

root@iZhp38fvkcax587xnn2552Z:~# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              14.04               390582d83ead        2 weeks ago         188MB
啟動一個映象 並作出修改
root@iZhp38fvkcax587xnn2552Z:~# docker run -it ubuntu:14.04 /bin/bash
root@b0ca2a732416:/# mkdir 1 2 3
root@b0ca2a732416:/# touch  4
root@b0ca2a732416:/# exit
exit

這裡需要記住這個容器的id號

root@iZhp38fvkcax587xnn2552Z:~# docker commit -m "add files" -a "Docker newimages" b0ca2a732416 file
sha256:03aa8fcfd2f18c4ce1c4ef35be02fced08313ba62b11d03fddcc7875c80fab34
root@iZhp38fvkcax587xnn2552Z:~# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
file                latest              03aa8fcfd2f1        6 seconds ago       188MB
ubuntu              14.04               390582d83ead        2 weeks ago         188MB

基於本地模板匯入:

也可以充一個作業系統模板檔案匯入一個映象。在這裡,推薦使用OpenVZ提供的模板來建立。OPENVZ模板的下載地址:https://download.openvz.org/template/precreated/

root@iZhp38fvkcax587xnn2552Z:~# wget https://download.openvz.org/template/precreated/ubuntu-14.04-x86-minimal.tar.gz
--2019-03-28 19:21:24--  https://download.openvz.org/template/precreated/ubuntu-14.04-x86-minimal.tar.gz
Resolving download.openvz.org (download.openvz.org)... 185.231.241.69
Connecting to download.openvz.org (download.openvz.org)|185.231.241.69|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 76242510 (73M) [application/x-gzip]
Saving to: ‘ubuntu-14.04-x86-minimal.tar.gz’

ubuntu-14.04-x86-minimal.tar.gz         100%[==============================================================================>]  72.71M  58.7KB/s    in 21m 52s 

2019-03-28 19:43:19 (56.8 KB/s) - ‘ubuntu-14.04-x86-minimal.tar.gz’ saved [76242510/76242510]
root@iZhp38fvkcax587xnn2552Z:~# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
file                latest              03aa8fcfd2f1        About an hour ago   188MB
nginx               latest              2bcb04bdb83f        37 hours ago        109MB
root@iZhp38fvkcax587xnn2552Z:~# cat ubuntu-14.04-x86-minimal.tar.gz | docker import - ubuntu:14.04
sha256:5863575f1996d4738399f0b3b4c03fe5ab69098b370eb587fc2163367ffcff72
root@iZhp38fvkcax587xnn2552Z:~# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE
ubuntu              14.04               5863575f1996        About a minute ago   205MB
file                latest              03aa8fcfd2f1        About an hour ago    188MB
nginx               latest              2bcb04bdb83f        37 hours ago         109MB

基於Dockerfile生成映象:

https://www.cnblogs.com/ylqh/p/10617105.html

6.匯出和載入映象

 匯出映象:使用docker save命令,匯出本地的ubuntu:14.04的映象檔案為:ubuntu_14.04.tar

root@iZhp38fvkcax587xnn2552Z:~# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
file                latest              03aa8fcfd2f1        13 minutes ago      188MB
ubuntu              14.04               390582d83ead        2 weeks ago         188MB 
root@iZhp38fvkcax587xnn2552Z:~# docker save -o ubuntu_14.04.tar ubuntu:14.04 

 匯入映象:使用docker load從本地檔案匯入到本地的映象庫中,例如:

root@iZhp38fvkcax587xnn2552Z:~# ls
 ubuntu_14.04.tar  
root@iZhp38fvkcax587xnn2552Z:~# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
file                latest              03aa8fcfd2f1        17 minutes ago      188MB
root@iZhp38fvkcax587xnn2552Z:~# docker load --input ubuntu_14.04.tar 
Loaded image: ubuntu:14.04
root@iZhp38fvkcax587xnn2552Z:~# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
file                latest              03aa8fcfd2f1        18 minutes ago      188MB
ubuntu              14.04               390582d83ead        2 weeks ago         188MB
root@iZhp38fvkcax587xnn2552Z:~# docker rmi ubuntu:14.04 
Untagged: ubuntu:14.04
root@iZhp38fvkcax587xnn2552Z:~# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
file                latest              03aa8fcfd2f1        18 minutes ago      188MB
root@iZhp38fvkcax587xnn2552Z:~# docker load  < ubuntu_14.04.tar 
Loaded image: ubuntu:14.04
root@iZhp38fvkcax587xnn2552Z:~# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
file                latest              03aa8fcfd2f1        18 minutes ago      188MB
ubuntu              14.04               390582d83ead        2 weeks ago         188MB

7.上傳映象

 使用docker push上傳映象到倉庫,預設上傳到Dockerhub官方倉庫(需要認證),命令格式: docker push NAME[:TAG]。

使用者在DockerHub網站註冊後,可以上傳自制的映象,上傳方式如下:

上傳映象需要登陸到docker hub上
root@S1:~# docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: zhangzhanling
Password: 
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded

root@S1:~# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              14.04               390582d83ead        2 weeks ago         188MB

root@S1:~# docker tag ubuntu:14.04 zhangzhanling/ubuntu:14.04
root@S1:~# docker images
REPOSITORY                      TAG                 IMAGE ID            CREATED             SIZE
ubuntu                          14.04               390582d83ead        2 weeks ago         188MB
zhangzhanling/ubuntu            14.04               390582d83ead        2 weeks ago         188MB
上傳映象
root@S1:~# docker push zhangzhanling/ubuntu
The push refers to repository [docker.io/zhangzhanling/ubuntu]
5f96fa66dc12: Mounted from library/ubuntu 
dda5ec330bd9: Mounted from library/ubuntu 
11a0c2f551fd: Mounted from library/ubuntu 
eef560b4ec4f: Mounted from library/ubuntu 
14.04: digest: sha256:76f6920c51a2e9da1fccca4b81a84af0ff287449282d6a04c33adeaeeb4df60d size: 1152

映象與容器的聯絡

容器是在映象的最上面加了一個讀寫層,在執行容器裡的檔案改動時,會先從映象裡要寫的檔案複製到容器自己的檔案系統中(讀寫層)。
如果容器刪除了,最上面的讀寫層也就刪除了,改動就丟失了,所以無論多少個容器共享一個映象,所做的寫操作都是從映象的檔案系統中複製過來操作的,並不會修改映象的原始檔,這種方式提高了磁碟利用率。
如果想持久化這些改動,可以通過docker commit將容器儲存為一個新映象

本地映象需要可以從遠端映象伺服器上pull或者push映象檔案,映象可以例項化成容器,容器也可以commit成映象

彙總docker images常用的相關命令

docker image 【options】

ls :列出映象 docker image ls 或者 docker images

build : 通過dockerfile構建映象

history :檢視映象歷史

inspect:顯示一個或者多個映象詳細資訊

pull:從映象倉庫拉去映象

push:推送一個映象到映象倉庫

rm:移除一個或者多個映象

prune:移除未使用的映象,沒有被標記或被任何容器引用的

tag:建立一個引用源映象標記的目標映象

export:匯出容器檔案系統到tar歸檔檔案

import:匯入容器檔案系統tar歸檔檔案建立映象

save:儲存一個或多個映象到一個tar歸檔檔案

load:載入映象來自tar歸檔或標準輸入