範例與作業
看懂和會做是兩回事。本頁提供四份由淺入深的練習,每份都寫清楚要做什麼、參考哪一頁、做到什麼程度算完成。建議依照順序練習,前一份的成果會在下一份用到。
作業 1:把自己的程式打包成容器
參考:Dockerfile 入門、Docker Compose
要做的事:
- 挑一個自己寫過的小網站。沒有的話,可以直接用 Docker Compose 的網頁計數器。
- 寫一份
Dockerfile和.dockerignore。 - 寫一份
compose.yaml,加入一個資料庫(Redis 或 Postgres),資料存在 Volume 裡。 - 用
docker compose up -d --build啟動,確認網站可以正常使用。
完成的標準:
- 執行
docker compose down再docker compose up -d,資料還在。 - 只修改程式碼後重新建置,安裝套件的步驟顯示
CACHED。 - 執行
docker compose exec <服務名稱> whoami,顯示的不是root。
作業 2:用 Dev Containers 建立開發環境
參考:VS Code 開發流程
要做的事:
- 在作業 1 的專案加入
.devcontainer/devcontainer.json。 - 用 Reopen in Container 在容器裡打開專案。
- 在容器裡執行程式,並用瀏覽器打開。
完成的標準:
- 你的電腦上即使沒有安裝 Python(或你用的程式語言),也能在 VS Code 裡執行專案。
- 把專案交給同學,他打開後也能得到一樣的環境。
作業 3:用 Portainer 管理容器
要做的事:
- 安裝 Portainer,建立管理員帳號。
- 在 Stacks 貼上作業 1 的
compose.yaml(Image 需要先上傳到 Docker Hub,或改用現成的 Image)並部署。 - 在 Portainer 裡查看日誌、進入容器。
完成的標準:
- 能在 Portainer 看到作業 1 的所有服務都在執行。
- 不用終端機,就能重新啟動某個服務並查看它的日誌。
作業 4:建立兩台電腦的 Swarm
參考:Docker Swarm
要做的事:
- 準備兩台可以互相連線的電腦。沒有的話,可以用 Play with Docker 免費開兩台。
- 一台執行
docker swarm init,另一台用docker swarm join加入。 - 用
docker service create建立一個 4 份的 nginx 服務。 - 用
docker service update --image更新版本,觀察滾動更新的過程。
完成的標準:
-
docker service ps顯示 4 個容器分散在兩台電腦上。 - 更新版本的過程中,網站一直都能連線。
挑戰題
做完四份作業還想挑戰的話:
- 用 GitHub Actions 在每次推送時自動建置 Image,並上傳到 GitHub Container Registry(參考 DevOps 與 CI/CD)。
- 用 Docker Scout 或 Trivy 掃描你的 Image,試著把高風險漏洞降到零(參考 安全性與效能)。
- 用多階段建置讓作業 1 的 Image 變得更小,比較前後的大小。
推薦影音
Getting Started with Docker
簡述:Docker 官方的完整工作坊(約 2 小時 40 分),跟著講師一步步把一個應用程式容器化,適合在開始作業 1 之前完整跟著做一遍。(Docker 官方)
更多影片請見 影音教學。