docker——鏡像(image)


 

鏡像相關命令一覽表:

  • docker images
  • docker tag
  • docker inspect
  • docker history
  • docker search
  • docker pull/push
  • docker rmi
  • docker save/load

 

1.查看鏡像

(1)docker images:列出本地主機上已有鏡像的基本信息。

REPOSITORY:來自哪個倉庫。
  my-jx和test來自本地,也就是這兩個鏡像是自己創建的。
  docker.io/nginx表示來自docker官方服務器的nginx這個倉庫。
  daocloud.io/index.tenxclound.com是國內雲服務提供商提供的鏡像。
  cent0s7-ansibel是自己創建的一個標簽。

TAG:鏡像的標識信息,latest表示最新版本。
  TAG標記主要用來表示來自同一個倉庫的不同鏡像。

IMAGE ID:鏡像的ID(唯一標識)
  ID非常重要,實際上完整的id應該包括256個比特,由64個十六進制字符組成
  上面docker.io/centos的ID是75835a67d134,完整的ID應該是75835a67d1341bdc7f4cc4ed9fa1631a7d7b6998e9327272afea342d90c4ab6d。
  可以使用docker inspect查看完整的ID。
  在使用鏡像ID的時候,可以只使用前若干個字符就可以代表完整的ID。

CREATED:創建時間

SIZE:鏡像的大小。好的鏡像往往體積都比較小。
  鏡像大小信息只是表示該鏡像的邏輯體積大小。

上面這個兩個鏡像其實只是一個鏡像,只是打了一個標簽而已。
邏輯體積是447MB,但是實際上了物理上占用的空間應該會小於各鏡像的邏輯體積之和 

docker images還支持一些子命令:
  -a, --all=true|false:列出所有的鏡像文件,包括零時文件,默認為否;
  --digests=true|false:列出鏡像的數字摘要值。否問為否;
  -f, --filter=[]:過濾列出的鏡像;
  --format="TEMPLATE":控制輸出格式;
  --no-trunc=true|false:對輸出結果中太長的部分是否進行截斷;
  -q, --quiet=true|false:僅輸出ID信息,默認為否;

 

(2)docker tag:給鏡像打標簽

有時候從倉庫里拉下的鏡像名稱很長,這是由於這個名稱其實代表的是存儲的路徑,所以可能有多層。

這個時候為了方便起見,我們可以給他打上一個標簽。我們可以發現它們的ID還是相同的,其實指向同一個鏡像

下面這兩種方式都是可行的。
  docker tag 758 centos 使用ID,給id為758的鏡像打上一個centos的標簽
  docker tag docker.io/centos centos7.2 使用全名

 

(3)docker inspect:查看鏡像的詳細信息

