Localhost Docker 教學|容器化開發環境設定指南

Localhost Docker 教學|容器化開發環境設定指南

引言:現代開發者的必備工具

「在我的電腦上明明可以跑啊!」——這句話你一定聽過。

Docker 的出現就是為了解決這個問題。它讓你可以把應用程式和所有相依套件打包成一個「容器」,確保在任何環境都能一致運行。

本文將帶你從零開始學習 Docker,從基礎概念到在 localhost 上運行容器,再到處理常見的網路問題。

localhost-illustration-1

要點一-為什麼用 Docker 做本機開發?(優勢說明)

在學習 Docker 之前,讓我們了解它能解決什麼問題。

Docker 解決的痛點

傳統開發的問題 Docker 的解決方案
「在我電腦可以跑」 容器化確保環境一致
版本衝突(Python 2 vs 3) 每個專案用獨立容器
安裝複雜的相依套件 一個指令啟動所有服務
團隊環境不一致 共用相同的容器設定
開發環境污染系統 容器隔離,刪除即清除

Docker vs 傳統開發環境

項目 傳統方式(XAMPP 等) Docker
環境一致性 依賴個人電腦設定 完全一致
安裝複雜度 需要分別安裝各元件 一個指令搞定
切換專案 可能有版本衝突 完全隔離
團隊協作 需要文件說明環境 分享 docker-compose.yml
學習曲線 中等

什麼時候該用 Docker?

適合使用 Docker

  • 多人協作的專案
  • 需要多個服務(後端 + 資料庫 + 快取)
  • 開發和正式環境需要一致
  • 需要頻繁切換不同專案

可以先不用 Docker

  • 剛開始學習程式設計
  • 只是做簡單的靜態網頁
  • 個人練習專案

要點二-Docker 基礎概念快速入門

開始使用 Docker 前,先了解幾個核心概念。

核心概念

1. 映像檔(Image)

映像檔就像是「模板」,定義了容器要如何建立。你可以把它想像成安裝光碟。

# 下載 Node.js 映像檔
docker pull node:18

2. 容器(Container)

容器是映像檔的「執行中實例」。一個映像檔可以建立多個容器。

# 用 node 映像檔建立並執行容器
docker run node:18

3. Dockerfile

Dockerfile 是用來建立自訂映像檔的「配方」。

FROM node:18
WORKDIR /app
COPY . .
RUN npm install
CMD ["npm", "start"]

4. Docker Compose

用來定義和管理多個容器的工具。用一個 YAML 檔案描述整個應用程式。

version: '3.8'
services:
  web:
    image: nginx
  db:
    image: mysql:8.0

概念關係圖

Dockerfile → 建立 → Image → 執行 → Container
                         ↓
                   可以建立多個 Container

要點三-Docker Desktop 安裝與設定

讓我們開始安裝 Docker。

Windows 安裝

系統需求

  • Windows 10/11 64-bit
  • 啟用 WSL 2(建議)或 Hyper-V
  • 至少 4GB RAM

安裝步驟

  1. 前往 Docker Desktop 官網
  2. 下載 Windows 版本
  3. 執行安裝程式
  4. 安裝完成後重新啟動電腦
  5. 開啟 Docker Desktop

確認安裝成功

docker --version
# Docker version 24.0.x, build xxxxxxx

docker-compose --version
# Docker Compose version v2.x.x

macOS 安裝

系統需求

  • macOS 12 或更新版本
  • Apple Silicon 或 Intel 晶片

安裝步驟

  1. 前往 Docker Desktop 官網
  2. 下載 macOS 版本(選擇對應的晶片)
  3. 開啟 .dmg 檔案
  4. 將 Docker 拖曳到 Applications
  5. 開啟 Docker Desktop

Linux 安裝

# Ubuntu/Debian
sudo apt update
sudo apt install docker.io docker-compose

# 啟動 Docker
sudo systemctl start docker
sudo systemctl enable docker

# 讓當前使用者可以使用 docker(不用 sudo)
sudo usermod -aG docker $USER
localhost-illustration-2

要點四-第一個 Docker 容器:Nginx

讓我們用最簡單的方式體驗 Docker。

啟動 Nginx 容器

打開終端機,執行:

docker run -d -p 8080:80 --name my-nginx nginx

參數解釋

  • -d:在背景執行(detached mode)
  • -p 8080:80:將主機的 8080 Port 映射到容器的 80 Port
  • --name my-nginx:為容器取名
  • nginx:使用的映像檔

存取你的網站

打開瀏覽器,輸入:

http://localhost:8080

你會看到 Nginx 的歡迎頁面!

常用 Docker 指令

# 查看正在執行的容器
docker ps

# 查看所有容器(包含已停止的)
docker ps -a

# 停止容器
docker stop my-nginx

# 啟動已停止的容器
docker start my-nginx

# 刪除容器
docker rm my-nginx

# 查看容器日誌
docker logs my-nginx

# 進入容器內部
docker exec -it my-nginx /bin/bash

使用自己的網頁

建立一個 index.html

