2023 iT邦鐵人賽 Day 30 - Docker 指令彙整
前言
終於到了鐵人賽的終點了,我們從基本 Server 帶入到 Docker,接著進入 Docker 的世界,了解了容器、連接阜、網絡、Volume 掛載、生命週期、映像檔、映像層、Dockerfile、Docker Compose、容器管理。
透過三十天,介紹了一大輪,大家應該都認識了整個 Docker 的應用,之後如果想要加強哪個部分,都可以知道要從哪個部分下手。
今天最後一天,我們就彙整一下所有指令。
指令彙整
容器
對容器進行故障與問題追蹤時:
docker container top 容器id
: 查看容器內的進程(process)信息,列出在特定容器中運行的所有進程及其相關信息,如 PID(進程 ID)、USER(進程的擁有者)、TIME(進程運行的時間)、COMMAND(啟動進程的命令)等。
docker container logs 容器id
: 查看日誌檔內容,包含應用程式執行結果或HTTP request的請求過程與結果。
docker container inspect 容器id
: 查看容器的詳細完整資訊。
docker container stats
: 查看所有執行中的容器,正在使用多少系統資源,如 CPU、記憶體、網路流量和磁碟空間。
docker container stats 容器id
:也可查看指定容器。
查詢容器們:
docker container ls
: 查看所有運行中的容器
docker container ls --all
: 查看所有容器,包含運行中與停止的容器
當容器內的應用程式結束後,容器便會進入退出狀態 ( exited ),也就是停止運作。
刪除容器:
docker container rm --force $(docker container ls --all --quiet)
容器必須先停止 stop 後才能刪除。
--force
、-f
: 強制刪除執行中容器,不必先 stop。$( )
: 先執行括號內的指令,再執行$()前面的指令,並將括號內的執行結果作為前面指令收受對象。--quiet
、-q
: 只顯示必要資訊,如容器 id,不會顯示其他資訊。1
2
3
4
5
6
7
8
9
10
11docker container ls --all:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5f19765b2e57 diamol/ch02-hello-diamol-web "httpd-foreground" 6 minutes ago Up 6 minutes 0.0.0.0:8088->80/tcp ecstatic_perlman
40688178a6d9 diamol/ch02-hello-diamol-web "httpd-foreground" 23 hours ago Exited (255) 12 minutes ago 0.0.0.0:8088->80/tcp exciting_solomon
f327ecf33824 diamol/base "/bin/sh" 23 hours ago Exited (0) 23 hours ago quirky_meitner
docker container ls --all --quiet:
5f19765b2e57
40688178a6d9
f327ecf33824
用容器建立映像檔:
docker commit 容器名稱 映像檔名稱
: 以該容器現存狀態,建立成一個映像檔。
與容器互動
docker container exec -it 容器名稱 sh
options:
--publish 8088:80
、-p 8088:80
: 配發實體的網路連接阜( 8088 )給容器使用( 80 )。
讓 docker 監聽實體電腦連接阜 8088 的網路流量,將 8088 的訊息轉送到容器的連接阜 80
--detach
、-d
: 在背景啟動容器並顯示容器ID。
-filter
、 -f
: 尋找符合條件的容器
可用
name
、network
、status
當查詢條件
-v
、 --volume
: 指定 volume 掛載到容器的目錄資料夾
映像檔
docker image ls
: 查看所有的映像檔。
docker image ls 'w*'
: 查看名字開頭為 w 的映像檔。
docker image history 映像檔名稱
: 查看映像檔的中繼資料( metadata )與建置紀錄。
也就是查看映像檔的每個映像層與建置每個映像層所使用的命令。
docker image ls --filter reference=映像檔名稱
: 查詢映像檔列表中,符合某個映像檔名稱的映像檔
docker image ls --filter reference='*/映像檔名稱'
volume
docker volume create volume_name
: 建立 volume,名稱為 volume_name
docker volume ls
: 查看 volume 清單
docker volume prune
: 刪除所有未被使用的 volume
-v
或 --volume
: 啟動容器時,指定 volume
docker container run --name practice -p 8080:80 -v volume_name:'/data'
啟動容器時,將 volume_name 掛載到容器的/data
約定掛載
docker container run --mount type=bind,source="$(pwd)/new",target="/init" d iamol/ch06-bind-mount
--mount type=bind,source="$(pwd)/new",target="/init"
ps. type、source、target 與逗號間不能有空格
檔案系統
- 每個容器都有各自的檔案系統
- 檔案系統由可寫層、約定掛載層、volume層、映像層整合而成
Docker Compose
docker-compose up
: 建立並啟動所有容器
docker-compose stop
: 停止所有容器,被停止的容器不會佔用 CUP,但在檔案系統內仍是存在的
docker-compose start
:重啟所有系列容器
docker-compose down
:停止並刪除所有容器、未設定 external
的 volume 跟 net
docker-compose ls
docker-compose ps
: 列出 compose 中所有執行中的容器
options
--scale
: 擴展服務容器的數量 ex: docker-compose up --scale service_name=5
總結
很高興今年也參加並完賽了鐵人賽,去年寫了 Rails 的測試,今年寫了 Docker,每年能大量學習到不同的技術。先許願明年希望能寫個資料庫相關的主題。