docker images

 docker images 介紹

鏡像是動態的容器的靜態表示,包括容器所要運行的應用代碼以及運行時的配置。Docker鏡像包括一個或者多個只讀層(read-only layers),所以,鏡像一旦被建立就不再能被修改了,一個運行着的Docker容器時一個鏡像的實例(instantiation)。從同一個鏡像中運行的容器包含有相同的應用代碼和運行時依賴。可是不像鏡像是靜態的,每一個運行着的容器都有一個可寫層(writable  layer,也成爲容器層 container layer),它位於底下的若干只讀層之上。運行時的全部變化,包括對數據和文件的寫和更新,都會保存在這個層中,所以,從同一個鏡像運行的多個容器包含了不一樣的容器層。php

關於鏡像是什麼總結:html

1.一個分層存儲的文件mysql

2.一個軟件的環境linux

3.一個鏡像能夠建立N個容器nginx

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

5.一個不包含Linux內核又精簡的Liunx操做系統sql

助理解:鏡像不是單一的文件,而是多層構成,咱們能夠經過docker history <ID/NAME> 查看鏡像中各層內容及其大小,每層對應着一個Dockerfile中的一條指令,另外docker鏡像存儲在/var/lib/docker/<storage-d'river>中。docker

鏡像從哪裏來的呢?apache

Docker hub是由Docker公司負責維護的公共註冊中心,包含大量的容器鏡像,Docker工具默認從這個公共鏡像庫下載鏡像,地址爲:https://hub.docker.com/search/?q=&type=imagejson

鏡像加速器的配置: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 w24                                      [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歸檔或標準輸入

相關文章
相關標籤/搜索