1. 程式人生 > >容器技術Docker雲計算實戰 鏡像操作大總結

容器技術Docker雲計算實戰 鏡像操作大總結

docker 容器 鏡像 雲計算 虛擬化

Docker實戰之鏡像操作:

獲取鏡像:

docker pull NAME[:TAG]


root@doc-vm:~# docker pull hello-world

Using default tag: latest

latest: Pulling from library/hello-world

ca4f61b1923c: Pull complete

Digest: sha256:150f6d05b8898b79f55114991c01b89688a02dab6115e402b7855792a440caff

Status: Downloaded newer image for hello-world:latest


latest標簽意味著這個鏡像的內容會跟蹤最新的非穩定版本而發步,內容是不穩定的。不要在生產環境中使用latest標簽的鏡像。


使用其他鏡像源進行下載:

root@doc-vm:~# docker pull hub.c.163.com/public/ubuntu:14.04

14.04: Pulling from public/ubuntu

f4ab0b34ba6a: Pull complete

2f0787dc0bfe: Pull complete

54c427d77362: Pull complete

51e87d5424ff: Pull complete

5dfa314e7290: Pull complete

a3ed95caeb02: Pull complete

Digest: sha256:ffc2fc66f8e0bfa4b417b817054d3ebec130c8db44342b8fa394e25779633257

Status: Downloaded newer image for hub.c.163.com/public/ubuntu:14.04

pull命令支持的選項:

-a, --all-tags=true|false:是否獲取倉庫中的所有鏡像,默認是否。


查看鏡像信息:

docker images


root@doc-vm:~# docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

nginx latest 9e7424e5dbae 5 days ago 108 MB

hello-world latest f2a91732366c 7 days ago 1.85 kB

ubuntu latest 20c44cd7596f 10 days ago 123 MB

tomcat latest 11df4b40749f 13 days ago 558 MB

mysql latest 5709795eeffa 3 weeks ago 408 MB

busybox latest 6ad733544a63 3 weeks ago 1.13 MB

centos latest d123f4e55e12 3 weeks ago 197 MB

hub.c.163.com/public/ubuntu 14.04 2fe5c4bba1f9 20 months ago 237 MB


images的子選項:

-a, --all=true|false:列出所有鏡像文件,默認是否

--digest=true|false:列出鏡像的數字摘要值,默認是否

-f,--filter=[]:過濾列出的鏡像

--format="TEMPLATE":控制輸出格式

--no-turnc=true|false:對輸出結果中太長的部分是否進行截斷,默認為是

-q,--quiet=true|false:僅僅輸出ID信息,默認是否


使用tag命令添加鏡像標簽:

docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]

root@doc-vm:~# docker tag ubuntu:latest mysystem:latest

root@doc-vm:~# docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

nginx latest 9e7424e5dbae 5 days ago 108 MB

hello-world latest f2a91732366c 7 days ago 1.85 kB

mysystem latest 20c44cd7596f 10 days ago 123 MB

ubuntu latest 20c44cd7596f 10 days ago 123 MB

tomcat latest 11df4b40749f 13 days ago 558 MB

mysql latest 5709795eeffa 3 weeks ago 408 MB

busybox latest 6ad733544a63 3 weeks ago 1.13 MB

centos latest d123f4e55e12 3 weeks ago 197 MB

hub.c.163.com/public/ubuntu 14.04 2fe5c4bba1f9 20 months ago 237 MB


實際上指向的是同一個文件,只是別名而已。


使用inspect命令查看詳細信息:

docker inspect [OPTIONS] NAME|ID [NAME|ID...]


root@doc-vm:~# docker inspect ubuntu

