# docker ps
只顯示正在執行的容器
docker ps
顯示所有容器(包含執行中、已停止、已退出)
docker ps -a
# or
docker ps --all
顯示最近建立的容器
docker ps -l
顯示最近建立的 N 個容器(例:docker ps -n 3)
docker ps -n <數字>
# 管理 Docker data 相關指令
查看目前有哪些 volume,很常會有需要清理一些沒在使用的、或只是暫時創建來測試用的一些 data,這些 data = docker 的 volume
# 列出目前有哪些 volume
docker volume ls
DRIVER VOLUME NAME
local a88a3848877ac88f427aa5cefe20fc3b154f9fc6c8f8a91233ec33ec83ea497f
local f91f8d6e293f00bd830e5773f6ecbb14c0e2a8898dfbe39a7db06df2dff20f58
local xxx_my_logs
local xxx_postgres_data
local xxx_redis_data
local yyy_backend_media
local yyy_backend_static
local yyy_postgres_data
# 刪除指定 volume
比如說 xxx_postgres_data 這個 postgres 的 data 是舊的,有新的 db schema 要重新建一個新的 volume,這時候就可以執行
docker volume rm <VOLUME NAME>
一次刪除多個 volumes
docker volume rm volume1 volume2 volume3
# 搭配 Container 移除
如果 container 移除時想一併刪除匿名的 volumes:
docker rm -v <CONTAINER ID or NAME>
# 清除沒被任何 container 使用的 volume
docker volume prune
# 根據 docker image build 開發 vs 正式環境
預設會檢查 image 是否存在,如果不存在就會自動 build(等於 up --build)。如果 image 已存在,不會重新 build,直接用現成的 image 起 container
docker compose up
明確要求重新 build image,根據 Dockerfile 與 context,不會啟動容器,只是建好新的 image。常搭配 docker compose up -d 一起用:
比如剛剛修改了 Dockerfile / 套件依賴,要確保 image 更新
docker compose build # 只做 build,不會啟動容器
docker compose build --no-cache # 確保不使用快取
docker compose up -d --build # build 完後啟動容器並在背景執行
# docker compose up --build VS docker compose build 差異
| 指令 | 是否會建新 image | 是否啟動 container | 適合環境 |
|---|---|---|---|
docker compose up |
如果 image 不存在才建 | ✅ | 開發快速啟動 |
docker compose up -d |
如果 image 不存在才建 | ✅ | 開發快速啟動(背景執行) |
docker compose up --build |
強制重建 | ✅ | 開發測試,確保 image 更新 |
docker compose build |
✅ 強制重建 | ❌ | Production 準備、CI/CD pipeline |
# 清除 images
# 清除「未被任何容器使用」的鏡像 (dangling images)
docker system prune
# -a = all,不只 dangling,會清掉所有目前沒被用到的 image
docker system prune -a
# logs 查看該 container 輸出的 log
# 查看指定容器的全部日誌
docker logs <container_name_or_id>
# 查看容器即時日誌(持續輸出)
docker logs -f <container_name_or_id>
# 查看最新的 100 行日誌
docker logs --tail 100 <container_name_or_id>
# 查看日誌並附帶時間戳
docker logs -t <container_name_or_id>
# 實時查看,並只輸出最新 50 行
docker logs -f --tail 50 <container_name_or_id>
# exec 進入 docker container 內
這指令還蠻常用的,要完全搞清楚 docker 的運作原理跟模式,就很常會親自進入 container 裡面查看實際情況,看 container 內的 logs、跑了什麼進程、檔案系統長怎樣、環境變數、網路設定如何..等等。
參數說明:
-i:互動式(interactive),保持標準輸入(stdin)開啟-t:分配一個虛擬終端(tty),讓你可以像在終端機一樣操作
# 進入容器的互動式終端
docker exec -it <container_name_or_id> bash
