docker系列導讀
一文帶你讀懂什麼是docker
前言
學習Docker,我們需要掌握它的三大核心概念:鏡像
、容器
和倉庫
。
今天先帶大家學習Docker鏡像相關的基礎知識。
Docker鏡像簡介
1、什麼是鏡像?
Docker鏡像是一個只讀的模板。如果讀者之前是VM管理員,則可以把Docker鏡像理解爲VM模板,如果您是一名研發人員,可以將鏡像理解爲類
(class)。
簡單說,Docker鏡像是一個不包含系統內核
而又精簡的操作系統。
例如:一個鏡像可以包含一個基本的 ubuntu 操作系統環境,裏面僅安裝了 Nginx 應用程序。可以把它稱爲Nginx鏡像。
2、鏡像從哪裏來的?
Docker Hub
是由Docker公司負責維護的公共註冊中心,包含大量的容器鏡像,Docker工具默認
從這個公共鏡像庫下載鏡像。
鏡像管理命令
我們先列出鏡像相關的命令
1、搜索鏡像
例如,搜索mysql相關的鏡像,命令如下:
2、下載鏡像
通常情況下, 描述一個鏡像需要包括“名稱
+標籤
“信息。
比如下載Ubuntu 18.04
系統鏡像,命令如下:
若不指定標籤,則默認會選擇latest標籤。測試如下:
在這裏特別強調下,不要被
latest
的字面意思“最新的”所誤解了,它只是這個資源庫的擁有者約定這樣,沒有附加作用,更不會自動更新。舉個例子,我可以輕易把一個過時的鏡像打上latest
標籤,實驗如下:
# docker images web_repo
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
web_repo 1.0 2e9f372f03a0 44 seconds ago 2.433 MB
web_repo latest 2e9f372f03a0 44 seconds ago 2.433 MB
web_repo 0.9 4986bf8c1536 2 weeks ago 2.433 MB
# docker tag -f web_repo:0.9 web_repo:latest
# docker images web_repo
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
web_repo 1.0 2e9f372f03a0 About a minute ago 2.433 MB
web_repo 0.9 4986bf8c1536 2 weeks ago 2.433 MB
web_repo latest 4986bf8c1536 2 weeks ago 2.43
這裏帶latest標籤的鏡像與0.9版本的鏡像是一樣的,都是兩週前的版本,然而1.0的鏡像是一分鐘以前的。此時帶有latest標籤的鏡像還是最新版本嗎?
3、查看鏡像
1)使用images 命令列出本地鏡像列表
解釋列出的字段信息:
-
REPOSITORY
說明鏡像來自哪個倉庫,比如 ubuntu 表示ubuntu 系列的基礎鏡像
-
TAG
鏡像的標籤信息,人爲標識鏡像的不同版本
-
IMAGE ID
鏡像的ID,用來唯一標識鏡像,如果兩個鏡像ID相同,表示它們指向同一個鏡像,只是標籤名稱不同而已
-
CREATED
鏡像最後更新的時間
-
SIZE
鏡像大小
2)使用inspect命令查看鏡像詳細信息
上圖返回的是一個JSON格式,內容包括鏡像製作者、適應架構、各層的數字摘要等。如果只要其中一項內容時,可使用
-f
指定,例如,獲取鏡像的創建時間:
3)使用history命令查看鏡像歷史
docker pull 下載鏡像時也我們發現了
鏡像文件由多個層組成
,可以使用history子命令列出各層的創建信息。例如,查看Ubuntu:18.04鏡像的創建過程,命令如下:
注意:由於CREATED BY
部分命令過長,被自動截斷了,可使用--no-trunc
選項輸出完整命令。
4、爲鏡像添加標籤
爲ubuntu:latest鏡像添加一個新標籤:myubuntu:v1
5、刪除鏡像
1)使用標籤刪除鏡像
[root@qll251 ~]# docker rmi myubuntu:v1
Untagged: myubuntu:v1
當同一個鏡像擁有多個標籤時,docker rmi命令只是刪除該鏡像的一個標籤副本,並不影響鏡像文件。
2)使用鏡像ID刪除鏡像
docker rmi 命令後跟鏡像ID的前綴即可匹配刪除
如果出現以下情況:
仔細觀察,發現005d2078bdfa
這個鏡像id指向了兩個repository,因此無法刪除。
此時我們可以依次刪除該鏡像對應的標籤即可刪除,或者使用-f
參數強制刪除,命令如下:
3)清除鏡像
使用Docker一段時間後,系統中可能會遺留一些臨時鏡像文件,以及一些未被使用的鏡像,可以通過
docker image prune
命令進行清理。
例如, 如下命令會自動清理臨時的遺留鏡像文件層, 最後會提示釋放的存儲空間:
[root@qll251 ~]# docker image prune -f
Total reclaimed space: 1.6 GB
6、存出和載入鏡像
1、存出鏡像
例如,導出ubuntu:18.04鏡像
爲本地文件ubuntu:18.04.tar
,代碼如下:
[root@qll251 ~]# docker save -o /data/ubuntu:18.04.tar ubuntu:18.04
[root@qll251 ~]# ls /data
ubuntu:18.04.tar
- o
參數:表示導出鏡像到指定的文件中。
2、載入鏡像
可使用
docker load
將導出的tar文件再次導入到本地鏡像庫。語法格式如下:
例如,將ubuntu:18.04.tar
文件導入本地鏡像庫,代碼如下:
注意:使用
docker load
導入的鏡像將保留所有的鏡像歷史記錄和元數據信息。後續會我們會在容器章節中與docker load
做對比。
7、上傳鏡像
使用docker push
命令默認將鏡像上傳到Docker Hub官方倉庫(需要登錄)。命令格式如下:
例如,將本地的myubuntu:v1
鏡像上傳至官方倉庫。代碼如下:
1、爲 待上傳的鏡像打上標籤
[root@qll251 ~]# docker tag ubuntu:18.04 qinlulu/myubuntu:v1
2、登錄到Docker Hub(沒有賬號的需在官網註冊)
[root@qll251 ~]# docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: qinlulu
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
3、上傳鏡像
[root@qll251 ~]# docker push qinlulu/myubuntu:v1
The push refers to repository [docker.io/qinlulu/myubuntu]
28ba7458d04b: Pushed
838a37a24627: Pushed
a6ebef4a95c3: Pushed
b7f7d2967507: Pushed
v1: digest: sha256:b58746c8a89938b8c9f5b77de3b8cf1fe78210c696ab03a1442e235eea65d84f size: 1152
Docker Hub官網地址:
https://hub.docker.com
登錄後,驗證鏡像已上傳:
本章命令小結
1、搜索鏡像
docker search mysql
2、下載鏡像
docker pull ubuntu:18.04
3、列出本地鏡像列表
docker images
4、查看鏡像詳細信息
docker inspect ubuntu:18.04
5、查看鏡像歷史信息
docker history ubuntu:18.04
6、爲鏡像添加標籤
docker tag ubuntu:latest myubuntu:v1
7、刪除鏡像
docker rmi myubuntu:v1
8、清除臨時鏡像文件
docker image prune -f
9、存出鏡像
docker save -o ubuntu.tar ubuntu:18.04
10、載入鏡像
docker load -i ubuntu.tar
11、上傳鏡像
docker push qinlulu/myubuntu:v1