[

{

"Id": "sha256:20c44cd7596ff4807aef84273c99588d22749e2a7e15a7545ac96347baa65eda",

"RepoTags": [

"mysystem:latest",

"ubuntu:latest"

],

"RepoDigests": [

"ubuntu@sha256:cb67b69a3b83dc209418cf15dace1a2fe336e37ef6a972a00fb9e02a608a8184"

],

"Parent": "",

"Comment": "",

"Created": "2017-11-17T21:59:25.014645802Z",

"Container": "e5f1a9df75b86a5d803eaf6f3fed6a0f8ef5fbf15a6c5039df087e4348ed8171",

"ContainerConfig": {

"Hostname": "e5f1a9df75b8",

"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:b5771e7d8dcc594b886dbdd6a9c3de60d45252ca657dfdff6e1d996728dfa2cd",

"Volumes": null,

"WorkingDir": "",

"Entrypoint": null,

"OnBuild": null,

"Labels": {}

},

"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:b5771e7d8dcc594b886dbdd6a9c3de60d45252ca657dfdff6e1d996728dfa2cd",

"Volumes": null,

"WorkingDir": "",

"Entrypoint": null,

"OnBuild": null,

"Labels": null

},

"Architecture": "amd64",

"Os": "linux",

"Size": 122792927,

"VirtualSize": 122792927,

"GraphDriver": {

"Name": "aufs",

"Data": null

},

"RootFS": {

"Type": "layers",

"Layers": [

"sha256:788ce2310e2fdbbf81fe21cbcc8a44da4cf648b0339b09c221abacb4cd5fd136",

"sha256:aa4e47c4511638484cd5d95eadd7a8e4da307375ba31ff50d47aa9065dce01e0",

"sha256:b3968bc26fbd527f214f895aeef940a6930c62d853fe8b12bd479f0b53518150",

"sha256:c9748fbf541d3e043521e165b015d45825de33c00a8acb037443cfbd0cb5e677",

"sha256:2f5b0990636a87f1557d64ba39808dcd64031328b2a159c5805115b8e725bbbc"

]

}

}

]

返回的是Josn格式的信息,指定其中一項可以是:

root@doc-vm:~# docker inspect -f {{".Os"}} ubuntu

linux


搜索鏡像:

docker search [OPTIONS] TERM

--automated-true|false:僅僅顯示自動創建的鏡像,默認是否

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

-s,--stare=X:僅僅顯示評價為指定星級以上的鏡像,默認是0,也就是輸出所有的鏡像。


root@doc-vm:~# docker search ubuntu

NAME DESCRIPTION STARS OFFICIAL AUTOMATED

ubuntu Ubuntu is a Debian-based Linux operating s... 6868 [OK]

dorowu/ubuntu-desktop-lxde-vnc Ubuntu with openssh-server and NoVNC 146 [OK]

rastasheep/ubuntu-sshd Dockerized SSH service, built on top of of... 117 [OK]

ansible/ubuntu14.04-ansible Ubuntu 14.04 LTS with ansible 89 [OK]

ubuntu-upstart Upstart is an event-based replacement for ... 80 [OK]

neurodebian NeuroDebian provides neuroscience research... 40 [OK]

ubuntu-debootstrap debootstrap --variant=minbase --components... 32 [OK]

nuagebec/ubuntu Simple always updated Ubuntu docker images... 22 [OK]

tutum/ubuntu Simple Ubuntu docker images with SSH access 19

1and1internet/ubuntu-16-nginx-php-phpmyadmin-mysql-5 ubuntu-16-nginx-php-phpmyadmin-mysql-5 18 [OK]

... ...


使用docker history查看鏡像歷史:

鏡像是由多個層組成的,查看每個層的具體內容。

root@doc-vm:~# docker history ubuntu

IMAGE CREATED CREATED BY SIZE COMMENT

20c44cd7596f 10 days ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0 B

<missing> 10 days ago /bin/sh -c mkdir -p /run/systemd && echo '... 7 B

<missing> 10 days ago /bin/sh -c sed -i 's/^#\s*\(deb.*universe\... 2.76 kB

