建構 Docker時要知道怎麼運用Network。
你問的「運用 Docker 建構 Network 應用」很有意思 🚀。我幫你拆解一下思路,然後給一個範例實作,讓你可以快速上手:
1. Docker 與網路 (Networking) 基本概念
在 Docker 裡,每個容器(container)都是獨立的 process,有自己的 網路介面 (network namespace)。常見的 Docker 網路模式有:
-
bridge (預設):容器透過 Docker 的虛擬網卡互相連線,對外可以 NAT。
-
host:容器直接使用主機的網路介面。
-
none:完全隔離,沒有網路。
-
自定義網路 (user-defined bridge):可以用名字解析 (DNS),容器彼此直接用名稱連線,非常適合應用。
2. 建構一個簡單的 Network 應用
假設我們要做一個 Web + Database 的應用(例如 Nginx + MySQL),容器之間透過 Docker 網路互通。
建立自定義網路
docker network create myapp-network
啟動 MySQL 容器
docker run -d \
--name mydb \
--network myapp-network \
-e MYSQL_ROOT_PASSWORD=rootpw \
-e MYSQL_DATABASE=myappdb \
mysql:8.0
啟動 Web (Nginx + App) 容器
假設有個應用程式容器(例如 Node.js 或 Rails),可以直接用名字 mydb
連線資料庫:
docker run -d \
--name myweb \
--network myapp-network \
-p 8080:80 \
my-web-image
這時候,myweb
容器裡的應用程式只要用 mysql://root:rootpw@mydb:3306/myappdb
就能連到資料庫。
3. 使用 Docker Compose (更方便)
建立一個 docker-compose.yml
:
version: "3.9"
services:
db:
image: mysql:8.0
container_name: mydb
environment:
MYSQL_ROOT_PASSWORD: rootpw
MYSQL_DATABASE: myappdb
networks:
- myapp-network
web:
build: ./web # 假設你的 Web app Dockerfile 在 ./web
container_name: myweb
ports:
- "8080:80"
depends_on:
- db
networks:
- myapp-network
networks:
myapp-network:
driver: bridge
然後執行:
docker compose up -d
這樣一來,web
和 db
就會在同一個 Docker 網路裡互相連通。
4. 延伸應用
-
可以增加 Redis、API Gateway、Message Queue 等服務。
-
用 Docker Swarm / Kubernetes 讓網路拓展到多台機器。
-
加上 healthcheck 和 volume 管理更穩定。