Docker鏡像(二)

一. 獲取鏡像

1.1. docker pull

  鏡像是運行容器的前提,也就是說沒有鏡像就沒有辦法建立容器php

  獲取鏡像的命令:
  docker pull
  這個命令能夠直接在docker Hub鏡像源下載鏡像mysql

  該命令的格式是:
  docker pull NAME[:TAG]
  其中name是鏡像倉庫的名稱(用來區分鏡像)tag是鏡像的標籤(用來標註版本),一般狀況下咱們描述一個鏡像須要包括"名稱+標籤"信息linux

咱們pull一個centos的鏡像
[root@rsync131 ~]# docker pull centos
Using default tag: latest
latest: Pulling from library/centos
256b176beaff: Downloading [==========>                                        ]  15.75MB/74.69MB

這裏我沒有指定標籤,它的下載的默認標籤是latest

  下載鏡像的過程解析:nginx

  下載過程咱們能夠看出,鏡像文件通常由若干層組成 256b176beaff 這樣的串是這個鏡像的惟一ID(這裏只是一個短的ID,實際上完整的ID包括256比特,由64個十六進制字符組成)。使用docker pull 命令下載時會獲取並輸出鏡像的各層信息。當不一樣的鏡像包括相同的層時,本地僅存儲層的一分內容,減少的存儲須要的空間。 web

pull 子命令支持的選項主要包括:
-a,--all-tags=true|false:是否獲取倉庫中的全部鏡像,默認是否。

二. 查看鏡像信息

2.1. docker images

  使用docker images 命令能夠列出本地主機上的已有鏡像基本信息sql

