Docker 安裝教學滿街都是,但多數只教你把套件裝上去,沒處理權限、資料持久化、網路與日後維護。這篇會把站長真的需要的起步觀念一起補齊。
你如果不想每次都只是照著別人的畫面一步一步跟著按,卻不知道自己到底改了什麼,這篇會比較適合你。重點不是讓你背流程,而是讓你下次遇到類似情況時,還知道該怎麼自己判斷。
你會學到什麼
- 完成 Docker 安裝並確認環境可正常運作。
- 知道哪些使用習慣一開始就該建立。
- 避免把 Docker 當成萬靈丹,卻忽略權限與資料管理。
- 學會 Docker Compose 實戰部署範例。
- 理解日誌管理與磁碟空間控制。
什麼情況最適合先看這篇
- 第一次自己管理 Linux 主機,想把操作做穩而不是只會貼指令的人
- 你現在正要處理「VPS 安裝 Docker」這類操作
- 你希望做完之後不只功能能用,連驗證與排錯也有概念
開始前先確認
- 先更新系統並確認磁碟空間足夠(Docker 映像檔會佔空間)。
- 決定你要用 root 還是一般帳號操作 Docker。
- 想清楚容器資料要放哪裡。
先提醒你一件事
VPS 最怕的不是不會下指令,而是你不知道指令會影響到哪個服務、哪個設定檔、哪個對外連線。
詳細教學與操作步驟
Docker 是現代伺服器運維的核心技術。本文參考 Docker 官方 Best Practice,教你如何在 VPS 上安裝最新版 Docker Engine 與 Docker Compose (V2),讓你的應用程式部署更加安全、高效且易於管理。
為什麼要遵循官方安裝路徑?
雖然 apt install docker.io 很簡單,但版本通常落後官方半年以上。遵循官方 Best Practice 透過 Docker 官方儲存庫安裝,能確保你獲得最新的安全性更新、支援最新版的 docker-compose.yml 格式,並且在未來更新系統時能自動升級。在 侃瑞科技 VPS 上,我們強烈建議使用此方式。
步驟一:清理舊版環境
為了避免衝突,先移除系統內建的舊軟體包:
sudo apt remove docker docker-engine docker.io containerd runc
步驟二:設定 Docker 官方儲存庫
一次性安裝必要工具並新增 GPG 安全金鑰與儲存庫路徑:
# 更新索引並安裝基礎工具
sudo apt update
sudo apt install ca-certificates curl gnupg -y
# 新增 GPG 金鑰
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
# 新增儲存庫
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
步驟三:安裝 Docker Engine 與 Compose V2
現在可以執行安裝了。官方推薦同時安裝 Plugin 版本的 Compose,這讓你使用 docker compose (不帶連字號) 進行管理:
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
步驟四:驗證安裝
# 確認 Docker 版本
docker --version
# 確認 Compose 版本
docker compose version
# 執行測試容器
sudo docker run hello-world
看到 Hello from Docker! 訊息就代表安裝成功。
步驟五:免 Sudo 執行 (Post-installation)
按照官方 Best Practice,你應該將目前使用者加入 docker 群組,避免每次都要輸入 sudo:
sudo usermod -aG docker $USER
# 請重新登入 SSH 以套用設定
**安全提醒:**加入 docker 群組等同於給予 root 等級的權限,因為 Docker 可以掛載任何系統目錄。在多人管理的主機上要謹慎評估。
基礎維修指令
- 檢查服務狀態:
sudo systemctl status docker - 設定開機自啟動:
sudo systemctl enable docker.service - 清理不再使用的資源:
docker system prune -a(釋放 VPS 硬碟空間) - 查看磁碟使用量:
docker system df
Docker Compose 實戰範例
以下是一個常見的 WordPress + MySQL 部署範例:
# 建立專案目錄
mkdir -p ~/wordpress && cd ~/wordpress
nano docker-compose.yml
寫入以下內容:
services:
db:
image: mysql:8.0
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: your_root_password
MYSQL_DATABASE: wordpress
MYSQL_USER: wpuser
MYSQL_PASSWORD: your_wp_password
volumes:
- db_data:/var/lib/mysql
wordpress:
image: wordpress:latest
restart: unless-stopped
depends_on:
- db
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_NAME: wordpress
WORDPRESS_DB_USER: wpuser
WORDPRESS_DB_PASSWORD: your_wp_password
volumes:
- wp_data:/var/www/html
volumes:
db_data:
wp_data:
啟動與管理:
# 背景啟動所有服務
docker compose up -d
# 查看運行中的容器
docker compose ps
# 查看日誌
docker compose logs -f
# 停止所有服務
docker compose down
# 停止並刪除 volume(小心:資料會消失!)
docker compose down -v
Volume 資料持久化
容器重建後資料會消失,這是新手最常踩的坑。務必把重要資料掛載到 Volume:
# 查看所有 volume
docker volume ls
# 查看 volume 實際存放位置
docker volume inspect db_data
# 備份 volume 內容
docker run --rm -v db_data:/source -v $(pwd):/backup \
alpine tar -czf /backup/db_data_backup.tar.gz -C /source .
Docker 日誌管理
Docker 容器的日誌會不斷累積,如果不控制會把磁碟塞滿。
設定全域日誌限制:
編輯 /etc/docker/daemon.json:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
重啟 Docker 套用設定:
sudo systemctl restart docker
這樣每個容器最多保留 3 個 10MB 的日誌檔案。
單一容器日誌管理:
# 查看最後 100 行日誌
docker logs --tail 100 容器名稱
# 即時追蹤日誌
docker logs -f 容器名稱
# 查看特定時間範圍的日誌
docker logs --since "2026-04-10T00:00:00" 容器名稱
Docker 網路基礎
# 列出所有 Docker 網路
docker network ls
# 建立自訂網路(讓容器之間用名稱互連)
docker network create my-app-network
# 在 compose 中指定網路
# services:
# web:
# networks:
# - my-app-network
安全性建議
- 不要用 root 跑容器: 在 Dockerfile 中加入
USER nonroot。 - 不要把所有 port 對外開放: 只開需要的 port,搭配 Nginx 反向代理。
- 定期更新映像檔:
docker compose pull && docker compose up -d。 - 掃描映像檔漏洞:
docker scout quickview 映像檔名稱。 - 不要在映像檔中放密碼: 使用環境變數或 Docker Secrets。
常見問題
Q:docker-compose 指令找不到了?
在新版中,請改用 docker compose。它不僅速度更快,且與 Docker Engine 整合度更高。如果你有舊的腳本需要兼容,可以安裝 docker-compose-switch。
Q:Docker 會影響網路速度嗎?
Docker 使用虛擬網橋,對絕大多數應用而言效能損失可以忽略不計。如果你的應用對延遲極度敏感,可以考慮使用 network_mode: host。搭配我們的 IP Transit 服務 可以進一步優化伺服器整體的連線品質。
Q:Docker 佔了太多磁碟空間怎麼辦?
# 查看 Docker 佔用多少空間
docker system df
# 清理未使用的映像檔、容器、網路
docker system prune -a
# 清理 build cache
docker builder prune -a
Q:容器啟動後馬上結束怎麼排錯?
# 查看容器退出碼
docker ps -a
# 查看最後的日誌
docker logs 容器ID
# 用互動模式進入容器除錯
docker run -it 映像檔名稱 /bin/bash
做完後怎麼確認自己真的有設對
- 執行
docker run hello-world確認 Docker 正常運作。 - 用
docker compose ps確認你的服務都在 running 狀態。 - 重新開機後,確認設了
restart: unless-stopped的容器有自動啟動。 - 用
docker system df確認磁碟使用量在合理範圍。
這一題最常踩的坑
- 把所有服務都直接跑在 root 權限下。
- 容器重建後資料消失,才發現沒掛 volume。
- 埠號全對外開放,沒有先規劃服務邊界。
- 不管日誌大小,幾個月後磁碟被 log 塞滿。
- 用
latesttag 部署正式環境,某天更新後突然壞掉。
如果你要往下一步走
安裝完成後,可以直接接著看 Nginx 與 PHP 教學 搭建 Web 環境,或參考 自動備份教學 為容器資料做備份。如果你準備開始自己架服務,可以直接對照侃瑞的 VPS 方案與價格 選環境。