最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Docker Compose實(shí)現(xiàn)一鍵部署前后端分離項目的完整指南

 更新時間:2026年02月04日 08:28:25   作者:展菲  
這篇文章主要為大家詳細(xì)介紹了Docker Compose實(shí)現(xiàn)一鍵部署前后端分離項目的相關(guān)方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下

前言

前后端分離項目(如 React + Python FastAPI)在生產(chǎn)環(huán)境往往還依賴 Nginx、MySQL 等,若逐個起容器、配網(wǎng)絡(luò)和卷,容易出錯且難復(fù)現(xiàn)。用 Docker Compose 把前端、后端、Nginx、數(shù)據(jù)庫寫進(jìn)一個 docker-compose.yml,一條命令即可拉起整套環(huán)境,便于本機(jī)聯(lián)調(diào)與服務(wù)器部署。

本文只講 Compose 的編排思路和關(guān)鍵配置,不貼完整可運(yùn)行 Demo。

項目結(jié)構(gòu)建議

app/
├── docker-compose.yml
├── nginx/
│   └── default.conf
├── frontend/
│   ├── Dockerfile
│   └── build/          # 或由 CI 構(gòu)建后放入
├── backend/
│   ├── Dockerfile
│   └── main.py
└── mysql/
    └── .gitkeep        # 占位,數(shù)據(jù)卷掛載用

  • Nginx 只做反向代理和靜態(tài)資源,配置放在 nginx/default.conf。
  • 前端可以「先本地/CI 構(gòu)建再 COPY 進(jìn)鏡像」,也可以「在鏡像里 npm build」;后者鏡像更大、構(gòu)建更慢,適合快速驗證。
  • 后端鏡像內(nèi)只放代碼和依賴,數(shù)據(jù)庫等通過環(huán)境變量注入。
  • MySQL 數(shù)據(jù)持久化到宿主機(jī)目錄或命名卷,避免容器刪除后丟數(shù)據(jù)。

docker-compose.yml 核心示例

version: "3.9"

services:
  nginx:
    image: nginx:stable
    ports:
      - "80:80"
    volumes:
      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
      - ./frontend/build:/usr/share/nginx/html:ro
    depends_on:
      - backend

  backend:
    build: ./backend
    environment:
      - DB_HOST=mysql
      - DB_PORT=3306
      - DB_USER=app
      - DB_PASSWORD=${DB_PASSWORD}
      - DB_NAME=appdb
    depends_on:
      mysql:
        condition: service_healthy

  mysql:
    image: mysql:8
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_DATABASE: appdb
      MYSQL_USER: app
      MYSQL_PASSWORD: ${DB_PASSWORD}
    volumes:
      - mysql_data:/var/lib/mysql
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
      interval: 10s
      timeout: 5s
      retries: 5

volumes:
  mysql_data:

要點(diǎn):

  • nginx:掛載自定義配置和前端靜態(tài)目錄;depends_on: backend 保證啟動順序,但不保證后端已就緒,若需要可給 backend 做 healthcheck 再依賴。
  • backendbuild: ./backend 使用 backend 目錄下的 Dockerfile 構(gòu)建;環(huán)境變量里 DB_HOST 寫服務(wù)名 mysql,Compose 會解析為 MySQL 容器 IP;depends_on.mysql.condition: service_healthy 表示等 MySQL 健康后再起 backend,避免啟動時連不上庫。
  • mysql:用 healthcheck 讓 Compose 判斷「已就緒」;敏感信息用 ${DB_PASSWORD} 等從 .env 或環(huán)境傳入,不要寫死在 yml 里。
  • volumesmysql_data 命名卷由 Docker 管理,數(shù)據(jù)持久化;也可改為 ./mysql:/var/lib/mysql 綁定宿主機(jī)目錄。

Nginx 配置要點(diǎn)

