1. 程式人生 > >Docker基礎篇2:映象管理

Docker基礎篇2:映象管理

1、映象簡介

簡單說,Docker映象是一個不包含Linux核心而又精簡的Linux作業系統。

       映象不是一個單一的檔案,而是有多層構成。我們可以通過docker history <ID/NAME> 檢視映象中各層內容及大小,每層對應著Dockerfile中的一條指令。Docker映象預設儲存在/var/lib/docker/<storage-driver>中。
         容器其實是在映象的最上面加了一層讀寫層,在執行容器裡做的任何檔案改動,都會寫到這個讀寫層。如果容器刪除了,最上面的讀寫層也就刪除了,改動也就丟失了。
        Docker使用儲存驅動管理映象每層內容及可讀寫層的容器層。

2、修改映象源

   Docker Hub是由Docker公司負責維護的公共註冊中心,包含大量的容器映象,Docker工具預設從這個公共映象庫下載映象。https://hub.docker.com/explore
預設是國外的源,下載會慢,建議配置國內映象倉:

[[email protected]_190_147_centos ~]# vim /etc/docker/daemon.json
{
"registry-mirrors":["https://registry.docker-cn.com"]
}

3、映象常用命令說明

[[email protected]

_190_147_centos ~]# docker --help

通過docker --help命令我們發現,映象管理的

【映象儲存的位置】
[[email protected]_190_147_centos ~]# ls /var/lib/docker/image/
overlay2

【檢視映象管理命令提示】

[[email protected]_190_147_centos ~]# docker image --help

 4、 映象管理命令使用

【列出所有映象】

[[email protected]_190_147_centos ~]# docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              568c4670fa80        32 hours ago        109MB

【檢視映象歷史】會顯示每一層的情況

[[email protected]_190_147_centos ~]# docker image history nginx

【檢視映象詳情inspect】

[[email protected]_190_147_centos ~]# docker image inspect nginx:latest
[
    {
        "Id": "sha256:568c4670fa800978e08e4a51132b995a54f8d5ae83ca133ef5546d092b864acf",
        "RepoTags": [
            "nginx:latest"
        ],
        "RepoDigests": [
            "[email protected]:5d32f60db294b5deb55d078cd4feb410ad88e6fe77500c87d3970eca97f54dba"
        ],
        "Parent": "",
        "Comment": "",
        "Created": "2018-11-27T22:21:45.207738888Z",
        "Container": "1455cab9c97f6945336dd97d5dfca0429eacbb739fcd362cc528ed8a175fcc7b",
        "ContainerConfig": {
            "Hostname": "1455cab9c97f",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "ExposedPorts": {
                "80/tcp": {}
            },
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "NGINX_VERSION=1.15.7-1~stretch",
                "NJS_VERSION=1.15.7.0.2.6-1~stretch"
            ],
            "Cmd": [
                "/bin/sh",
                "-c",
                "#(nop) ",
                "CMD [\"nginx\" \"-g\" \"daemon off;\"]"
            ],
            "ArgsEscaped": true,
            "Image": "sha256:cf9409661039371fa3448619fb988625e4542108921c4c8f923c5bccc51601eb",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": [],
            "Labels": {
                "maintainer": "NGINX Docker Maintainers <[email protected]>"
            },
            "StopSignal": "SIGTERM"
        },
        "DockerVersion": "17.06.2-ce",
        "Author": "",
        "Config": {
            "Hostname": "",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "ExposedPorts": {
                "80/tcp": {}
            },
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "NGINX_VERSION=1.15.7-1~stretch",
                "NJS_VERSION=1.15.7.0.2.6-1~stretch"
            ],
            "Cmd": [
                "nginx",
                "-g",
                "daemon off;"
            ],
            "ArgsEscaped": true,
            "Image": "sha256:cf9409661039371fa3448619fb988625e4542108921c4c8f923c5bccc51601eb",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": [],
            "Labels": {
                "maintainer": "NGINX Docker Maintainers <[email protected]>"
            },
            "StopSignal": "SIGTERM"
        },
        "Architecture": "amd64",
        "Os": "linux",
        "Size": 109116878,
        "VirtualSize": 109116878,
        "GraphDriver": {
            "Data": {
                "LowerDir": "/var/lib/docker/overlay2/ab2eb6e813d97b338827eae1c4982601a8961cf3b30b935f371fe925b2414959/diff:/var/lib/docker/overlay2/2f5ba371b973ed35e737c77372a62500a7b895d65534c1cc1eb1ee9b72440bc3/diff",
                "MergedDir": "/var/lib/docker/overlay2/d6e9f31671ba501902ff947b708de737401b3d640816180c86b22a0d852732ec/merged",
                "UpperDir": "/var/lib/docker/overlay2/d6e9f31671ba501902ff947b708de737401b3d640816180c86b22a0d852732ec/diff",
                "WorkDir": "/var/lib/docker/overlay2/d6e9f31671ba501902ff947b708de737401b3d640816180c86b22a0d852732ec/work"
            },
            "Name": "overlay2"
        },
        "RootFS": {
            "Type": "layers",
            "Layers": [
                "sha256:ef68f6734aa485edf13a8509fe60e4272428deaf63f446a441b79d47fc5d17d3",
                "sha256:ad5345cbb119f7c720123e3adf28b164143e4157ca6e46a629ca694e75f7825f",
                "sha256:ece4f9fdef598687f23d39643bacbf2c609201b087b93bbae81b931da72d2a64"
            ]
        },
        "Metadata": {
            "LastTagTime": "0001-01-01T00:00:00Z"
        }
    }
]

【給映象一個標記tag】

[[email protected]_190_147_centos ~]# docker image tag nginx wzy_nginx

【save儲存一個映象歸檔tar檔案】

[[email protected]_190_147_centos ~]# docker image save nginx > nginx_v1.tar
[[email protected]_190_147_centos ~]# du -sh nginx_v1.tar 
108M    nginx_v1.tar
[[email protected]_190_147_centos ~]# ll nginx_v1.tar 
-rw-r--r-- 1 root root 112844800 Nov 29 14:06 nginx_v1.tar

【載入一個歸檔tar檔案的映象】

[[email protected]_190_147_centos ~]# docker load < nginx_v1.tar 
Loaded image: nginx:latest

【匯入匯出容器】

[[email protected]_190_147_centos ~]# docker run -itd busybox
54254189b04e92e9842b73326ccae72173bc4b7b120672a03d8aff1bcf865e3e
[[email protected]_190_147_centos ~]# docker export 54254189b04e > busybox.tar

[[email protected]_190_147_centos ~]# docker image import busybox.tar busybox:self  
sha256:0ebfcabd404262fe2e9e324438ae3c617165aabbfc7c58ae5452a2da28c813dd

【注意】save命令和export命令,以及load命令與import的區別。save和load命令針對映象而言,export和import針對容器檔案而言。