使用Docker?Compose部署Nginx的詳細(xì)教程
在現(xiàn)代應(yīng)用部署中,容器編排工具已成為不可或缺的一部分。Docker Compose 作為 Docker 官方的單機(jī)編排工具,通過(guò)聲明式的 YAML 文件簡(jiǎn)化了多容器應(yīng)用的管理。
一、Docker Compose 核心優(yōu)勢(shì)
1.1 與傳統(tǒng) Docker run 的對(duì)比
Docker Compose 相比直接使用docker run命令具有顯著優(yōu)勢(shì):
聲明式配置:所有服務(wù)參數(shù)集中定義在 docker-compose.yml 文件中
依賴(lài)管理:自動(dòng)處理服務(wù)啟動(dòng)順序和網(wǎng)絡(luò)連接
環(huán)境隔離:支持為不同環(huán)境(開(kāi)發(fā)/測(cè)試/生產(chǎn))定義獨(dú)立配置
一鍵操作:簡(jiǎn)化多容器應(yīng)用的啟動(dòng)、停止和重建流程
1.2 典型應(yīng)用場(chǎng)景
開(kāi)發(fā)環(huán)境快速搭建
微服務(wù)架構(gòu)本地測(cè)試
CI/CD 流水線中的集成測(cè)試
中小規(guī)模生產(chǎn)部署
二、環(huán)境準(zhǔ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
驗(yàn)證安裝:
docker-compose --version # 輸出應(yīng)類(lèi)似:Docker Compose version v2.20.3
2.2 項(xiàng)目目錄結(jié)構(gòu)
推薦的標(biāo)準(zhǔn)目錄布局:
nginx-project/ ├── docker-compose.yml ├── config/ │ ├── nginx.conf │ └── conf.d/ │ └── app.conf ├── html/ │ └── index.html └── logs/ ├── access.log └── error.log
三、基礎(chǔ)部署實(shí)戰(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
啟動(dòng)服務(wù):
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
四、高級(jí)配置技巧
4.1 多環(huán)境配置管理
使用 extends 和多個(gè) compose 文件實(shí)現(xiàn)環(huán)境差異化:
base-compose.yml:
services: nginx: image: nginx:${NGINX_VERSION:-1.23-alpine} volumes: - ${CONFIG_PATH:-./config}:/etc/nginx
docker-compose.prod.yml:
version: "3.8" services: nginx: extends: file: base-compose.yml service: nginx environment: - NGINX_ENV=production deploy: replicas: 3
啟動(dòng)生產(chǎn)環(huán)境:
docker-compose -f base-compose.yml -f docker-compose.prod.yml up -d
4.2 負(fù)載均衡配置
部署 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-alpine
4.3 動(dòng)態(tài)配置生成
結(jié)合 envsubst 實(shí)現(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 用戶(hù)運(yùn)行
services: nginx: user: "1000:1000" cap_drop: - ALL cap_add: - NET_BIND_SERVICE
5.2 網(wǎng)絡(luò)安全隔離
networks: frontend: internal: false backend: internal: true services: nginx: networks: - frontend - backend database: networks: - backend
5.3 鏡像簽名驗(yàn)證
services: nginx: image: nginx@sha256:abc123... platform: linux/amd64
六、生產(chǎn)環(huán)境最佳實(shí)踐
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 藍(lán)綠部署實(shí)現(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"]
七、故障排查與維護(hù)
7.1 常用診斷命令
查看服務(wù)狀態(tài):
docker-compose ps docker-compose top
實(shí)時(shí)日志監(jiān)控:
docker-compose logs -f --tail=100
進(jìn)入容器調(diào)試:
docker-compose exec nginx sh
7.2 配置驗(yàn)證流程
# 檢查語(yǔ)法 docker-compose config # 試運(yùn)行 docker-compose up --dry-run # 重建服務(wù) docker-compose up -d --force-recreate
7.3 版本升級(jí)策略
備份現(xiàn)有配置和數(shù)據(jù)
修改 compose 文件中的鏡像版本
分階段滾動(dòng)更新:
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: 512M
8.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ù)調(diào)優(yōu)
environment: - NGINX_WORKER_PROCESSES=auto - NGINX_WORKER_CONNECTIONS=4096 - NGINX_KEEPALIVE_TIMEOUT=65
到此這篇關(guān)于使用Docker Compose部署Nginx的詳細(xì)教程的文章就介紹到這了,更多相關(guān)Docker Compose部署Nginx內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Docker 安裝及配置鏡像加速的實(shí)現(xiàn)
這篇文章主要介紹了Docker 安裝及配置鏡像加速的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01CentOS7 docker服務(wù)無(wú)法啟動(dòng)解決方案及實(shí)現(xiàn)步驟
這篇文章主要介紹了CentOS7 docker服務(wù)無(wú)法啟動(dòng)解決方案及實(shí)現(xiàn)步驟的相關(guān)資料,這里對(duì)Docker 服務(wù)無(wú)法啟動(dòng)做了詳細(xì)的排查工作及流程,并附解決辦法,需要的朋友可以參考下2016-12-12Linux系統(tǒng)docker部署.net?core3.1的詳細(xì)步驟
這篇文章主要介紹了Linux系統(tǒng)docker部署.net?core3.1,文章演示基本的基于docker部署.netcore服務(wù),linux系統(tǒng)騰訊云ubuntu,.net?core版本3.1,需要的朋友可以參考下2022-09-09如何使用Docker恢復(fù)Mysql8備份的Data數(shù)據(jù)
這篇文章主要介紹了使用Docker恢復(fù)Mysql8備份的Data數(shù)據(jù),下面小編給大家講解下操作方法,對(duì)Docker恢復(fù)Mysql數(shù)據(jù)備份相關(guān)知識(shí)感興趣的朋友跟隨小編一起看看吧2022-11-11