<missing> 10 days ago /bin/sh -c rm -rf /var/lib/apt/lists/* 0 B

<missing> 10 days ago /bin/sh -c set -xe && echo '#!/bin/sh' >... 745 B

<missing> 10 days ago /bin/sh -c #(nop) ADD file:280a445783f309c... 123 MB


刪除鏡像:

使用docker rmi刪除鏡像,命令格式:docker rmi IMAGE [IMAGE...]

如果鏡像有多個標簽,docker rmi命令只會刪除該鏡像的指定標簽,並不會影響鏡像文件,當只剩下一個標簽的時候才會刪除真正的鏡像。


docker rmi ID [ID...]

首先會嘗試刪除所有指向該鏡像的標簽,然後刪除該鏡像的文件本身。

當基於該鏡像的容器正在運行的時候,默認是無法刪除的,可以使用-f參數強制刪除。


創建鏡像:

基於已經有的鏡像創建鏡像:

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

-a,--author="":作者信息

-c,--change=[]:提交的時候執行Dockerfile命令

-m,--message="":提交信息

-p,--pause=true:提交時暫停容器的運行

root@doc-vm:~# docker run -it ubuntu bash

root@6ea8cd52c3eb:/# touch test

root@6ea8cd52c3eb:/# exit

exit

root@doc-vm:~# docker ps -a

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

6ea8cd52c3eb ubuntu "bash" 52 seconds ago Exited (0) 30 seconds ago nervous_hoover

root@doc-vm:~# docker commit -m "Added a Docker image" -a "deepking" 6ea8cd52c3eb ubuntutest:1.0

sha256:4ef2ad9d1aea15766c612d3c0090ad6128f803ebb8f4a4b75005d90001dbc893

root@doc-vm:~# docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

ubuntutest 1.0 4ef2ad9d1aea 7 seconds ago 123 MB

基於本地模板導入:

主要使用docker import [OPTIONS] file|url|-[REPOSITORY[:TAG]]

使用OpenVZ提供的模板;來創建,下載地址是:https://openvz.org/Download/template/precreated

root@doc-vm:~# cd Downloads/

root@doc-vm:~/Downloads# ll

total 705496

drwxr-xr-x 2 doc doc 4096 11月 29 12:33 ./

drwxr-xr-x 16 doc doc 4096 11月 29 12:13 ../

-rw-rw-r-- 1 doc doc 111337720 11月 29 12:14 centos-6-x86-20170709.tar.xz

-rw-rw-r-- 1 doc doc 67229480 11月 29 12:13 centos-6-x86-minimal-20170709.tar.xz

-rw-rw-r-- 1 doc doc 69329732 11月 29 12:13 centos-7-x86_64-minimal-20170709.tar.xz

-rw-rw-r-- 1 doc doc 81103335 11月 29 12:13 debian-6.0-x86-minimal.tar.gz

-rw-rw-r-- 1 doc doc 155356791 11月 29 12:16 debian-6.0-x86.tar.gz

-rw-rw-r-- 1 doc doc 181654531 11月 29 12:18 ubuntu-15.10-x86_64.tar.gz

-rw-rw-r-- 1 doc doc 56375699 9月 14 17:13 VMwareTools-10.1.15-6627299.tar.gz

root@doc-vm:~# cat debian-6.0-x86-minimal.tar.gz | docker import - debian:6.0


存儲和載入鏡像:

root@doc-vm:~# docker save -o tomcat_latest.tar tomcat # 存儲鏡像

root@doc-vm:~# ll

drwxr-xr-x 16 doc doc 4096 11月 29 13:52 ./

drwxr-xr-x 3 root root 4096 11月 27 21:52 ../

-rw------- 1 root root 576676352 11月 29 13:52 tomcat_latest.tar

root@doc-vm:~# docker load --input tomcat_latest.tar # 載入鏡像

Loaded image: tomcat:latest

上傳鏡像:

docker push NAME[:TAG] | [REGISTRY_HOST[:REGISTRY_PORT]/]NAME[:TAG]

第一次上傳會提示登錄。




容器技術Docker雲計算實戰 鏡像操作大總結