【快學Docker】Docker鏡像相關操做

前言

鏡像是Docker的三大核心概念之一(另外兩個分別是:容器和倉庫)。java

Docker運行容器前須要本地存在鏡像,若是本地不存在鏡像,Docker則會嘗試從遠端倉庫拉去鏡像。鏡像是Docker一大核心,咱們今天就來了解下Docker鏡像的相關操做。linux

原創聲明

本文發佈於掘金號【Happyjava】。Happy的掘金地址:juejin.im/user/5cc289…,Happy的我的博客:(blog.happyjava.cn)[blog.happyjava.cn]。歡迎轉載,但須保留此段聲明。docker

獲取鏡像

命令格式:shell

docker pull <name:tag>
複製代碼

若是不顯式指定tag,則會默認選擇latest標籤,即下載倉庫中最新版本的鏡像。json

如:拉取一個ubuntu鏡像:ubuntu

不指定tag則會默認拉取最新版本centos

查看鏡像信息

使用 docker images 能夠查看本地的鏡像信息:bash

能夠列出:鏡像倉庫、標籤、鏡像ID、建立時間和大小。app

使用 docker inspect <image_id> 能夠查看鏡像詳細信息:ui

[
    {
        "Id": "sha256:4c108a37151f54439950335c409802e948883e00c93fdb751d206c9a9674c1f6",
        "RepoTags": [
            "ubuntu:latest"
        ],
        "RepoDigests": [
            "ubuntu@sha256:9b1702dcfe32c873a770a32cfd306dd7fc1c4fd134adfb783db68defc8894b3c"
        ],
        "Parent": "",
        "Comment": "",
        "Created": "2019-06-18T22:51:38.340092056Z",
        "Container": "fdea049ea807b599050e885a88784e009ed78ebcc4d498be93744bb9374c6134",
        "ContainerConfig": {
            "Hostname": "fdea049ea807",
            "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:ae950a0376fe6c4d08fa7ff395f50f4a909e26e9f2d865d8641cda024161c6ee",
            "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:ae950a0376fe6c4d08fa7ff395f50f4a909e26e9f2d865d8641cda024161c6ee",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": null
        },
        "Architecture": "amd64",
        "Os": "linux",
        "Size": 64184378,
        "VirtualSize": 64184378,
        "GraphDriver": {
            "Data": {
                "LowerDir": "/var/lib/docker/overlay2/fc1c2e7f7d583af0ddaa86f2d10be50371a966dd564c9d95b1816c33296520c7/diff:/var/lib/docker/overlay2/615da971b39e6d5121eb018b14f350b1466ef9445870ddba03d2d2da3ecd25d7/diff:/var/lib/docker/overlay2/e508ef7c05f3bdcd784d1f59064574d92f11516e6592cd5df24cfdac7ae13768/diff",
                "MergedDir": "/var/lib/docker/overlay2/f6b9b965a5e2714452cf355e1a530b8b2f8c5d818e73f723debd7b27d955ae5e/merged",
                "UpperDir": "/var/lib/docker/overlay2/f6b9b965a5e2714452cf355e1a530b8b2f8c5d818e73f723debd7b27d955ae5e/diff",
                "WorkDir": "/var/lib/docker/overlay2/f6b9b965a5e2714452cf355e1a530b8b2f8c5d818e73f723debd7b27d955ae5e/work"
            },
            "Name": "overlay2"
        },
        "RootFS": {
            "Type": "layers",
            "Layers": [
                "sha256:ba9de9d8475e7f5e40086358a1353b3cc080994fc6d31e4272dd3acb69b0151e",
                "sha256:fbd2732ad777cb5db2515fa62b6122b797be233d01db02e0a19e5d894688cad6",
                "sha256:dda1518598187bf87704acc22aa0ec2a67d9e7835c24346dfca118ab42c5cd0b",
                "sha256:75e70aa52609fdbd63b58d46d6f7c20470062e1c9bb75616f7703a358a61e5ca"
            ]
        },
        "Metadata": {
            "LastTagTime": "0001-01-01T00:00:00Z"
        }
    }
]
複製代碼

修改鏡像TAG

咱們使用默認tag拉取鏡像,在本地TAG會顯示爲latest,其實這是很很差的,由於時間久了,可能咱們也忘記其具體的版本號了。不過咱們能夠經過以下命令修改鏡像TAG:

docker tag <iamges_name>:<images_tag> <new_iamges_name>:<new_images_tag>
複製代碼

如:

咱們能夠看到ubuntu 18.09 和 latest 的 image id 是同樣的,說明這是同一個鏡像。

搜索鏡像

docker search name
複製代碼

其中,官方鏡像會有OFFICIAL標識

刪除鏡像

使用鏡像ID刪除

docker rmi <iamge_id>
複製代碼

使用名字和TAG刪除

docker rmi <name>:<tag>
複製代碼

期中tag字段是可選的。

如遇到刪除不了的鏡像,好比正在使用的,能夠經過 -f 參數強制刪除

建立鏡像

建立鏡像有三種方式:基於容器建立、基於本地模板導入、基於Dockerfile建立。

基於容器建立

建立一個ubuntu容器

docker run -it --name ubuntu ubuntu:18.09 /bin/bash

# 在容器內部建立一個文件
touch happyjava.txt

# 退出
exit
複製代碼

這時候就能夠建立鏡像了,命令以下

docker commit -m "commit message" -a "author" <container_id> <image_name>:<tag>
複製代碼

如:

docker commit -m "create a new file happyjava.txt" -a "Happy" d51e6f5e99d4 personalrepo:99

複製代碼

docker images查看鏡像:

這就跟GIT的commit操做同樣,能夠把變更提交上去。咱們可使用本身建立的鏡像新建一個容器,就能夠看到咱們建立的happyjava.txt文件了。

基於本地模板建立

推薦模板下載地址:

https://wiki.openvz.org/Download/template/precreated

複製代碼

建立命令以下:

cat centos-5-x86.tar.gz |docker import - <name>:<tag>

複製代碼

Dockerfile方式

基於Dockerfile方式建立鏡像,這個放到之後再作講解~~~

保存和加載鏡像

保存鏡像

docker save -o <filename> <name:tag/id>

複製代碼

如:

加載鏡像

docker load --input <filename>

複製代碼

或者

docker load < <filename>

複製代碼

總結

本文總結了Docker中對於鏡像的經常使用操做,包括鏡像搜索、拉取、建立、刪除等。鏡像是使用Docker的前提,其基本操做是須要熟練掌握的。

相關文章
相關標籤/搜索