VPS 安裝 Docker 教學:容器化應用部署與管理

從 Linux VPS 安裝 Docker Engine 到 Compose V2 部署、權限管理、Volume 資料持久化與日誌管理,幫你打好容器部署的起點並建立正確習慣。

VPSDocker容器docker-compose教學容器化部署管理Docker ComposeVolume日誌管理安全性Docker Hub映像檔

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 塞滿。
  • latest tag 部署正式環境,某天更新後突然壞掉。

如果你要往下一步走

安裝完成後,可以直接接著看 Nginx 與 PHP 教學 搭建 Web 環境,或參考 自動備份教學 為容器資料做備份。如果你準備開始自己架服務,可以直接對照侃瑞的 VPS 方案與價格 選環境。

需要主機來實作?

侃瑞科技提供 cPanel 虛擬主機與 VPS,教學裡的操作開箱即用。

查看方案 →
LINE 諮詢