<!DOCTYPE html>
<html>
<head>
    <title>我的 Docker 網站</title>
</head>
<body>
    <h1>Hello from Docker!</h1>
</body>
</html>

用 Volume 掛載:

docker run -d -p 8080:80 \
  -v $(pwd):/usr/share/nginx/html \
  --name my-nginx nginx

現在 http://localhost:8080 會顯示你的網頁!


要點五-docker-compose 多容器環境

實際專案通常需要多個服務。docker-compose 讓你輕鬆管理它們。

範例:Node.js + MySQL + Redis

建立 docker-compose.yml

version: '3.8'

services:
  # Node.js 應用程式
  app:
    build: .
    ports:
      - "3000:3000"
    environment:
      - DB_HOST=mysql
      - REDIS_HOST=redis
    depends_on:
      - mysql
      - redis
    volumes:
      - .:/app
      - /app/node_modules

  # MySQL 資料庫
  mysql:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_DATABASE: myapp
      MYSQL_USER: user
      MYSQL_PASSWORD: password
    ports:
      - "3306:3306"
    volumes:
      - mysql_data:/var/lib/mysql

  # Redis 快取
  redis:
    image: redis:alpine
    ports:
      - "6379:6379"

volumes:
  mysql_data:

建立 Dockerfile

FROM node:18-alpine

WORKDIR /app

COPY package*.json ./
RUN npm install

COPY . .

EXPOSE 3000
CMD ["npm", "run", "dev"]

啟動所有服務

# 啟動(背景執行)
docker-compose up -d

# 查看日誌
docker-compose logs -f

# 停止所有服務
docker-compose down

# 停止並刪除 Volume
docker-compose down -v

存取各服務

服務 網址
Node.js App http://localhost:3000
MySQL localhost:3306
Redis localhost:6379
localhost-illustration-3

要點六-Docker 與 Localhost 的網路問題

使用 Docker 時,localhost 的行為和傳統開發不太一樣。這是最常讓人困惑的地方。

問題一:容器內的 localhost 不是主機的 localhost

情境:你的應用程式在容器內,想連接主機上運行的服務。

錯誤方式

// 這在容器內不會連到主機
const db = mysql.connect('localhost:3306')

正確方式

// 使用 host.docker.internal 連接主機
const db = mysql.connect('host.docker.internal:3306')

問題二:容器間的通訊

情境:你有多個容器需要互相通訊。

錯誤方式

environment:
  - DB_HOST=localhost  # 錯誤!

正確方式

environment:
  - DB_HOST=mysql  # 使用服務名稱

在 docker-compose 中,可以直接用服務名稱作為主機名稱。

問題三:Port 映射

Port 映射格式

-p 主機Port:容器Port

範例

# 主機 8080 → 容器 80
docker run -p 8080:80 nginx

# 只允許本機存取
docker run -p 127.0.0.1:8080:80 nginx

# 隨機主機 Port
docker run -p 80 nginx

問題四:0.0.0.0 vs 127.0.0.1

有些應用程式預設只監聽 127.0.0.1,在 Docker 中會導致外部無法存取。

解決方法:讓應用程式監聽 0.0.0.0

// Node.js 範例
app.listen(3000, '0.0.0.0')
# Flask 範例
app.run(host='0.0.0.0', port=5000)

🚀 想把 Docker 專案部署到雲端?

提醒:Docker 讓本機開發變簡單,但部署到雲端需要更多設定。

VibeFix 如何幫助你?

容器化應用部署:將你的 Docker 應用部署到雲端
CI/CD 流程建置:自動化部署流程
雲端架構設計:選擇最適合的雲端平台
效能最佳化:容器資源配置與調校
問題排解:網路、儲存、權限問題快速解決

💡 為什麼選擇 VibeFix?

  • Docker 專業:豐富的容器化部署經驗
  • 雲端整合:熟悉 AWS、GCP、Azure 等平台
  • 持續支援:部署後持續維護

新用戶優惠:Docker 部署服務享 8 折優惠!

👉 立即點擊了解 VibeFix 專業部署服務!


要點七-常見問題排解

使用 Docker 時常見的問題及解決方法。

問題一:Port 已被佔用

錯誤訊息Error: port is already allocated

解決方法

# 檢查佔用 Port 的程序
lsof -i :8080

# 使用其他 Port
docker run -p 8081:80 nginx

問題二:容器無法連網

症狀:容器內 apt updatenpm install 失敗

解決方法

# 檢查 Docker 網路
docker network ls

# 重啟 Docker Desktop
# 或重建網路
docker network create my-network

問題三:Volume 權限問題

症狀:容器無法讀寫掛載的目錄

Linux 解決方法

# 確認目錄權限
chmod -R 777 ./data

# 或在 docker-compose 中設定
user: "1000:1000"

問題四:映像檔太大

解決方法

  1. 使用 alpine 版本的映像檔
  2. 使用多階段建構
  3. 清理不需要的檔案
# 使用更小的基底映像檔
FROM node:18-alpine

