一個用來練習 Docker 基本操作的小專案。每個人建立自己的個人詳細介紹頁面,並在首頁加上自己的連結卡片。
核心目標:練習 Docker 操作、練習 Docker Compose 操作、運用 Dockerfile 製作 Image
git clone git@github.com:OpenMCL/mcl-profiles-docker.git
cd mcl-profiles-dockercurl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.shNote
幾個補充提醒:
- 裝完後預設只有 root 能跑 Docker,如果你想讓一般使用者也能用,要加進
docker群組:加上sudo groupadd docker sudo usermod -aG docker $USER newgrp dockernewgrp docker可以讓群組設定在當前視窗立即生效,或是重新登入也會生效。 - 這個腳本適合開發/測試環境快速部署。Docker 官方自己也說,正式生產環境建議用手動安裝步驟,這樣你對裝了什麼有更明確的掌控。
- 如果之後需要確認版本:
docker --version docker compose version
在專案根目錄下建立一個名為 Dockerfile 的檔案(注意拼字且無副檔名),內容如下:
# 使用 Nginx 最輕量的版本作為地基
FROM nginx:alpine
# 將本地的網頁檔案搬進 Nginx 的預設路徑
COPY . /usr/share/nginx/html
# 聲明服務埠號為 80
EXPOSE 80# -t 代表標記名稱,最後的「.」代表當前目錄
docker build -t mcl-docker-image:v1 .
# 顯示現在有什麼image
docker images# -d: 背景執行, --rm: 停止後自動刪除容器, -p: 電腦 8080 對接容器 80
docker run -d --rm -p 8080:80 --name docker-web mcl-docker-image:v1在瀏覽器輸入:http://<你的 VM IP>:8080
以下是幾個常見的 Docker 指令:
- 啟動容器:
docker run加上 Image 名稱來啟動一個新的容器。 - 查看容器:
docker ps查看正在運行的容器,加上-a參數可以看到所有容器(包括已停止的)。 - 停止容器:
docker stop停止運行中的容器。 - 重啟容器:
docker restart重新啟動容器。 - 刪除容器:
docker rm刪除已停止的容器。 - 進入容器:
docker exec -it進入一個正在運行的容器中進行操作。 - 查看日誌:
docker logs加上容器 ID 或名稱,可以查看容器的運行日誌,對於 Debug 非常有幫助。
在專案根目錄下建立一個名為 docker-compose.yml 的檔案(注意拼字),內容如下:
version: '3.8'
services:
web:
image: mcl-docker-image:v1
container_name: docker-compose-web
ports:
- "8081:80"
restart: alwaysdocker-compose up -d在瀏覽器輸入:http://<你的 VM IP>:8081
以下是幾個常見的 Docker Compose 指令:
- 一鍵啟動:
docker compose up -d在背景執行所有服務。 - 查看狀態:
docker compose ps列出目前專案相關的容器狀態。 - 停止並移除:
docker compose down停止並移除所有相關容器與網路。 - 重新啟動:
docker compose restart重啟所有服務。 - 進入容器:
docker compose exec [服務名稱] sh進入指定的服務容器中。 - 查看日誌:
docker compose logs -f即時追蹤(Follow)容器的日誌輸出。
在開發時,如果每次修改 HTML 都要重新 docker build 會非常沒效率。我們可以使用 Volume 功能,將本地的資料夾直接「掛載」到容器內,達成修改存檔,網頁立即更新的效果。
docker command:
# -v 代表掛載路徑:[本地絕對路徑]:[容器內路徑]
# $(pwd) 會自動抓取你目前所在的目錄
docker run -d --rm -p 8080:80 -v $(pwd):/usr/share/nginx/html --name docker-dev mcl-docker-image:v1docker-compose.yml 更改:
version: '3.8'
services:
web:
image: nginx:alpine
container_name: docker-compose-web
ports:
- "8081:80"
volumes:
# [本地路徑]:[容器內部的 Nginx 網頁路徑]
# 假設你的 docker-compose.yml 跟 index.html 放在同一個資料夾
- .:/usr/share/nginx/html
restart: always當我們執行 docker build 時,Docker 會將當前目錄下的所有檔案發送到 Docker Daemon。為了避免將不必要的檔案(如 .git、README.md 或本地開發工具的設定)包進 Image 中,我們可以建立一個 .dockerignore 檔案。
這可以讓 Image 體積更小,並加快 Build 的速度。
在專案根目錄建立 .dockerignore,並填入以下內容:
.git
.gitignore
README.md
Dockerfile
docker-compose.yml
大家都有 GitHub 帳號,我們可以直接將 Image 上傳到 GitHub Container Registry (GHCR)。請按照以下步驟操作:
- 登入 GHCR:
我們需要使用 GitHub 的 個人存取權杖 (PAT) 來登入:
- 至 GitHub Settings > Developer settings > Personal access tokens (classic) 產生一個 Token。
- 點擊 Generate new token (classic),Note 隨意填寫,並勾選
write:packages權限後點擊產生。 - 複製該 Token (
ghp_開頭的字串)。 - 回到終端機執行登入:
docker login ghcr.io -u <你的 GitHub 帳號> # 密碼處請貼上剛才複製的 Token
Tip
如果登入失敗,可以先執行 docker logout ghcr.io 清除舊的快取。
-
重新標記 Image (Tag): 將你的本地 Image 標記為 GHCR 的路徑。請將 tag 命名為你的名字。
# 格式:docker tag [本地 Image] ghcr.io/[帳號或組織名]/[專案名]:[你的名字] docker tag mcl-docker-image:v1 ghcr.io/openmcl/mcl-profiles-docker:<你的名字>
-
推送到 GitHub:
docker push ghcr.io/openmcl/mcl-profiles-docker:<你的名字>
Important
推送成功後,你可以在這個 GitHub Repository 的 Packages 頁面看到大家上傳的 Image!
- 查看資源佔用:
docker stats(可以看到各容器的 CPU/記憶體使用量)。 - 一鍵大掃除:
docker system prune(清理所有停止的容器、沒用的網路與未被標記的 Image,釋放硬碟空間)。
mcl-profiles-docker/
├── Dockerfile # 定義如何建立 Docker Image 的說明文件
├── docker-compose.yml # 定義與啟動 Docker 容器的設定檔
├── .dockerignore # 排除不需要包進 Image 的檔案 (選用)
├── index.html # 團隊首頁
├── styles.css # 共用樣式
├── profiles/
│ ├── template.html # 個人頁面模板
│ └── yourname.html # 個人詳細介紹頁面
├── assets/photos/ # 大頭照存放目錄
└── README.md