[root@rsync131 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              cd6d8154f1e1        2 weeks ago         84.1MB
centos              latest              5182e96772bf        6 weeks ago         200MB

REPOSITORY:來自哪一個倉庫
TAG:鏡像的標籤
IMAGE ID:鏡像的惟一ID
CREATED:建立的時間
SIZE:鏡像的大小


其中鏡像的ID信息是十分重要的,由於它是鏡像的惟一值
images子命令主要支持的選項以下:
-a,--all=true|false:列出全部的鏡像文件(包括臨時文件),默認爲否
--digests=true|false:列出鏡像的數字摘要值,默認爲否
-f,--filter=[]:過濾列出的鏡像,如dangling=true只顯示沒有被使用的鏡像
--format="TEMPLATE":控制輸出格式,如.ID表明ID信息
--no-trunc=true|false:對輸出格式中太長的部分是否進行截斷,默認爲是
-q,--quiet=true|false:僅輸出ID信息,默認爲否

更多的子命令能夠經過man docker-images來查看

2.2. docker tag

 使用docker tag 能夠給鏡像添加標籤信息docker

[root@rsync131 ~]# docker tag centos:latest mycentos:1.0
[root@rsync131 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              cd6d8154f1e1        2 weeks ago         84.1MB
centos              latest              5182e96772bf        6 weeks ago         200MB
mycentos            1.0                 5182e96772bf        6 weeks ago         200MB

咱們能夠看到mycentos和centos的ID、大小徹底一致,實際上他們就是一個鏡像文件,只是個別名而已,docker tag 就至關於Linux建立的連接文件

2.3. docker inspect

  使用docker inspect命令能夠查看鏡像的詳細信息,包括製做者、適應架構、各層的數字摘要等不少信息json

[root@rsync131 ~]# docker inspect centos
[
    {
        "Id": "sha256:5182e96772bf11f4b912658e265dfe0db8bd314475443b6434ea708784192892",
        "RepoTags": [
            "centos:latest",
            "mycentos:1.0"
        ],
        "RepoDigests": [
            "centos@sha256:6f6d986d425aeabdc3a02cb61c02abb2e78e57357e92417d6d58332856024faf"
        ],
        "Parent": "",
        "Comment": "",
        "Created": "2018-08-06T19:21:48.235227329Z",
        "Container": "d60ffc9ddd12462af4bdcdbe45b74f3b3f99b46607ada80c3ed877b7def84250",
        "ContainerConfig": {
            "Hostname": "d60ffc9ddd12",
            "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:748eacc0f236df2fc9ba87c4d76a66cb10742120387e99e2acdb9454915c841d",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {
                "org.label-schema.build-date": "20180804",
                "org.label-schema.license": "GPLv2",
                "org.label-schema.name": "CentOS Base Image",
                "org.label-schema.schema-version": "1.0",
                "org.label-schema.vendor": "CentOS"
            }
        },
        "DockerVersion": "17.06.2-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:748eacc0f236df2fc9ba87c4d76a66cb10742120387e99e2acdb9454915c841d",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {
                "org.label-schema.build-date": "20180804",
                "org.label-schema.license": "GPLv2",
                "org.label-schema.name": "CentOS Base Image",
                "org.label-schema.schema-version": "1.0",
                "org.label-schema.vendor": "CentOS"
            }
        },
        "Architecture": "amd64",
        "Os": "linux",
        "Size": 199723824,
        "VirtualSize": 199723824,
        "GraphDriver": {
            "Data": {
                "MergedDir": "/var/lib/docker/overlay2/8d76bee4ae910273382e69f526ede7bbab349f6d0f04e6dc81a46c13f9f0fa92/merged",
                "UpperDir": "/var/lib/docker/overlay2/8d76bee4ae910273382e69f526ede7bbab349f6d0f04e6dc81a46c13f9f0fa92/diff",
                "WorkDir": "/var/lib/docker/overlay2/8d76bee4ae910273382e69f526ede7bbab349f6d0f04e6dc81a46c13f9f0fa92/work"
            },
            "Name": "overlay2"
        },
        "RootFS": {
            "Type": "layers",
            "Layers": [
                "sha256:1d31b5806ba40b5f67bde96f18a181668348934a44c9253b420d5f04cfb4e37a"
            ]
        },
        "Metadata": {
            "LastTagTime": "2018-09-22T12:25:06.648773262+08:00"
        }
    }
]

  其實返回的就是一個json格式的信息,咱們也能夠用 -f 參數來獲取指定的信息ubuntu

[root@rsync131 ~]# docker inspect -f {{".Architecture"}} centos
amd64

2.4. docker history

  使用docker history命令能夠查看鏡像的歷史信息centos

  既然鏡像文件是由多層組成的,那麼怎麼知道每一層都幹了什麼呢,可使用history命令來查看

[root@rsync131 ~]# docker history ubuntu
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
cd6d8154f1e1        2 weeks ago         /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B
<missing>           2 weeks ago         /bin/sh -c mkdir -p /run/systemd && echo 'do…   7B
<missing>           2 weeks ago         /bin/sh -c sed -i 's/^#\s*\(deb.*universe\)$…   2.76kB
<missing>           2 weeks ago         /bin/sh -c rm -rf /var/lib/apt/lists/*          0B
<missing>           2 weeks ago         /bin/sh -c set -xe   && echo '#!/bin/sh' > /…   745B
<missing>           2 weeks ago         /bin/sh -c #(nop) ADD file:3df374a69ce696c21…   84.1MB


這裏有一些長的命令被自動截斷了,可使用--no-trunc選項來顯示完整的信息,太長了仍是本身試一試吧 沒辦法把輸出粘貼進來

三. 搜索鏡像

3.1. docker search

  使用docker search命令能夠搜索遠端倉庫的共享鏡像,默認是搜索官方倉庫中的鏡像文件

語法格式:

docker search TERM

支持的選項包括:

--automated=true|false:僅顯示自動建立的鏡像,默認爲否

--no-trunc=true|false:輸出信息不截斷顯示,默認爲否

-s,--stars=X:指定僅顯示評論爲指定星級以上的鏡像,默認爲0,即輸出全部的進鏡像

  搜索全部自動建立評價爲1+的帶nginx的鏡像

[root@rsync131 ~]# docker search --automated -s 3 nginx
Flag --automated has been deprecated, use --filter=is-automated=true instead
Flag --stars has been deprecated, use --filter=stars=3 instead
NAME                                                   DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
jwilder/nginx-proxy                                    Automated Nginx reverse proxy for docker con…   1416                                    [OK]
richarvey/nginx-php-fpm                                Container running Nginx + PHP-FPM capable of…   615                                     [OK]
jrcs/letsencrypt-nginx-proxy-companion                 LetsEncrypt container to use with nginx as p…   414                                     [OK]
webdevops/php-nginx                                    Nginx with PHP-FPM                              113                                     [OK]
zabbix/zabbix-web-nginx-mysql                          Zabbix frontend based on Nginx web-server wi…   68                                      [OK]
bitnami/nginx                                          Bitnami nginx Docker Image                      58                                      [OK]
1and1internet/ubuntu-16-nginx-php-phpmyadmin-mysql-5   ubuntu-16-nginx-php-phpmyadmin-mysql-5          44                                      [OK]
tobi312/rpi-nginx                                      NGINX on Raspberry Pi / armhf                   20                                      [OK]
blacklabelops/nginx                                    Dockerized Nginx Reverse Proxy Server.          12                                      [OK]
wodby/drupal-nginx                                     Nginx for Drupal container image                10                                      [OK]
nginxdemos/hello                                       NGINX webserver that serves a simple page co…   8                                       [OK]
webdevops/nginx                                        Nginx container                                 8                                       [OK]
1science/nginx                                         Nginx Docker images that include Consul Temp…   4                                       [OK]
behance/docker-nginx                                   Provides base OS, patches and stable nginx f…   3                                       [OK]

四. 刪除鏡像

4.1. docker rmi

  使用docker rmi 命令能夠刪除指定的鏡像文件

語法格式:
docker rmi IMAGE [IMAGE....]

PS:當本地一個鏡像有多個標籤的時候,docker rmi 只會刪除指定的標籤鏡像而已

支持的選項參數:
-f :強制刪除鏡像文件

  經過標籤刪除

[root@rsync131 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              cd6d8154f1e1        2 weeks ago         84.1MB
mycentos            1.0                 5182e96772bf        6 weeks ago         200MB
centos              latest              5182e96772bf        6 weeks ago         200MB
[root@rsync131 ~]# docker rmi mycentos:1.0
Untagged: mycentos:1.0
[root@rsync131 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              cd6d8154f1e1        2 weeks ago         84.1MB
centos              latest              5182e96772bf        6 weeks ago         200MB

  經過ID刪除

[root@rsync131 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              cd6d8154f1e1        2 weeks ago         84.1MB
centos              latest              5182e96772bf        6 weeks ago         200MB
[root@rsync131 ~]# docker rmi 5182e96772bf
Untagged: centos:latest
Untagged: centos@sha256:6f6d986d425aeabdc3a02cb61c02abb2e78e57357e92417d6d58332856024faf
Deleted: sha256:5182e96772bf11f4b912658e265dfe0db8bd314475443b6434ea708784192892
Deleted: sha256:1d31b5806ba40b5f67bde96f18a181668348934a44c9253b420d5f04cfb4e37a
[root@rsync131 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              cd6d8154f1e1        2 weeks ago         84.1MB

  強制刪除

[root@rsync131 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              cd6d8154f1e1        2 weeks ago         84.1MB
centos              latest              5182e96772bf        6 weeks ago         200MB
[root@rsync131 ~]# docker rmi -f 5182e96772bf
Untagged: centos:latest
Untagged: centos@sha256:6f6d986d425aeabdc3a02cb61c02abb2e78e57357e92417d6d58332856024faf
Deleted: sha256:5182e96772bf11f4b912658e265dfe0db8bd314475443b6434ea708784192892
Deleted: sha256:1d31b5806ba40b5f67bde96f18a181668348934a44c9253b420d5f04cfb4e37a
[root@rsync131 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              cd6d8154f1e1        2 weeks ago         84.1MB

五. 建立鏡像

  其實建立鏡像有三種方式,基於已有的鏡像的容器建立,基於本地模板導入,基於Dockerfile建立,這裏只介紹下前兩種,由於dockerfile是一個很高級的東西會有專門的文章來介紹:點擊Dockerfile

5.1. docker commit

  docker commit 是基於已有的鏡像的容器建立

語法格式:
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

支持的選項包括:
-a,--author="":做者的信息
-c,--change=[]:提交的時候執行的Dockerfile指令,包括CMD|ENTRYPOINT|ENV|EXPOSE|LABEL|ONBUILD|USER|VOLUME|WORKDIR等
-m,--message="":提交的信息
-p,--pause=true:提交時暫停容器運行

  由於是基於容器建立的鏡像,因此要先建立個容器

# 建立個容器,touch個文件,這裏相對源鏡像已經發生了改變 c86d860188f3 就是容器ID
[root@rsync131 ~]# docker run -it centos bash
[root@c86d860188f3 /]# touch a.txt
[root@c86d860188f3 /]# exit
exit

# 建立鏡像基於c86d860188f3 容器
[root@rsync131 ~]# docker commit -m "add a.txt" -a "zhujingzhi" c86d860188f3 a_centos:1.0
sha256:64b8d4f3a1901353deeb31e8b646c0f04dd58accddc951814fdce237e2097a6f

# 查看鏡像 
[root@rsync131 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
a_centos            1.0                 64b8d4f3a190        19 seconds ago      200MB
ubuntu              latest              cd6d8154f1e1        2 weeks ago         84.1MB
centos              latest              5182e96772bf        6 weeks ago         200MB

5.2. docker import

  也能夠直接從一個操做系統文件導入一個鏡像,只要使用docker import命令

語法格式:

docker import [OPTIONS] file|URL|-[REPOSITORY[:TAG]]

  給朋友們個連接下載模板:https://download.openvz.org/template/precreated/

[root@rsync131 ~]# ll
總用量 345664
-rw-------. 1 root root      1513 8月  20 20:25 anaconda-ks.cfg
-rw-r--r--  1 root root 145639219 9月  22 14:12 centos-7-x86_64-minimal.tar.gz

[root@rsync131 ~]# cat centos-7-x86_64-minimal.tar.gz | docker import - centos-mini:1.0
sha256:4dec53e6e02af646126879ac69c8bee4ef6bdcf9fe0cc86d3a92959ce2e0b9cd

[root@rsync131 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos-mini         1.0                 4dec53e6e02a        4 seconds ago       435MB
ubuntu              latest              cd6d8154f1e1        2 weeks ago         84.1MB
centos              latest              5182e96772bf        6 weeks ago         200MB

六. 鏡像的導出和導入

6.1. docker save

  使用docker save 能夠把鏡像導出

[root@rsync131 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
a_centos            1.0                 64b8d4f3a190        17 minutes ago      200MB
ubuntu              latest              cd6d8154f1e1        2 weeks ago         84.1MB
centos              latest              5182e96772bf        6 weeks ago         200MB
[root@rsync131 ~]# docker save -o centos_bak.tar.gz centos
[root@rsync131 ~]# ll
總用量 203436
-rw-------. 1 root root      1513 8月  20 20:25 anaconda-ks.cfg
-rw-------  1 root root 208301056 9月  22 13:47 centos_bak.tar.gz

6.2. docker load

  使用docker load 能夠把使用docker save導出的文件導入

[root@rsync131 ~]# docker load --input centos_bak.tar.gz
或者
[root@rsync131 ~]# docker load < centos_bak.tar.gz
1d31b5806ba4: Loading layer [==================================================>]  208.3MB/208.3MB
Loaded image: centos:latest
[root@rsync131 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              cd6d8154f1e1        2 weeks ago         84.1MB
centos              latest              5182e96772bf        6 weeks ago         200MB
相關文章
相關標籤/搜索