在CentOS 7上安裝好了Docker引擎後,裡面什麼都沒有,接下來,我們使用Docker鏡像。
鏡像和容器的關系:就像是面向對象程式設計中的類和執行個體一樣。
- 鏡像是靜态的定義,裡邊有應用。
- 容器是動态的,是鏡像運作時的實體。
一、配置阿裡雲鏡像加速位址
鏡像倉庫位址,預設從官方的倉庫 Docker Hub上下載下傳,在國外下載下傳起來很慢,容易逾時。
推薦修改預設配置為從國内的阿裡雲鏡像倉庫,或網易雲等下載下傳。
1、擷取阿裡雲鏡像加速位址
登入阿裡雲官網,在“控制台-産品服務-容器鏡像服務-加速器配置”中拿到鏡像加速位址。
注意:阿裡雲為每個賬号配置設定獨自的鏡像加速位址。是以,每個人的都不一樣。
如果使用網易雲鏡像(http://hub-mirror.c.163.com)的話,直接配置即可。
2. 配置到Docker引擎的配置檔案/etc/docker/daemon.json
Docker引擎的配置檔案的完整配置項資訊,可檢視官方文檔。

Docker引擎的配置檔案,預設沒有,我們可建立并添加鏡像配置項。
[[email protected] ~]# ll /etc/docker/
總用量 4
-rw------- 1 root root 244 9月 6 15:49 key.json
[[email protected] ~]# vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://jugduemv.mirror.aliyuncs.com"]
}
3. 重新加載配置檔案使其生效,輸入:
[[email protected] ~]# systemctl daemon-reload
4. 重新開機Docker,輸入:
[[email protected] ~]# systemctl restart docker
5. 檢視Docker資訊,可以看到配置的阿裡雲鏡像,輸入:
[[email protected] ~]# docker info
二、拉去應用的鏡像 -- pull指令
使用 Docker的 pull指令,把應用鏡像從網絡上的倉庫中拉下來,放到 Docker 主機本地鏡像倉庫裡。
指令格式:docker [image] pull 應用鏡像倉庫名稱:tag标記
注意:
- tag标記不寫時,預設 latest。鏡像的latest标簽意味着該鏡像的内容會跟蹤最新版本的變更而變化,内容是不穩定的。在生産環境中不推薦使用latest标記的鏡像。
- 應用鏡像倉庫名稱,鏡像倉庫位址(即registry, 注冊伺服器)作為字首,跟上應用名稱。預設使用的是官方Docker Hub 服務(registry.hub.docker.com),我們配置了阿裡雲鏡像加速器,該字首是阿裡雲鏡像位址。該字首可以忽略。
Linux中,Docker 主機本地鏡像倉庫通常位于 /var/lib/docker/中。
[[email protected] ~]# ll /var/lib/docker/
總用量 0
drwx------ 2 root root 24 9月 6 15:49 builder
drwx--x--x 4 root root 92 9月 6 15:49 buildkit
drwx------ 2 root root 6 9月 6 15:49 containers
drwx------ 3 root root 22 9月 6 15:49 image
drwxr-x--- 3 root root 19 9月 6 15:49 network
drwx------ 3 root root 40 9月 6 17:23 overlay2
drwx------ 4 root root 32 9月 6 15:49 plugins
drwx------ 2 root root 6 9月 6 17:23 runtimes
drwx------ 2 root root 6 9月 6 15:49 swarm
drwx------ 2 root root 6 9月 6 17:23 tmp
drwx------ 2 root root 6 9月 6 15:49 trust
drwx------ 2 root root 25 9月 6 15:49 volumes
1、拉去 Redis鏡像
預設 latest:
[[email protected] ~]# docker image pull redis
Using default tag: latest
......
指定 tag(6.0.5):
[[email protected] ~]# docker pull redis:6.0.5
6.0.5: Pulling from library/redis
......
2、鏡像檔案的結構
下載下傳下來的鏡像檔案,是以層的結構組成的,目的是為了共享。
不同的鏡像,如果有相同的部分層檔案,他們不同的鏡像之間會共享相同的層,隻需要下載下傳和儲存不同的層就可以了,這樣就節省了大量的存儲空間。
三、檢視鏡像資訊
1、列出本地鏡像 -- docker images 指令
使用docker images 指令可以列出本地主機上已有鏡像的基本資訊。
基本文法:docker images [OPTIONS] [REPOSITORY[:TAG]]
OPTIONS說明:
- -a或--all=“true | false” :列出本地所有的鏡像(含中間映像層/臨時檔案,預設情況下,過濾掉中間映像層),預設為否;
- --digests=“true | false :顯示鏡像的數字摘要資訊,預設為否,不顯示;
- -f或--filter :顯示滿足條件的鏡像;
- --no-trunc="true | false” :顯示完整的鏡像資訊,預設是false,設為true顯示完整資訊,比如IMAGE ID;
- -q :隻顯示鏡像ID。
列出鏡像的數字摘要值:--digests=“true”
[[email protected] ~]# docker images --digests="true"
REPOSITORY TAG DIGEST IMAGE ID CREATED SIZE
redis latest sha256:933c6c01829165885ea8468d87f71127b1cb76a711311e6c63708097e92ee3d1 41de2cc0b30e 4 days ago 104MB
redis 6.0.5 sha256:800f2587bf3376cb01e6307afe599ddce9439deafbd4fb8562829da96085c9c5 235592615444 2 months ago 104MB
隻顯示沒有被使用的鏡像:-f或--filter="dangling=true"
[[email protected] ~]# docker images -f='dangling=true'
REPOSITORY TAG IMAGE ID CREATED SIZE
顯示滿足條件的鏡像:-f或--filter reference='redi*:lat*'
[[email protected] ~]# docker images --filter reference='redi*:lat*'
REPOSITORY TAG IMAGE ID CREATED SIZE
redis latest 41de2cc0b30e 4 days ago 104MB
顯示完整的鏡像資訊:--no-trunc="true"
[[email protected] ~]# docker images --no-trunc="true"
REPOSITORY TAG IMAGE ID CREATED SIZE
redis latest sha256:41de2cc0b30e9fa4fcdda7c8e458dc7619c1b8a81a3501c62e0dccd2b559fafd 4 days ago 104MB
redis 6.0.5 sha256:2355926154447ec75b25666ff5df14d1ab54f8bb4abf731be2fcb818c7a7f145 2 months ago 104MB
隻顯示鏡像ID:-q
[[email protected] ~]# docker images -q
41de2cc0b30e
235592615444
2、标記/添加鏡像标簽 --docker tag指令
為了友善在工作中使用特定鏡像,可以使用docker tag指令來為本地鏡像标記新的标簽(任意起名)。将其歸入某一倉庫。
基本文法:docker tag IMAGE[:TAG] NAME[:TAG]
比如:添加一個新的 jqredis:v6 鏡像标簽
[[email protected] ~]# docker tag redis:6.0.5 jqredis:v6
[[email protected] ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
redis latest 41de2cc0b30e 4 days ago 104MB
jqredis v6 235592615444 2 months ago 104MB
redis 6.0.5 235592615444 2 months ago 104MB
3、擷取容器/鏡像的中繼資料 -- docker inspect 指令
使用docker inspect指令可以擷取該鏡像的詳細資訊,包括制作者、适應架構、各層的數字摘要等。
基本文法:docker inspect [OPTIONS] NAME|ID [NAME|ID...]
OPTIONS說明:
- -f format:指定傳回值的模闆檔案。
- -s :顯示總的檔案大小。
- --type :為指定類型傳回JSON。
比如:擷取鏡像 redis:6.0.5 的元資訊:
[[email protected] ~]# docker inspect redis:6.0.5
四、搜尋鏡像 -- docker search 指令
使用docker search 指令可以搜尋Docker Hub官方倉庫中的鏡像。
基本文法:docker search [OPTIONS] keyword。
OPTIONS說明:
- --no-trunc :顯示完整的鏡像描述;
- -s :列出收藏數不小于指定值的鏡像。
- -f,--filter=xxxx:列出滿足條件的鏡像;
比如:搜尋官方提供的鏡像 redis關鍵字:
- docker search --filter=is-official=true redis
[[email protected] ~]# docker search --filter=is-official=true redis
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
redis Redis is an open source key-value store that… 8545 [OK]
比如:搜收藏數量大于等于90的centos的鏡像
- docker search --filter=stars=90 centos
- docker search -s 90 centos
[[email protected] ~]# docker search --filter=stars=90 centos
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
centos The official build of CentOS. 6178 [OK]
ansible/centos7-ansible Ansible on Centos7 132 [OK]
consol/centos-xfce-vnc Centos container with "headless" VNC session… 119 [OK]
jdeathe/centos-ssh OpenSSH / Supervisor / EPEL/IUS/SCL Repos - … 115 [OK]
[[email protected] ~]# docker search -s 90 centos
Flag --stars has been deprecated, use --filter=stars=3 instead
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
centos The official build of CentOS. 6178 [OK]
ansible/centos7-ansible Ansible on Centos7 132 [OK]
consol/centos-xfce-vnc Centos container with "headless" VNC session… 119 [OK]
jdeathe/centos-ssh OpenSSH / Supervisor / EPEL/IUS/SCL Repos - … 115 [OK]
五、删除和清理鏡像
1、删除鏡像 --docker rmi 指令
docker rmi : 删除本地一個或多少鏡像。
基本文法:docker rmi [OPTIONS] IMAGE [IMAGE...]
IMAGE可以是标簽或ID。
OPTIONS說明:
- -f :強制删除;
比如:删除redis鏡像:
注意:當一個鏡像有多個标志副本的時候,使用标簽(docker rmi jqredis:v6)不會真正删除鏡像,隻會删除副本标簽。建議用ID,真正删除鏡像,靠譜。
[[email protected] ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
redis latest 41de2cc0b30e 4 days ago 104MB
redis 6.0.5 235592615444 2 months ago 104MB
jqredis v6 235592615444 2 months ago 104MB
[[email protected] ~]# docker rmi -f 235592615444
......
[[email protected] ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
redis latest 41de2cc0b30e 4 days ago 104MB
2、清理鏡像 -- docker image prune 指令
使用Docker一段時間後,系統中可能會遺留一些臨時的鏡像檔案,以及一些沒有被使用的鏡像,可以通過docker image prune 指令來進行清理,最後會提示釋放的存儲空間。
OPTIONS說明:
- -a, -all:删除所有無用鏡像,不光是臨時鏡像;
- -filter filter: 隻清理符合給定過濾器的鏡像;
- -f,-force:強制删除鏡像,而不進行提示确認。
比如:會自動清理臨時的遺留鏡像檔案層:
[[email protected] ~]# docker image prune -f
Total reclaimed space: 0B
六、簡單地建立鏡像 -- docker commit 指令
建立方式有很多,開發中可使用 Dockerfile指令等建立。
這裡使用docker [container] commit 指令,在現有容器的基礎上簡單地建立新鏡像。
基本文法:docker [container] commit [OPTIONS] CONTAINERID [REPOSITORY[:TAG]]
OPTIONS說明:
- -a,--author="":作者資訊;
- -C,--change=[] :送出的時候執行Dockerfile指令,包括CMD | ENTRYPOINT |ENV 等;
- -m,--message="":送出消息;
- -p,--pause=true:送出時暫停容器運作。
比如:先拉取一個centos:7的鏡像,運作它。然後建立新鏡像,成功後傳回新建立的鏡像的ID。
[[email protected] ~]# docker pull centos:7
[[email protected] ~]# docker run -it centos:7
[[email protected] /]#
[[email protected] ~]# docker commit -a "jq" -m "簡單建立新鏡像測試" 61b8394f1d9e jqcontos:v7
sha256:e95e8427c1eb933885675dc2f6bf4a33bf0dd6425ddd579d797499f404753987
[[email protected] ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
jqcontos v7 e95e8427c1eb 10 seconds ago 203MB
redis latest 41de2cc0b30e 4 days ago 104MB
centos 7 7e6257c9f8d8 3 weeks ago 203MB
七、導出和載入鏡像
1、導出鏡像 -- docker save指令
docker [image] save指令:将指定鏡像儲存成 tar 歸檔檔案。這個本地檔案可以分享給他人使用。
基本文法:docker save [OPTIONS] IMAGE [IMAGE...]
OPTIONS 說明:
- -o :輸出到的檔案。
比如:導出本地的 jqcontos:v7鏡像到本地檔案,檔案名(自定義)為jqcontosv7.tar,這個檔案就是導出的鏡像檔案了。
[[email protected] ~]# docker save -o /root/abc/jqcontosv7.tar jqcontos:v7
[[email protected] ~]# ls /root/abc/ | grep jq
jqcontosv7.tar
2、載入鏡像 -- docker [image] load 指令
docker [image] load 指令:将導出的 tar歸檔檔案載入/導入到本地鏡像庫。
基本文法:docker load [OPTIONS]
OPTIONS 說明:
- --input , -i : 指定導入的檔案,代替 STDIN。
比如:将jqcontosv7.tar導人鏡像及其相關的中繼資料資訊(包括标簽等)到本地鏡像清單。先删除之前存在的 jqcontos:v7鏡像。
輸入:docker load -i /root/abc/jqcontosv7.tar 或者 docker load < /root/abc/jqcontosv7.tar
[[email protected] ~]# docker rmi jqcontos:v7
Untagged: jqcontos:v7
Deleted: sha256:e95e8427c1eb933885675dc2f6bf4a33bf0dd6425ddd579d797499f404753987
[[email protected] ~]# docker load -i /root/abc/jqcontosv7.tar
Loaded image: jqcontos:v7
[[email protected] ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
jqcontos v7 e95e8427c1eb 21 minutes ago 203MB
redis latest 41de2cc0b30e 4 days ago 104MB
centos 7 7e6257c9f8d8 3 weeks ago 203MB
至此,Docker在容器中導出鏡像,鏡像載入到本地鏡像庫,擷取鏡像等基本操作的過程與思想有所了解。
—— Stay Hungry. Stay Foolish. 求知若饑,虛心若愚。