如何使用 Docker Compose 部署 Nginx
在現(xiàn)代應用部署中,容器編排工具已成為不可或缺的一部分。Docker Compose 作為 Docker 官方的單機編排工具,通過聲明式的 YAML 文件簡化了多容器應用的管理。
一、Docker Compose 核心優(yōu)勢
1.1 與傳統(tǒng) Docker run 的對比
Docker Compose 相比直接使用docker run命令具有顯著優(yōu)勢:
- 聲明式配置:所有服務參數(shù)集中定義在 docker-compose.yml 文件中
- 依賴管理:自動處理服務啟動順序和網(wǎng)絡連接
- 環(huán)境隔離:支持為不同環(huán)境(開發(fā)/測試/生產(chǎn))定義獨立配置
- 一鍵操作:簡化多容器應用的啟動、停止和重建流程
1.2 典型應用場景
- 開發(fā)環(huán)境快速搭建
- 微服務架構本地測試
- CI/CD 流水線中的集成測試
- 中小規(guī)模生產(chǎn)部署
二、環(huán)境準備與安裝
2.1 Docker Compose 安裝
在 Linux 系統(tǒng)上安裝最新版本:
sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose
驗證安裝:
docker-compose --version # 輸出應類似:Docker Compose version v2.20.3
2.2 項目目錄結構
推薦的標準目錄布局:
nginx-project/
├── docker-compose.yml
├── config/
│ ├── nginx.conf
│ └── conf.d/
│ └── app.conf
├── html/
│ └── index.html
└── logs/
├── access.log
└── error.log三、基礎部署實戰(zhàn)
3.1 最小化 docker-compose.yml
version: "3.8"
services:
web:
image: nginx:1.23-alpine
ports:
- "80:80"
volumes:
- ./html:/usr/share/nginx/html
restart: unless-stopped啟動服務:
docker-compose up -d
3.2 完整功能配置示例
version: "3.8"
services:
nginx:
image: nginx:1.23-alpine
container_name: production_nginx
ports:
- "80:80"
- "443:443"
volumes:
- ./config/nginx.conf:/etc/nginx/nginx.conf:ro
- ./config/conf.d:/etc/nginx/conf.d
- ./html:/usr/share/nginx/html
- ./logs:/var/log/nginx
- ./certs:/etc/ssl/certs
environment:
- TZ=Asia/Shanghai
- NGINX_ENVSUBST_OUTPUT_DIR=/etc/nginx/conf.d
networks:
- frontend
deploy:
resources:
limits:
cpus: "1.5"
memory: 512M
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost"]
interval: 30s
timeout: 3s
retries: 3
networks:
frontend:
driver: bridge
attachable: true四、高級配置技巧
4.1 多環(huán)境配置管理
使用 extends 和多個 compose 文件實現(xiàn)環(huán)境差異化:
base-compose.yml:
services:
nginx:
image: nginx:${NGINX_VERSION:-1.23-alpine}
volumes:
- ${CONFIG_PATH:-./config}:/etc/nginxdocker-compose.prod.yml:
version: "3.8"
services:
nginx:
extends:
file: base-compose.yml
service: nginx
environment:
- NGINX_ENV=production
deploy:
replicas: 3啟動生產(chǎn)環(huán)境:
docker-compose -f base-compose.yml -f docker-compose.prod.yml up -d
4.2 負載均衡配置
部署 Nginx+PHP-FPM 集群示例:
services:
nginx:
image: nginx:1.23-alpine
depends_on:
- php
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
php:
image: php:8.2-fpm
deploy:
replicas: 3
volumes:
- ./php:/var/www/html
redis:
image: redis:7-alpine4.3 動態(tài)配置生成
結合 envsubst 實現(xiàn)模板化配置:
services:
nginx:
environment:
- BACKEND_SERVER=app:8080
volumes:
- ./templates/upstream.conf.template:/etc/nginx/templates/upstream.conf.template模板文件示例:
upstream backend {
server ${BACKEND_SERVER};
}五、安全加固方案
5.1 非 root 用戶運行
services:
nginx:
user: "1000:1000"
cap_drop:
- ALL
cap_add:
- NET_BIND_SERVICE5.2 網(wǎng)絡安全隔離
networks:
frontend:
internal: false
backend:
internal: true
services:
nginx:
networks:
- frontend
- backend
database:
networks:
- backend5.3 鏡像簽名驗證
services:
nginx:
image: nginx@sha256:abc123...
platform: linux/amd64六、生產(chǎn)環(huán)境最佳實踐
6.1 日志管理方案
services:
nginx:
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
compress: "true"6.2 監(jiān)控集成
Prometheus 監(jiān)控配置示例:
services:
nginx:
labels:
- "prometheus.scrape=true"
- "prometheus.port=9113"
volumes:
- ./nginx-prometheus.conf:/etc/nginx/conf.d/prometheus.conf
prometheus:
image: prom/prometheus
ports:
- "9090:9090"6.3 藍綠部署實現(xiàn)
services:
nginx:
deploy:
update_config:
parallelism: 2
delay: 10s
order: start-first
healthcheck:
test: ["CMD-SHELL", "curl -sf http://localhost/health || exit 1"]七、故障排查與維護
7.1 常用診斷命令
查看服務狀態(tài):
docker-compose ps docker-compose top
實時日志監(jiān)控:
docker-compose logs -f --tail=100
進入容器調試:
docker-compose exec nginx sh
7.2 配置驗證流程
# 檢查語法 docker-compose config # 試運行 docker-compose up --dry-run # 重建服務 docker-compose up -d --force-recreate
7.3 版本升級策略
- 備份現(xiàn)有配置和數(shù)據(jù)
- 修改 compose 文件中的鏡像版本
- 分階段滾動更新:
docker-compose pull docker-compose up -d --no-deps nginx
八、性能優(yōu)化建議
8.1 資源限制配置
services:
nginx:
deploy:
resources:
limits:
cpus: "2"
memory: 1G
reservations:
memory: 512M8.2 靜態(tài)資源緩存
優(yōu)化后的 Nginx 配置:
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
expires 1y;
add_header Cache-Control "public";
access_log off;
}8.3 連接參數(shù)調優(yōu)
environment: - NGINX_WORKER_PROCESSES=auto - NGINX_WORKER_CONNECTIONS=4096 - NGINX_KEEPALIVE_TIMEOUT=65
到此這篇關于如何使用 Docker Compose 部署 Nginx的文章就介紹到這了,更多相關Docker Compose 部署 Nginx內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
詳解docker中使用systemctl啟動服務報錯的解決辦法
這篇文章主要介紹了詳解docker中使用systemctl啟動服務報錯的解決辦法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-08-08
docker部署rustdesk遠程控制服務器的實現(xiàn)
RustDesk是一款體驗優(yōu)秀的遠程控制軟件,本文主要介紹了docker部署rustdesk遠程控制服務器的實現(xiàn),具有一定的參考價值,感興趣的可以了2024-05-05

