快收藏!超強圖解Docker常見命令與實戰!
映象容器基礎
(一)基本概念
容器 = 映象 + 讀寫層
(二)映象
(三)容器
(四)執行的容器
一個執行態容器(running container)被定義為一個可讀寫的統一檔案系統加上隔離的程序空間和包含其中的程序。下面這張圖片展示了一個執行中的容器
正是檔案系統隔離技術使得Docker成為了一個前途無量的技術。一個容器中的程序可能會對檔案進行修改、刪除、建立,這些改變都將作用於可讀寫層(read-write layer)。下面這張圖展示了這個行為。
(五) 映象層(image layer)
元資料(metadata)就是關於這個層的額外資訊,它不僅能夠讓Docker獲取執行和構建時的資訊,還包括父層的層次資訊。需要注意,只讀層和讀寫層都包含元資料。
除此之外,每一層都包括了一個指向父層的指標。如果一個層沒有這個指標,說明它處於最底層。
常用命令
(一)docker create
docker create 命令為指定的映象(image)添加了一個可讀寫層,構成了一個新的容器。注意,這個容器並沒有執行
(二)docker start
Docker start命令為容器檔案系統建立了一個程序隔離空間。注意,每一個容器只能夠有一個程序隔離空間。
(三) docker run
docker start 和 docker run命令有什麼區別
從圖片可以看出,docker run 命令先是利用映象建立了一個容器,然後執行這個容器。這個命令非常的方便,並且隱藏了兩個命令的細節,但從另一方面來看,這容易讓使用者產生誤解。
(四)docker ps
docker ps 命令會列出所有執行中的容器。這隱藏了非執行態容器的存在,如果想要找出這些容器,我們需要使用下面這個命令。
(五)docker ps –a
docker ps –a命令會列出所有的容器,不管是執行的,還是停止的。
(六)docker images
docker images命令會列出了所有頂層(top-level)映象。實際上,在這裡我們沒有辦法區分一個映象和一個只讀層,所以我們提出了top-level映象。只有建立容器時使用的映象或者是直接pull下來的映象能被稱為頂層(top-level)映象,並且每一個頂層映象下面都隱藏了多個映象層。
(七)docker images –a
docker images –a命令列出了所有的映象,也可以說是列出了所有的可讀層。如果你想要檢視某一個image-id下的所有層,可以使用docker history來檢視
(八)docker stop
docker stop命令會向執行中的容器傳送一個SIGTERM的訊號,然後停止所有的程序。
(九)docker kill
docker kill 命令向所有執行在容器中的程序傳送了一個不友好的SIGKILL訊號。
(十)docker pause
docker stop和docker kill命令會發送UNIX的訊號給執行中的程序,docker pause命令則不一樣,它利用了cgroups的特性將執行中的程序空間暫停。具體的內部原理你可以在這裡找到:https://www.kernel.org/doc/Doc ... m.txt,但是這種方式的不足之處在於傳送一個SIGTSTP訊號對於程序來說不夠簡單易懂,以至於不能夠讓所有程序暫停。
(十一) docker rm
docker rm命令會移除構成容器的可讀寫層。注意,這個命令只能對非執行態容器執行。
(十二)docker commit
docker commit命令將容器的可讀寫層轉換為一個只讀層,這樣就把一個容器轉換成了不可變的映象。
(十三)docker build
docker build命令非常有趣,它會反覆的執行多個命令。
(十四)docker exec
docker exec 命令會在執行中的容器執行一個新程序。
(十五) docker inspect or
docker inspect命令會提取出容器或者映象最頂層的元資料。
(十六)docker save
docker save命令會建立一個映象的壓縮檔案,這個檔案能夠在另外一個主機的Docker上使用。和export命令不同,這個命令為每一個層都儲存了它們的元資料。這個命令只能對映象生效。
(十七)docker export
docker export命令建立一個tar檔案,並且移除了元資料和不必要的層,將多個層整合成了一個層,只儲存了當前統一視角看到的內容(譯者注:expoxt後的容器再import到Docker中,通過docker images –tree命令只能看到一個映象;而save後的映象則不同,它能夠看到這個映象的歷史映象)。
(十八)docker history
docker history命令遞迴地輸出指定映象的歷史映象。
(十九)docker prune
prune 命令用來刪除不再使用的 docker 物件。刪除所有未被 tag 標記和未被容器使用的映象:
$ docker image prune
WARNING! This will remove all dangling images.
Are you sure you want to continue? [y/N] y
```
```
刪除所有未被容器使用的映象:
$ docker image prune -a
. 檔案檔案分層
docker commit 和 docker create是對應的,上圖可以看到檔案分為多層後最後有一個可讀寫的層 刪除所有未被 tag 標記和未被容器使用的映象:
實戰
(一) Docker遷移與備份
-
我們可以通過以下命令將容器儲存為映象
-
我們可以通過以下命令將映象儲存為tar 檔案
-
首先我們先刪除掉mynginx_img映象 然後執行此命令進行恢復
docker commit mynginx mynginx_i
docker save -o mynginx.tar mynginx_i
docker load -i mynginx.tar
```
```
(二)從Dockerfile中檢視分層映象
我有一個ordersystem容器,Dockerfile檔案如下:
``` FROM csighub.tencentyun.com/medipedia/medi-saas-go:latest RUN mkdir -p /app/logs/ ADD pop-admin-server /usr/local/services/pop-admin-server/ COPY script/supervisord.ini /etc/supervisord.d/ COPY script/kick_start.sh /etc/kickStart.d/
建立存放匯入檔案的目錄
RUN mkdir -p /usr/local/services/pop-admin-server/importfile RUN mkdir -p /usr/local/services/pop-admin-server/upload
fix a protocol buffer namespace conflict
ENV GOLANG_PROTOBUF_REGISTRATION_CONFLICT warn
修改映象的顯示字符集
ENV LANG en_US.UTF-8 ```
```
```
我們檢視映象
[root@VM-0-14-centos ordersystem]# docker images -a
REPOSITORY TAG IMAGE ID CREATED SIZE
ordersystem 3.1 e1a9552f4a9a 51 minutes ago 380MB
<none> <none> 42959ee6c01b 51 minutes ago 380MB
<none> <none> 4b45c5bb3b60 51 minutes ago 380MB
<none> <none> 7de0f7950baf 51 minutes ago 380MB
<none> <none> 5eccd3fb7501 51 minutes ago 380MB
<none> <none> 516957abdce4 51 minutes ago 380MB
<none> <none> 4c72f0036ea9 51 minutes ago 380MB
```
```
這裡需要思考一下none是啥呢?
[root@VM-0-14-centos ordersystem]# docker history e1a9552f4a9a
IMAGE CREATED CREATED BY SIZE COMMENT
e1a9552f4a9a 50 minutes ago /bin/sh -c #(nop) CMD ["/etc/kickStart.d/ki… 0B
7de0f7950baf 50 minutes ago /bin/sh -c #(nop) EXPOSE 8000 0B
42959ee6c01b 50 minutes ago /bin/sh -c #(nop) ENV GO111MODULE=on CGO_EN… 0B
4b45c5bb3b60 50 minutes ago /bin/sh -c chmod +x /etc/kickStart.d/kick_st… 327B
516957abdce4 50 minutes ago /bin/sh -c #(nop) COPY file:063b1bd47099a218… 327B
4c72f0036ea9 50 minutes ago /bin/sh -c #(nop) COPY file:1edd608d8faba17f… 381B
5eccd3fb7501 50 minutes ago /bin/sh -c #(nop) ADD file:446cb8b7dbc762daa… 13.5MB
```
```
(三) 容器的可讀寫層
容器的可讀寫層就是容器是可以用exec -it 去進入容器,但是映象不行,容器可更改,映象不行
[root@VM-0-14-centos ordersystem]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES67252e999d5d mysql "docker-entrypoint.s…" 9 days ago Up 9 days 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp mysqlffcb1d91e28f ordersystem:2.2 "/etc/kickStart.d/ki…" 2 weeks ago Up 2 weeks 0.0.0.0:9020->8000/tcp, :::9020->8000/tcp ordersystem853c6e86eee6 nginx "/docker-entrypoint.…" 5 weeks ago Up 2 weeks 0.0.0.0:80->80/tcp, :::80->80/tcp mynginx[root@VM-0-14-centos ordersystem]# docker exec -it ffcb1d91e28f /bin/sh/go # lsbin src supervisord.log supervisord.pid
```
```
(四)編譯映象以及釋出
docker run :執行映象生成容器( d表示執行在後臺,-p表示繫結到指定的主機埠)
docker build -t hellogin -f Dockerfile
docker images
docker run --name=hellogin -d -p 9020:8000 hellogin
```
```
讓本地和遠端共享檔案
docker run --name=hellogin -d -p 9020:8000 hellogin
參考文件
1.10張圖帶你深入理解Docker容器和映象
2.Docker遷移與備份
3.docker prune 命令
- ChatGPT深度解析:GPT家族進化史
- 微信全文搜尋耗時降94%?我們用了這種方案
- 十問ChatGPT:一個新的時代正拉開序幕
- 對標ChatGPT,新AI助手Claude來了
- 國民應用QQ如何實現高可用的訂閱推送系統
- 一夜爆火的現象級產品ChatGPT,是AI突破還是曇花乍現?
- 元宇宙,會成為下一代網際網路的主場嗎?
- 7天DAU超億級,《羊了個羊》技術架構升級實戰
- 國民級應用:微信是如何防止崩潰的?
- 由淺入深讀透vue原始碼:diff演算法
- 3小時!開發ChatGPT微信小程式
- 祖傳程式碼重構:從25萬行到5萬行的血淚史
- H5開屏從龜速到閃電,企微是如何做到的
- AI繪畫火了!一文看懂背後技術原理
- 快收藏!超強圖解Docker常見命令與實戰!
- Cloud Studio高階玩家:強大的YAML模板
- C 20協程學習
- 打造更安全的視訊加密,雲點播版權保護實踐
- 深入淺出帶你走進Redis!
- 【技思廣益 · 騰訊技術人原創集】雙週優秀作品回顧vol.03