騰訊雲帳號購買優惠 騰訊雲香港節點部署 Docker 應用:容器網路與伺服器配置教程
# 騰訊雲香港節點部署 Docker 應用:容器網路與伺服器配置教程
## 一、這篇教程解決什麼問題
搜尋這個標題的使用者,通常不是想了解 Docker 或雲伺服器的概念,而是已經準備在騰訊雲香港節點上線應用,遇到以下實際問題:
- 不知道香港節點該怎麼選地域與機型
- 建好雲伺服器後,Docker 容器無法從公網訪問
- 安全組已放行,服務仍然打不開
- 容器端口映射正常,但應用還是連不上
- 想同時部署多個容器,不知道應該用 bridge、host 還是自定義網路
- 擔心香港節點訪問速度、網路延遲與出網配置
- 部署後不知道如何做基礎安全加固與性能調整
這篇文章直接按照實際上線流程來寫,目標是讓你從 0 到 1 在騰訊雲香港節點完成 Docker 應用部署,並能處理常見的網路與伺服器配置問題。
---
## 二、部署前的規劃:先決定伺服器與網路方案
在控制台開始建立實例前,先把幾個決策做對,後面會省很多排錯時間。
### 1. 地域與可用區怎麼選
如果你的業務面向:
- 香港本地使用者
- 中國大陸南方訪問者
- 東南亞訪問者
- 海外業務需要較穩定國際出口
那麼騰訊雲香港節點通常是常見選擇。
操作建議:
- 地域直接選擇 **香港**
- 可用區如果沒有明確容災需求,單台部署可優先選資源較充足的可用區
- 如果後續要做雙機高可用,應把應用層與資料層分散到不同可用區
### 2. 實例配置怎麼選
Docker 本身不吃很多資源,但容器內跑的應用很吃配置,因此不要只看 Docker。
常見場景建議:
騰訊雲帳號購買優惠 - 個人測試 / 小型站點:2 核 2G,50GB SSD 起步
- 中小型 Web 應用:2 核 4G 或 4 核 8G
- Java、Node.js、多容器部署:4 核 8G 起步
- 帶 MySQL / Redis 同機部署:不建議太低,至少 4 核 8G
磁碟建議:
- 系統盤:50GB 起
- 如果有日誌、上傳檔案、容器卷資料,建議額外配置資料盤
- Docker data 目錄若預期較大,最好單獨放資料盤,避免系統盤爆滿
### 3. 作業系統怎麼選
Docker 部署優先建議 Linux。
推薦:
- Ubuntu 22.04 LTS
- Ubuntu 20.04 LTS
- CentOS Stream / Rocky Linux / AlmaLinux(若你熟悉 RHEL 系系統)
如果是新手,建議直接用 **Ubuntu 22.04**,官方源與 Docker 安裝流程相對直觀。
---
## 三、在騰訊雲控制台建立香港雲伺服器
以下以 Linux 實例為例。
### 1. 購買流程
進入騰訊雲雲伺服器建立頁面後,按以下思路填參數:
1. **計費模式**:
- 測試用可先按量計費
- 穩定運行的正式環境可考慮包年包月
2. **地域**:選擇 **中國香港**
3. **可用區**:
- 單機應用可先選預設或資源可用區
- 若你有延遲測試需求,可先建立後實測,再決定是否遷移
4. **機型**:
- 通用型即可滿足大部分 Docker 應用
- 如果是高併發 API、計算任務,再考慮更高規格
5. **鏡像**:
- Ubuntu Server 22.04 LTS
6. **系統盤**:
- SSD 雲硬碟,50GB 起
7. **公網頻寬**:
- 若要直接提供外部訪問,必須分配公網 IP
- 頻寬依站點規模選擇,起步 3Mbps~5Mbps 可測試
- 若有大量靜態資源下載,應提高頻寬或搭配 CDN
8. **登入方式**:
- 優先使用 SSH 金鑰
- 若先用密碼,也請在上線後改為金鑰登入
9. **安全組**:
- 可先建立一個專用安全組,不要直接用過於寬鬆的預設規則
### 2. 建議開放的初始安全組端口
至少放行:
騰訊雲帳號購買優惠 - 22:SSH
- 80:HTTP
- 443:HTTPS
如果你要直接訪問應用測試,也可以臨時開:
- 8080
- 3000
- 5000
- 8000
- 9000
注意:
- 測試完成後,應只保留必要端口
- 不要把 3306、6379 直接對全網開放,資料庫應優先走私網或限制來源 IP
---
## 四、登入騰訊雲香港伺服器並做初始化配置
### 1. 使用 SSH 連線
本地終端執行:
```bash
ssh ubuntu@你的公網IP
```
如果是 root 使用者映像,則改為:
騰訊雲帳號購買優惠 ```bash
ssh root@你的公網IP
```
騰訊雲帳號購買優惠 若連不上,先檢查:
- 安全組是否放行 22
- 伺服器系統防火牆是否攔截
- 公網 IP 是否正確
- 本地網路是否限制 SSH
### 2. 更新系統
Ubuntu:
```bash
sudo apt update && sudo apt -y upgrade
```
### 3. 設定時區
香港常用時區:
```bash
sudo timedatectl set-timezone Asia/Hong_Kong
```
檢查:
```bash
timedatectl
```
### 4. 建立管理使用者並禁用 root 密碼直登(選做但建議)
```bash
sudo adduser deploy
sudo usermod -aG sudo deploy
```
如果你要配置 SSH 金鑰給 deploy:
```bash
sudo mkdir -p /home/deploy/.ssh
sudo cp ~/.ssh/authorized_keys /home/deploy/.ssh/
sudo chown -R deploy:deploy /home/deploy/.ssh
sudo chmod 700 /home/deploy/.ssh
sudo chmod 600 /home/deploy/.ssh/authorized_keys
```
---
## 五、安裝 Docker 與 Docker Compose
以下以 Ubuntu 為例。
### 1. 安裝必要套件
騰訊雲帳號購買優惠 ```bash
sudo apt update
sudo apt install -y ca-certificates curl gnupg lsb-release
```
### 2. 加入 Docker 官方 GPG 金鑰與軟體源
```bash
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
```
```bash
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
```
### 3. 安裝 Docker Engine
```bash
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
```
### 4. 驗證安裝
騰訊雲帳號購買優惠 ```bash
sudo docker version
sudo docker compose version
sudo systemctl status docker
```
### 5. 允許非 root 使用 docker
```bash
sudo usermod -aG docker $USER
newgrp docker
```
驗證:
```bash
docker ps
```
---
## 六、先理解部署關鍵:騰訊雲安全組、防火牆、Docker 端口三層都要通
很多人在香港節點部署 Docker 時,容器已經啟動,但外部打不開,通常是這三層其中一層沒通:
1. **騰訊雲安全組**
2. **Linux 系統防火牆**
3. **Docker 容器端口映射**
只放行其中一個不夠。
### 1. 騰訊雲安全組檢查
確保入站規則已放行你的應用端口,例如 80、443、8080。
如果你使用 Nginx 反向代理,通常只需要:
- 22
- 80
- 443
### 2. 系統防火牆檢查
Ubuntu 常見使用 ufw。
查看狀態:
騰訊雲帳號購買優惠 ```bash
sudo ufw status
```
如果啟用了 ufw,放行端口:
```bash
sudo ufw allow 22
sudo ufw allow 80
sudo ufw allow 443
sudo ufw allow 8080
```
重新檢查:
```bash
sudo ufw status numbered
```
### 3. Docker 端口映射檢查
例如容器內應用監聽 3000,對外映射 8080:
```bash
docker run -d --name app -p 8080:3000 your-image
```
檢查:
```bash
docker ps
```
如果只看到容器啟動,但應用仍無法訪問,再執行:
```bash
docker logs app
ss -tulnp | grep 8080
```
你要確認的是:
- 容器內應用真的在 3000 監聽
- 主機的 8080 真的被 docker-proxy 或 iptables 接管
- 安全組與 ufw 都已開放 8080
---
## 七、Docker 容器網路配置:單容器與多容器的正確做法
這是本教程最重要的部分。很多部署失敗不是因為 Docker 壞掉,而是網路方式選錯。
### 1. 什麼情況用 bridge
騰訊雲帳號購買優惠 大多數情況都應先用 **bridge**,尤其是:
- 單個 Web 應用
- Nginx + App 多容器
- Node.js / Python / PHP 應用
- 需要端口映射對外提供服務
騰訊雲帳號購買優惠 啟動範例:
```bash
docker run -d \
--name webapp \
-p 80:3000 \
your-image
```
這代表:
- 容器內服務跑在 3000
- 公網請求打到伺服器 80 端口
- Docker 轉發到容器 3000
### 2. 什麼情況用 host
只有在你非常清楚需求時才考慮 `--network host`,例如:
- 需要極簡網路層
- 某些高性能、低延遲場景
- 特定服務需要直接使用主機網卡
但缺點也明顯:
- 端口衝突更直接
- 隔離性較差
- 排錯時更容易混淆主機服務與容器服務
香港節點部署一般 Web 應用,不建議上來就用 host。
### 3. 多容器應用建議使用自定義 bridge 網路
騰訊雲帳號購買優惠 例如你有:
- nginx
- app
- redis
先建立網路:
```bash
docker network create app-net
```
啟動 redis:
```bash
docker run -d \
--name redis \
--network app-net \
redis:7
```
啟動 app:
```bash
docker run -d \
--name app \
--network app-net \
-e REDIS_HOST=redis \
your-app-image
```
啟動 nginx:
```bash
docker run -d \
--name nginx \
--network app-net \
-p 80:80 \
nginx:latest
```
好處是:
- 容器之間可以直接用容器名互相訪問
- 不需要把 redis 端口暴露到公網
- 網路結構更清晰,適合正式環境
### 4. Docker Compose 實戰配置
建立 `docker-compose.yml`:
```yaml
services:
app:
image: your-app-image
container_name: app
restart: unless-stopped
expose:
- "3000"
networks:
- app-net
nginx:
image: nginx:latest
container_name: nginx
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
depends_on:
- app
networks:
- app-net
networks:
app-net:
driver: bridge
```
騰訊雲帳號購買優惠 啟動:
```bash
docker compose up -d
```
查看:
```bash
docker compose ps
docker network ls
docker network inspect app-net
```
---
## 八、香港節點上部署 Docker Web 應用的推薦架構
騰訊雲帳號購買優惠 如果你是正式環境,建議不要把應用容器直接暴露在 3000、8080 之類端口給用戶,而是採用以下方式:
### 推薦結構
- 公網訪問 → Nginx 容器(80/443)
- Nginx 反向代理 → App 容器(3000/5000 等內部端口)
- Redis / MySQL 僅內網或容器網路可訪問
這種做法有幾個實際好處:
- 外部只需開 80/443,安全組規則更簡單
- 容器升級時對外端口不變
- 可以更容易接入 HTTPS
- 多個應用可統一由 Nginx 轉發
### Nginx 反向代理範例
`nginx.conf` 可簡化為:
```nginx
events {}
http {
server {
listen 80;
server_name _;
騰訊雲帳號購買優惠 location / {
proxy_pass http://app:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
}
```
在同一 Docker 網路內,`proxy_pass http://app:3000;` 中的 `app` 就是容器名或服務名。
---
## 九、公網 IP、私網與端口開放的正確配置思路
### 1. 公網 IP 配置
如果你需要讓外部用戶直接訪問你的 Docker 應用,雲伺服器必須具備:
- 已分配公網 IP
- 已開通公網頻寬
- 安全組已放行對應端口
如果伺服器只有私網 IP,外部用戶無法直接訪問。
### 2. 私網適合什麼場景
如果你有多台騰訊雲資源,例如:
- 一台 ECS 跑應用
- 一台 MySQL 實例
- 一台 Redis 或其他後端服務
建議資料層走私網,不要把資料庫直接暴露到公網。
### 3. 端口開放原則
正式環境應遵循:
- 對外只開必要端口
- SSH 限制來源 IP 更安全
- 資料庫端口只對私網或特定來源開放
- 臨時測試端口用完即關
---
## 十、Docker 應用部署實戰:從映像到可訪問服務
以下給一個最常見的上線示例:部署一個內部監聽 3000 的 Web 應用。
### 1. 拉取映像或上傳應用
如果是你自己的映像:
```bash
docker pull your-image:latest
```
### 2. 建立應用目錄
```bash
mkdir -p ~/docker-app
cd ~/docker-app
```
### 3. 建立 Compose 文件
```yaml
services:
app:
image: your-image:latest
container_name: app
restart: unless-stopped
ports:
- "8080:3000"
environment:
- NODE_ENV=production
```
### 4. 啟動服務
```bash
docker compose up -d
```
### 5. 檢查容器狀態
```bash
docker compose ps
docker logs app --tail 100
```
### 6. 本機測試
在伺服器上測:
```bash
curl http://127.0.0.1:8080
```
如果本機可通,但外部不可通,通常是:
- 安全組沒放行 8080
- ufw 沒放行 8080
- 公網 IP 或頻寬沒配置
---
## 十一、香港節點網路優化與延遲測試建議
香港節點常被用來承接跨境流量,因此部署後最好做簡單測試,而不是只看容器有沒有跑起來。
### 1. 測試基礎網路連通
```bash
ping 你的公網IP
```
注意:有些環境禁 ICMP,不通不代表 HTTP 一定不通。
### 2. 測試端口可達性
本地可用:
騰訊雲帳號購買優惠 ```bash
curl -I http://你的公網IP
```
或:
```bash
telnet 你的公網IP 80
```
### 3. 查看伺服器監聽情況
```bash
ss -tulnp
```
重點看:
- 80
- 443
- 8080
- 你的應用端口
### 4. 檢查路由與出口
```bash
traceroute 目標IP
```
如果你發現部分地區到香港節點延遲偏高,可考慮:
- 將靜態資源接入 CDN
- 應用層使用反向代理快取
- 避免在容器中直接做大量同步外部請求
- 對資料庫與應用分層部署,不要所有服務擠在單機
---
## 十二、伺服器性能與 Docker 基礎優化
### 1. 檢查資源占用
```bash
top
free -h
df -h
docker stats
```
重點看:
騰訊雲帳號購買優惠 - 記憶體是否不足
- CPU 是否長期打滿
- 系統盤是否快滿
- 容器是否有異常飆高資源占用
### 2. 避免日誌撐爆磁碟
很多容器服務不是掛掉,而是磁碟被 Docker 日誌寫滿。
可在 `/etc/docker/daemon.json` 設定:
```json
{
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "3"
}
}
```
重啟 Docker:
```bash
sudo systemctl restart docker
```
### 3. 調整開機自啟
Docker 服務:
```bash
sudo systemctl enable docker
```
容器層建議加:
```yaml
restart: unless-stopped
```
### 4. 資料卷持久化
不要把重要資料只放在容器內部。
例如:
```yaml
services:
app:
image: your-image
volumes:
- ./data:/app/data
```
這樣容器重建後,資料仍在宿主機。
騰訊雲帳號購買優惠 ---
## 十三、常見故障排查:香港節點 Docker 應用打不開怎麼辦
下面是最常見的問題清單,按順序查最快。
### 問題 1:容器啟動了,但瀏覽器打不開
排查順序:
1. 看容器是否真的在跑
```bash
docker ps
```
2. 看日誌
```bash
docker logs 容器名 --tail 100
```
3. 看端口是否映射
```bash
docker ps
ss -tulnp | grep 8080
```
4. 在伺服器本機 curl
```bash
curl http://127.0.0.1:8080
```
5. 查安全組
6. 查 ufw
7. 查公網 IP 是否存在
騰訊雲帳號購買優惠 ### 問題 2:安全組放行了還是打不開
常見原因:
- 應用只監聽 `127.0.0.1`,沒監聽 `0.0.0.0`
- Docker 映射端口與容器實際監聽端口不一致
- 主機防火牆攔截
- Nginx 反向代理配置錯了上游地址
例如很多 Node.js 應用預設只監聽 localhost,要改成:
```bash
0.0.0.0
```
### 問題 3:容器之間無法互訪
檢查:
```bash
docker network ls
docker network inspect app-net
```
確認:
- 兩個容器是否在同一網路
- 是否使用容器名訪問
- 是否把 `localhost` 錯當成另一個容器
注意:
- 在容器裡 `localhost` 指的是容器自己,不是宿主機,也不是其他容器
### 問題 4:映像能跑,本地正常,放到騰訊雲香港節點就異常
可能原因:
- 環境變數沒帶齊
- 容器依賴外部資源,但香港節點出口訪問受限或延遲高
- 時區導致應用邏輯異常
- 系統磁碟空間不足
- DNS 解析問題
可先檢查:
```bash
env
df -h
cat /etc/resolv.conf
```
### 問題 5:80 端口被占用
查看:
```bash
sudo lsof -i :80
```
如果宿主機已安裝 nginx/apache,會和 Docker 映射衝突。
處理方式:
- 停掉宿主機服務
- 或改用其他宿主機端口
- 或把反向代理統一放在宿主機,不要再開 nginx 容器
---
## 十四、HTTPS 配置建議
如果你的香港節點要正式對外服務,建議盡快加 HTTPS。
常見做法:
- Nginx 容器終止 SSL
- 證書掛載到容器內
- 對外只開 80 與 443
如果你已經有域名:
1. 先把域名 A 記錄解析到騰訊雲香港節點公網 IP
2. 確保 80/443 已在安全組放行
3. 用 Nginx 或 Certbot 完成證書配置
如果暫時只是測試,可以先上 HTTP,等服務穩定後再加 HTTPS。
---
## 十五、備份、快照與重裝前注意事項
Docker 應用常見誤區是只備份映像,不備份資料。
真正需要備份的是:
- Compose 文件
- `.env` 環境變數
- 掛載卷資料
- Nginx 配置
- 資料庫資料
- 上傳檔案
### 1. 騰訊雲快照建議
在做以下操作前,建議先建立雲硬碟快照:
- 系統升級
- 大版本應用更新
- Docker data 目錄遷移
- 重裝系統
### 2. 匯出容器配置
騰訊雲帳號購買優惠 建議把部署檔案放 Git:
- `docker-compose.yml`
- `nginx.conf`
- `.env.example`
- 部署腳本
這樣就算重建香港節點實例,也能快速恢復。
---
## 十六、適合正式環境的部署最佳實踐
如果你希望部署完之後更穩定,建議至少做到以下幾點:
1. **只暴露 80/443,其他服務放內網或容器內網**
2. **應用使用自定義 Docker 網路,不要全部 default bridge**
3. **使用 Compose 管理,不要全靠手工 docker run**
4. **限制日誌大小,避免磁碟打滿**
5. **定期備份掛載資料與資料庫**
6. **安全組最小化開放規則**
7. **系統與 Docker 定期更新,但更新前先做快照**
8. **應用監聽地址設為 0.0.0.0,不要只綁 localhost**
9. **使用 Nginx 做反向代理與 HTTPS 終止**
10. **把資料庫與快取從公網暴露中移除**
---
## 十七、快速部署檢查清單
如果你只想快速確認部署是否完整,可按這份清單核對:
- [ ] 騰訊雲地域已選香港
- [ ] 實例已分配公網 IP
- [ ] 安全組已放行 22/80/443 或必要應用端口
- [ ] Linux 防火牆已同步放行端口
- [ ] Docker 與 Compose 已安裝成功
- [ ] 容器已正常啟動
- [ ] 應用監聽 `0.0.0.0`
- [ ] 容器端口映射正確
- [ ] 多容器已加入同一自定義網路
- [ ] Nginx 反向代理指向正確服務名
- [ ] `curl 127.0.0.1:端口` 本機測試正常
- [ ] 外部瀏覽器可正常訪問
- [ ] 日誌輪替與資料持久化已配置
- [ ] 關鍵資料已備份或建立快照
---
## 十八、結語
在騰訊雲香港節點部署 Docker 應用,真正容易出問題的不是安裝 Docker,而是 **伺服器、公網、安全組、防火牆、容器網路、端口映射** 這幾層配置沒有打通。
如果你想降低排錯成本,最穩的做法是:
- 香港節點建立 Linux 雲伺服器
- 配置公網 IP 與最小必要安全組規則
- 安裝 Docker 與 Docker Compose
- 使用自定義 bridge 網路管理多容器
- 用 Nginx 對外暴露 80/443
- 應用、Redis、MySQL 僅在內部網路互通
- 部署後用 `docker logs`、`ss -tulnp`、`curl` 分層排查
按這套流程做,大部分香港節點 Docker 部署問題都能在較短時間內定位並解決。


