鏡像相關命令一覽表:
- 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命令上傳鏡像到倉庫,默認上傳到官方倉庫