nginx/default.conf 中需包含:靜態(tài)資源 root、SPA 的 try_files、以及 /api 反向代理到 backend 服務(wù)名:

server {
    listen 80;
    root /usr/share/nginx/html;
    index index.html;
    location / {
        try_files $uri $uri/ /index.html;
    }
    location /api {
        proxy_pass http://backend:8000;
        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;
    }
}

這里 proxy_pass http://backend:8000 中的 backend 是 Compose 里后端服務(wù)的名字,端口為容器內(nèi)端口(如 8000)。若后端以 /api 為前綴,保持 location /api 與后端一致;若后端根路徑是 /,可寫 location /api/ { proxy_pass http://backend:8000/; } 做路徑剝離。

環(huán)境變量與 .env

在項目根目錄建 .env(不要提交到 Git),例如:

DB_PASSWORD=your_app_db_password
MYSQL_ROOT_PASSWORD=your_root_password

docker-compose.yml 里用 ${DB_PASSWORD} 引用,Compose 會自動讀取 .env。生產(chǎn)環(huán)境也可在宿主機(jī)設(shè)置環(huán)境變量或使用 CI 注入。

一鍵啟動與常用命令

# 構(gòu)建并后臺啟動
docker compose up -d --build

# 查看日志
docker compose logs -f backend

# 停止并刪除容器(卷保留)
docker compose down

# 停止并刪除容器與命名卷
docker compose down -v

首次部署或依賴變更后建議 docker compose up -d --build,平時只改代碼可只重建后端:docker compose up -d --build backend

前端構(gòu)建方式選擇

方式一:宿主機(jī)/CI 先構(gòu)建,Compose 只掛載 build 目錄

  • 宿主機(jī)執(zhí)行 cd frontend && npm run build,docker-compose.yml 中 nginx 掛載 ./frontend/build。
  • 優(yōu)點(diǎn):鏡像小、構(gòu)建快;缺點(diǎn):需保證宿主機(jī)有 Node 環(huán)境且 build 目錄存在。

方式二:前端也做成鏡像,在鏡像內(nèi) npm build

  • frontend/Dockerfile 多階段:先 node 鏡像 npm install && npm run build,再 nginx 鏡像只 COPY build 結(jié)果。
  • Compose 中 nginx 改用該前端鏡像,或仍用 nginx 鏡像但靜態(tài)資源從「前端鏡像」的某路徑掛載(需多一步 volume from)。
  • 更常見的做法是:前端鏡像產(chǎn)出靜態(tài)文件,Compose 里 nginx 的 build 階段 COPY 前端構(gòu)建產(chǎn)物,或使用多服務(wù)配合 volume。簡單起見,很多項目采用方式一 + 僅 backend 和 mysql 用 Compose 構(gòu)建。

按團(tuán)隊習(xí)慣選擇即可:要「一條命令包含前端構(gòu)建」就做前端鏡像;要「前端單獨(dú) CI 構(gòu)建、Compose 只負(fù)責(zé)運(yùn)行」就掛載 build 目錄。

總結(jié)

  • Compose 把 nginx、backend、mysql 放同一網(wǎng)絡(luò),nginx 反向代理到 backend,靜態(tài)資源掛載或從前端鏡像提供,mysql 用健康檢查 + depends_on 保證啟動順序。
  • 敏感信息用 .env 或環(huán)境變量,數(shù)據(jù)持久化用命名卷或綁定目錄。
  • 一鍵啟動用 docker compose up -d --build,日常排錯用 logsdown。

這樣即可實(shí)現(xiàn)前后端分離項目的一站式 Docker 部署,便于遷移與復(fù)現(xiàn)環(huán)境。