# 多階段建構
FROM node:18 AS builder
WORKDIR /app
COPY . .
RUN npm ci && npm run build

FROM node:18-alpine
COPY --from=builder /app/dist /app

FAQ

Q1:容器內如何連到主機的 localhost?

使用 host.docker.internal 代替 localhost

Q2:docker-compose 是什麼?

docker-compose 是用來定義和管理多個 Docker 容器的工具。用一個 YAML 檔案描述所有服務。

Q3:Port 映射怎麼設定?

使用 -p 主機Port:容器Port 格式。例如 -p 8080:80 把主機的 8080 映射到容器的 80。

Q4:Docker 和虛擬機有什麼差別?

Docker 容器共用主機的核心,啟動更快、資源佔用更少。虛擬機有獨立的作業系統核心,隔離性更強但更耗資源。


要點八-進階:開發與生產環境分離

專業開發會區分開發和生產環境的設定。

建立不同的 Compose 檔案

docker-compose.yml(基礎設定):

version: '3.8'

services:
  app:
    image: myapp
    environment:
      - NODE_ENV=production

docker-compose.override.yml(開發環境):

version: '3.8'

services:
  app:
    build: .
    volumes:
      - .:/app
    environment:
      - NODE_ENV=development

docker-compose.prod.yml(生產環境):

version: '3.8'

services:
  app:
    image: myapp:latest
    restart: always

使用方式

# 開發環境(自動套用 override)
docker-compose up

# 生產環境
docker-compose -f docker-compose.yml -f docker-compose.prod.yml up

環境變數管理

使用 .env 檔案:

DB_PASSWORD=mysecretpassword
REDIS_URL=redis://redis:6379

在 docker-compose.yml 中使用:

services:
  app:
    environment:
      - DB_PASSWORD=${DB_PASSWORD}

結論:擁抱容器化開發

本文重點回顧

透過這篇教學,你學會了:

  1. Docker 的優勢:環境一致、隔離、易於分享
  2. 核心概念:Image、Container、Dockerfile、Docker Compose
  3. 基本操作:docker run、docker-compose up
  4. 網路設定:Port 映射、容器間通訊、host.docker.internal
  5. 常見問題排解:Port 佔用、權限問題、網路問題

下一步學習建議

  1. 實際專案練習:把現有專案容器化
  2. 學習 CI/CD:自動化建構和部署
  3. 探索 Kubernetes:進階的容器編排
  4. 準備上線Localhost 轉正式上線指南

相關文章

localhost-illustration-4

參考資料

  1. Docker 官方文件
  2. Docker Compose 文件
  3. Docker Hub

圖片描述清單

插圖 1:localhost-docker-hero
- 用途:文章主視覺圖
- 建議尺寸:1200 x 630 px
- 描述:主視覺圖呈現 Docker 容器化概念。畫面中央是 Docker 的鯨魚標誌,鯨魚背上載著多個貨櫃(代表容器)。旁邊有一台電腦顯示 localhost:8080。背景有雲朵元素,暗示容器可以在任何地方運行。整體使用 Docker 的藍色品牌色,風格現代科技感。
- Slug:localhost-docker-hero

插圖 2:localhost-docker-install
- 用途:Docker Desktop 安裝確認
- 建議尺寸:1000 x 500 px
- 描述:Docker Desktop 應用程式的截圖。顯示 Docker Desktop 的主介面,左側選單、中央的容器列表區域、右上角的設定按鈕。狀態列顯示 Docker 正在運行(綠色圖示)。旁邊附上終端機視窗,顯示 docker --version 的成功輸出。整體風格清晰,標註「確認安裝成功」。
- Slug:localhost-docker-install

插圖 3:localhost-docker-compose
- 用途:多容器架構說明
- 建議尺寸:1000 x 600 px
- 描述:架構圖呈現 docker-compose 管理的多容器環境。中央是 Docker Compose 區塊,內含三個容器方塊:Node.js(Port 3000)、MySQL(Port 3306)、Redis(Port 6379)。容器間用虛線連接表示內部通訊。左側是主機,箭頭指向各 Port 表示映射關係。底部有 Volume 圖示連接到 MySQL。整體風格清晰,展示容器間的關係。
- Slug:localhost-docker-compose

插圖 4:localhost-docker-learning-path
- 用途:Docker 學習路徑
- 建議尺寸:1000 x 600 px
- 描述:學習路線圖以階梯形式呈現 Docker 學習路徑。從下到上分為四個階段:1. 基礎(Docker 概念、基本指令)2. 進階(docker-compose、Dockerfile)3. 網路(容器通訊、Port 映射)4. 部署(CI/CD、雲端部署)。每個階段配有簡單圖示,當前文章涵蓋的範圍用顏色標示。整體風格清晰,幫助讀者規劃學習。
- Slug:localhost-docker-learning-path

分享文章:
V

VibeFix

專門解決 AI Vibe Coding 後的疑難雜症,讓你的專案順利上線。

這篇文章有幫到你嗎?

如果還有問題,讓我們直接幫你解決!

聯繫我們