【轉】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歸檔或標准輸入


免責聲明!

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



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