- docker
- 一、docker簡介
- 二、docker的基礎組成部分
- 2.1 images
- 2.1.1 分層儲存
- 2.2 container
- 2.3 repository
- 2.1 images
- 三、docker映象使用
- 3.1 映象獲取
- 3.2 映象顯示
- 3.3 映象刪除
docker
一、docker簡介
Docker 是一個開源的容器化平臺,它徹底改變了應用程式的開發、部署和執行方式。透過 Docker,開發者可以將應用程式及其所有依賴打包進一個輕量級、可移植的容器中。這些容器包含了執行應用程式所需的一切,從程式碼、執行時環境、庫到配置檔案,確保了應用在不同環境間的一致性,無論是開發者的桌面、測試伺服器還是最終的生產環境。
二、docker的基礎組成部分
- images
- container
- repository
2.1 images
Docker 映象 是一個特殊的檔案系統,除了提供容器執行時所需的程式、庫、資源、配置等檔案外,還包含了一些為執行時準備的一些配置引數(如匿名卷、環境變數、使用者等)。映象 不包含 任何動態資料,其內容在構建之後也不會被改變。
docker映象透過分層儲存的方式進行儲存。
2.1.1 分層儲存
docker image 構建是一層層的構建,每一層相對來說都是獨立。每一層構建完成後都不會在發生改變,第一層構建完成,第二層刪除第一層,事實上並不會真的刪除,相當於對第一層進行一個標記,不會使用第一層。分層儲存使得image的構建和服用都變得更加容易些。
2.2 container
container 與image的關係,image是靜態的,container是動態的。從java 物件的角度來看,image相當於 java中的類,而container相當於 例項後的物件。container可以進行刪除、停止等操作。對於container,同樣是採用了分層儲存,容器的實質是程序,但與直接在宿主執行的程序不同,容器程序執行於屬於自己的獨立的 [名稱空間 。容器擁有自己的 root 檔案系統(根目錄檔案系統)、自己的網路配置、自己的程序空間,甚至自己的使用者 ID 空間。容器內的程序是執行在一個隔離的環境裡,使用起來。對於使用container過程中產生的資料,最好是建立資料卷或者與宿主機目錄進行繫結,不要放在容器的儲存層中。
2.3 repository
就像一個image託管平臺,可以進行image上傳和下載。
三、docker映象使用
- 映象獲取
- 列出映象
- 刪除映象
3.1 映象獲取
可以從docker hub 中獲取官方製作的image
透過git pull 指令獲取image 使用 指令+ --help 可以獲得提示文件
root@lss-virtual-machine:~# docker pull --help
# 獲得提示文件
Usage: docker pull [OPTIONS] NAME[:TAG|@DIGEST]
# 這裡還可以指定 從哪一個registry[registryaddr ip:port]中獲取image,如果沒有制定,則預設是docker hub
Download an image from a registry
# 通常是從docker hub中獲取
Aliases:
docker image pull, docker pull
# 這兩個指令等價
Options:
-a, --all-tags Download all tagged images in the repository
# 獲取一個映象的各個版本,如果使用的話 可能會下載大量的image,佔用硬碟空間
--disable-content-trust Skip image verification (default true)
# 不進行安全性驗證
--platform string Set platform if server is multi-platform capable
# 制定系統的架構
-q, --quiet Suppress verbose output
# 讓輸出的日誌資訊更簡潔
---------------------------------拉去mysql image--------------------------------
root@lss-virtual-machine:~# docker pull mysql
Using default tag: latest
latest: Pulling from library/mysql
72a69066d2fe: Pull complete
93619dbc5b36: Pull complete
99da31dd6142: Pull complete
626033c43d70: Pull complete
37d5d7efb64e: Pull complete
ac563158d721: Pull complete
d2ba16033dad: Pull complete
688ba7d5c01a: Pull complete
00e060b6d11d: Pull complete
1c04857f594f: Pull complete
4d7cfa90e6ea: Pull complete
e0431212d27d: Pull complete
Digest: sha256:e9027fe4d91c0153429607251656806cc784e914937271037f7738bd5b8e7709
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest
# 從這裡也可以看出 image 是分層儲存的。
3.2 映象顯示
映象下載後可以透過docker images 命令檢視頂層映象,包括映象id、映象名、映象佔用的空間。具體的使用如下
root@lss-virtual-machine:~# docker image ls --help
Usage: docker image ls [OPTIONS] [REPOSITORY[:TAG]]
List images
Aliases:
docker image ls, docker image list, docker images
# 列舉出映象的 命令別名
Options:
-a, --all Show all images (default hides intermediate images)
# 會顯示 非頂層的image (image採用分層儲存)
--digests Show digests
# 同時會顯示摘要資訊 加密方法
-f, --filter filter Filter output based on conditions provided
--format string Format output using a custom template:
# 可以對於顯示的屬性進行格式化
'table': Print output in table format with column headers (default)
'table TEMPLATE': Print output in table format using the given Go template
'json': Print in JSON format
'TEMPLATE': Print output using the given Go template.
Refer to https://docs.docker.com/go/formatting/ for more information about formatting
output with templates
--no-trunc Don't truncate output
-q, --quiet Only show image IDs
# 只顯示image id
-----------------------------------docker images示例----------------------------------
root@lss-virtual-machine:~# docker image ls -a
REPOSITORY TAG IMAGE ID CREATED SIZE
redis latest 1a83fd5edeed 4 days ago 117MB
quay.io/minio/minio latest 49c3911c1fe9 2 weeks ago 160MB
hello-world latest d2c94e258dcb 13 months ago 13.3kB
ccr.ccs.tencentyun.com/dockerpracticesig/docker_practice vuepress 5ea504439e5d 23 months ago 46MB
mysql latest 3218b38490ce 2 years ago 516MB
nacos/nacos-server latest bdf60dc2ada3 2 years ago 1.05GB
# 分別會顯示 image_name version image_id created_time size
------------------------------------------進行格式化輸出設定-----------------------------------------
root@lss-virtual-machine:~# docker image ls --format "table {{.Repository}}\t {{.ID}}\t{{.Size}}"
REPOSITORY IMAGE ID SIZE
redis 1a83fd5edeed 117MB
quay.io/minio/minio 49c3911c1fe9 160MB
hello-world d2c94e258dcb 13.3kB
ccr.ccs.tencentyun.com/dockerpracticesig/docker_practice 5ea504439e5d 46MB
mysql 3218b38490ce 516MB
nacos/nacos-server bdf60dc2ada3 1.05GB
# table 模板語法 docker image list --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}\t{{.Size}}"
# 常用的模板欄位
#這裡是一些常用的模板欄位:
#.Repository: 映象的倉庫名
#.Tag: 映象的標籤
#.ID: 映象的短ID
#.CreatedAt: 映象建立時間
#.Size: 映象大小
#
3.3 映象刪除
關於映象刪除可以使用docker image rm 相應的用法如下
root@lss-virtual-machine:~# docker image rm --help
Usage: docker image rm [OPTIONS] IMAGE [IMAGE...]
Remove one or more images
Aliases:
docker image rm, docker image remove, docker rmi
# 命令別名
Options:
-f, --force Force removal of the image
# 強制刪除
--no-prune Do not delete untagged parents
# 不刪除 沒有打標籤的 父映象(標籤:相當於給映象起一個別名,一個映象可以有多個標籤)
映象刪除
root@lss-virtual-machine:~# docker image rm -f hello-world:latest
# 用於存在容器引用該映象 所以需要-f 強制刪除
Untagged: hello-world:latest
Untagged: hello-world@sha256:266b191e926f65542fa8daaec01a192c4d292bff79426f47300a046e1bc576fd
Deleted: sha256:d2c94e258dcb3c5ac2798d32e1249e42ef01cba4841c2234249495f87264ac5a
從刪除的日誌中可以看出,刪除一個映象需要先去除標籤,在進行刪除。這樣做的原因是當刪除了所有的tag這個時候該映象沒用了存在的意義(在docker中,是透過tag來引用和識別一個映象的),同時也會觸發delete這個動作,才可以去刪除這個映象。刪除映象可以透過 摘要資訊和image id 或者 image name