[root@centos003 ~]# docker inspect centos
[
    {
        "Id": "sha256:1e1148e4cc2c148c6890a18e3b2d2dde41a6745ceb4e5fe94a923d811bf82ddb",  #完整id
        "RepoTags": [
            "centos:latest"  #標簽信息
        ],
        "RepoDigests": [    #鏡像摘要,推測以此來保持鏡像的完整性
            "centos@sha256:184e5f35598e333bfa7de10d8fb1cebb5ee4df5bc0f970bf2b1e7c7345136426"
        ],
        "Parent": "",    #父鏡像,鏡像可能是多層的
        "Comment": "",   #說明
        "Created": "2018-12-06T00:21:07.135655444Z",  #創建時間
        "Container": "1fdbb0fcc184eb795364f7aa5fdc00299d0a2b90d8e26b4696217c22da7f983f",
        "ContainerConfig": {  #容器配置時的一些參數
            "Hostname": "1fdbb0fcc184",  #主機名
            "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:b3a68d99a4a4195c6c97c2345b83cb2d6cfd1661247816ac403cf0b584437ad7",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {  #標簽
                "org.label-schema.build-date": "20181205",
                "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:b3a68d99a4a4195c6c97c2345b83cb2d6cfd1661247816ac403cf0b584437ad7",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {
                "org.label-schema.build-date": "20181205",
                "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": 201779604,
        "VirtualSize": 201779604,
        "GraphDriver": {
            "Data": {
                "MergedDir": "/var/lib/docker/overlay2/b702fb99abd74dc2e547901ec1b09008a2d649864941c3954269390661912b87/merged",
                "UpperDir": "/var/lib/docker/overlay2/b702fb99abd74dc2e547901ec1b09008a2d649864941c3954269390661912b87/diff",
                "WorkDir": "/var/lib/docker/overlay2/b702fb99abd74dc2e547901ec1b09008a2d649864941c3954269390661912b87/work"
            },
            "Name": "overlay2"
        },
        "RootFS": {
            "Type": "layers",
            "Layers": [
                "sha256:071d8bd765171080d01682844524be57ac9883e53079b6ac66707e192ea25956"
            ]
        },
        "Metadata": {
            "LastTagTime": "0001-01-01T00:00:00Z"
        }
    }
]

docker inspect 還支持一些子命令。
  -f, --format="":格式化輸出,可以通過這個參數過濾出想要的信息。
  -s, --size:如果類型為容器,則顯示總文件的大小
  --type=container|image|network|node|service|task|volume:輔助查詢
如果你想查看ContainerConfig信息:

  docker inspect -f {{.ContainerConfig}} 1e11

  docker inspect -f {{.ContainerConfig.Hostname}} 1e11

 

(4)docker history:列出各層的創建信息

 

 

 

2.搜尋鏡像:搜索倉庫中共享的鏡像,默認搜索官方倉庫。

INDEX:屬於哪個倉庫
NAME:名稱
DESCRIPTION:描述
STARS:星級
OFFICIAL:是否是官方的
AUTOMATED:是否自動

docker search的子命令:
  docker search [-f|--filter[=[]]] [--help] [--limit[=LIMIT]] [--no-index] [--no-trunc] TERM
  -f, --filter=[]:過濾信息
  --no-index=true|false:不要在輸出中包含索引名稱。排序結果主要由注冊表名。
  --limit=LIMIT:返回的最大搜索結果。默認值為25。
  --no-trunc=true|false:輸出星系不截斷顯示,默認為否

示例:
  docker search --filter=starts=3 fedora 星級大於等於三的結果
  docker search -s 3 fedora
  docker search --filter=is-automated=true --filter=stars=1 fedora 自動化並且星級大於等於1
  docker search --limit=10 fedora  

 

 

3.獲取鏡像

dockers pull:直接從Docker Hub鏡像源來下載鏡像
docker pull [-a|--all-tags] [--help] NAME[:TAG] | [REGISTRY_HOST[:REGISTRY_PORT]/]NAME[:TAG]

 一般不指定具體的名稱,就會默認下載最新的版本latest。
一般來說,latest 一般是最新版本但是並不穩定,因此在生產環境中最好還是使用穩定的版本。
在拉去鏡像的時候還可以指定拉取的位置。示例如下:
  docker pull hub.c.163.com/public/lamp:latest  網易

 

 

 

4.刪除鏡像

docker rmi 刪除鏡像
docker rmi [-f|--force] [--help] [--no-prune] IMAGE [IMAGE...]

 (1)根據標簽刪除名稱刪除鏡像

 (2)根據ID刪除鏡像

  之前說過,為了方便起見,我們會給鏡像打標簽,這樣刪除一個id可能就可能刪除多項。

 需要注意的情況是當鏡像被容器依賴的情況:

  此時你必須先刪除依賴該鏡像的所有容器,再來刪除鏡像,當然你也可以-f強制刪除。

 

 

 

5.創建鏡像

創建鏡像的方法有三種:基於已有鏡像的容器創建、基於本地模板導入、基於Dockerfile創建。

(1)基於已有的容器創建

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
子命令參數:
  -a, --author="":作者信息
  -c , --change=[]: 提交的時候執行Dockerfile指令
  -m, --message="":提交消息
  -p, --pause=true|false:提交時暫停容器運行

  查看:

(2)基於Dockerfile創建

詳細內容請查看:xxxxx

 

 

 

6.存出和載入鏡像

docker save:導出鏡像到本地文件
docker load:將導出的tar文件再次導入鏡像庫
導入到本地:

刪除原鏡像:

載入鏡像:

查看結果:

 

 

 

7.上傳鏡像

可以使用docker push命令上傳鏡像到倉庫,默認上傳到官方倉庫

 


免責聲明!

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



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