到此這篇關(guān)于Docker Compose實(shí)現(xiàn)一鍵部署前后端分離項目的完整指南的文章就介紹到這了,更多相關(guān)Docker Compose部署項目內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • docker獲取Let''s Encrypt永久免費(fèi)SSL證書的方法

    docker獲取Let''s Encrypt永久免費(fèi)SSL證書的方法

    在本篇文章里小編給大家分享了一篇關(guān)于docker獲取Let's Encrypt永久免費(fèi)SSL證書的方法,以后需要的朋友們可以參考下。
    2021-01-01
  • 淺談關(guān)于Docker容器互聯(lián)的初步實(shí)踐

    淺談關(guān)于Docker容器互聯(lián)的初步實(shí)踐

    這篇文章主要介紹了淺談關(guān)于Docker容器互聯(lián)的初步實(shí)踐,本文介紹了使用網(wǎng)橋(bridge)來對容器進(jìn)行互聯(lián),非常具有實(shí)用價值,需要的朋友可以參考下
    2018-10-10
  • Docker GitLab的安裝完整配置項說明教程

    Docker GitLab的安裝完整配置項說明教程

    這篇文章主要為大家詳細(xì)介紹了Docker GitLab的安裝完整配置項說明教程,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-11-11
  • docker默認(rèn)路徑存儲不足解決過程

    docker默認(rèn)路徑存儲不足解決過程

    這篇文章主要給大家介紹了關(guān)于docker默認(rèn)路徑存儲不足的解決過程,Docker存儲空間不足的錯誤通常表明Docker Daemon分配的本地磁盤空間用盡,文中通過代碼將解決的辦法介紹的非常詳細(xì),需要的朋友可以參考下
    2024-04-04
  • Docker實(shí)踐--部署Nodejs應(yīng)用

    Docker實(shí)踐--部署Nodejs應(yīng)用

    本篇文章主要介紹了Docker實(shí)踐--部署Nodejs應(yīng)用,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • Docker容器host與none網(wǎng)絡(luò)的使用

    Docker容器host與none網(wǎng)絡(luò)的使用

    本文主要介紹了Docker容器host與none網(wǎng)絡(luò)的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧<BR>
    2022-06-06
  • 給運(yùn)行中的docker容器添加新的端口

    給運(yùn)行中的docker容器添加新的端口

    今天小編就為大家分享一篇關(guān)于給運(yùn)行中的docker容器添加新的端口,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • Higress基于Docker?Compose進(jìn)行獨(dú)立部署方式

    Higress基于Docker?Compose進(jìn)行獨(dú)立部署方式

    文章介紹了如何使用Docker和Docker?Compose安裝Higress網(wǎng)關(guān),并詳細(xì)說明了每個服務(wù)組件的作用以及安裝和配置參數(shù),安裝完成后,可以通過控制臺進(jìn)行域名管理、服務(wù)配置和路由設(shè)置,并提供了官方文檔鏈接以便進(jìn)一步學(xué)習(xí)
    2026-03-03
  • 一文講解如何查看一個docker鏡像有哪些版本

    一文講解如何查看一個docker鏡像有哪些版本

    這篇文章主要給大家介紹了關(guān)于如何查看一個docker鏡像有哪些版本的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用docker具有一定的參考借鑒價值,需要的朋友可以參考下
    2024-04-04
  • 使用Docker部署MySQL 5.7&8.0主從集群的方法步驟

    使用Docker部署MySQL 5.7&8.0主從集群的方法步驟

    這篇文章主要介紹了使用Docker部署MySQL 5.7&8.0主從集群的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03

最新評論

湖州市| 平定县| 澳门| 勃利县| 南岸区| 水城县| 电白县| 嘉义县| 刚察县| 南投县| 海晏县| 灌阳县| 浠水县| 许昌市| 宾阳县| 遂平县| 句容市| 鸡西市| 南郑县| 资中县| 海阳市| 体育| 剑阁县| 昭觉县| 团风县| 新竹县| 和平县| 太保市| 进贤县| 青龙| 荆州市| 玛沁县| 定州市| 余江县| 合水县| 新安县| 江川县| 临猗县| 揭阳市| 彭州市| 南华县|