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

Docker?Compose入門指南之一條命令啟動多服務

 更新時間:2026年05月29日 08:43:27   作者:IT策士  
Docker?Compose?的目標就是把這些步驟寫進一個?YAML?文件,然后一條命令搞定一切,這篇就來帶你入門?Compose,把?Flask?+?Redis?計數器應用的啟動過程從"手動敲?8?條命令變成一條?docker?compose?up

在上一篇文章的末尾,我留了一個問題:每次啟動 Flask + Redis 應用都要敲七八條命令,太累了。有沒有更優(yōu)雅的方式?

有。這就是我們今天的主角——Docker Compose。

如果你跟著第 10 篇親手敲過那幾十條命令,一定能感受到手動管理的痛苦:要先創(chuàng)建網絡、創(chuàng)建數據卷、啟動 Redis、等待 Redis 就緒、啟動 Flask……順序不能錯,參數不能漏,換一臺機器又得重來一遍。Docker Compose 的目標就是把這些步驟寫進一個 YAML 文件,然后一條命令搞定一切。這篇就來帶你入門 Compose,把 Flask + Redis 計數器應用的啟動過程從"手動敲 8 條命令"變成"一條 docker compose up"。

一、Compose 是什么?解決什么問題?

Docker Compose 是 Docker 官方推出的多容器應用編排工具,核心價值就是用聲明式的 YAML 文件描述整個應用棧,包括服務、網絡、數據卷的配置,然后通過一條命令統一管理所有服務的生命周期。

看一下我們第 10 篇手動操作的痛點,以及 Compose 是如何一一解決的:

二、V1 vs V2 vs V3:我該用哪個?

在開始寫配置文件之前,有必要弄清楚版本號的問題。

Docker Compose 文件格式經歷了多次演變:V1 格式(docker-compose.yml,無 version 字段)是早期版本,已經徹底廢棄;V2 格式引入了 version: '2.x',支持命名卷和網絡;V3 格式(version: '3.x')增加了 Swarm 部署相關配置。

但現在(2024 年起)Docker 官方已棄用version 字段。使用 docker compose(V2 命令,中間是空格,不是橫杠)時,直接編寫不帶 version 的 YAML 文件即可,Docker 會自動使用 Compose Specification 規(guī)范解析。如果你看到一些教程還在使用 version: '3',那是歷史遺留寫法,功能上仍然可用,但官方推薦不再寫 version。

本系列全部采用最新的 Compose Specification 格式(無 version 字段),命令使用 docker compose(空格版)。

三、編寫第一個 docker-compose.yml

把第 10 篇的啟動流程"翻譯"成 Compose 文件。在項目根目錄下新建 docker-compose.yml

# ============================================================
# Flask + Redis 計數器應用 —— Docker Compose 配置文件
# 系列貫穿案例
# ============================================================
services:
  # ---- Redis 服務 ----
  redis:
    image: redis:alpine
    container_name: redis
    restart: unless-stopped
    command: redis-server --appendonly yes
    volumes:
      - redis-data:/data
    networks:
      - app-net
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 10s
      timeout: 3s
      retries: 3
      start_period: 5s
  # ---- Flask 應用服務 ----
  flask-app:
    image: flask-redis-counter:2.0
    # 如果鏡像不在本地,可以改為 build: . 來從 Dockerfile 構建
    container_name: flask-app
    restart: unless-stopped
    ports:
      - "5000:5000"
    volumes:
      - flask-logs:/app/logs
    networks:
      - app-net
    depends_on:
      redis:
        condition: service_healthy
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:5000/health"]
      interval: 30s
      timeout: 3s
      start_period: 5s
      retries: 3
# ---- 數據卷 ----
volumes:
  redis-data:
  flask-logs:
# ---- 網絡 ----
networks:
  app-net:
    driver: bridge

3.1 文件結構拆解

Compose 文件包含三個頂級元素:

services:定義應用棧中每個服務的配置。每個服務相當于一個 docker run 命令的完整參數集合。當前定義了兩個服務——redisflask-app。在 Compose 管理的網絡中,服務名(redis、flask-app)會自動作為 DNS 記錄,其他服務可以通過服務名直接訪問。這就是為什么 app.py 里寫的 host='redis' 能直接工作——Compose 自動創(chuàng)建了 DNS 解析。

volumes:聲明命名卷。與手動執(zhí)行 docker volume create 創(chuàng)建的效果完全一致,但由 Compose 統一管理生命周期。docker compose down 時默認不會刪除 volumes(防止誤刪數據),如需刪除需加 -v 參數。

networks:聲明網絡。driver: bridge 表示創(chuàng)建自定義 bridge 網絡,與第 8 篇手動執(zhí)行 docker network create app-net 的效果完全一致。

3.2 depends_on 的兩種寫法

depends_on 有兩種用法,效果差異很大:

簡單寫法(僅控制啟動順序)

這種寫法只保證 redis 容器先啟動,但不等待 Redis 服務就緒——redis 容器可能處于 “Up” 狀態(tài)但 Redis 進程還在加載數據,此時 Flask 連接 Redis 會失敗。

條件寫法(等待健康檢查通過)

depends_on:
  redis:
    condition: service_healthy

這是我們現在用的寫法:condition: service_healthy 表示不僅要等 redis 容器啟動,還要等它的健康檢查通過redis-cli ping 返回 PONG),才會啟動 flask-app。這個 service_healthy 條件引入了 Compose v2.1+ 規(guī)范,到 Compose v3 曾被標記為 deprecated,但在最新的 Compose Specification 中又正式回歸。使用 docker compose 命令即可正常使用,完全不需要 version 字段。

四、核心命令:從 up 到 down

4.1 docker compose up:一鍵啟動

# 前臺啟動(可以看到所有服務的日志交錯輸出)
docker compose up

# 后臺啟動(推薦日常使用)
docker compose up -d

輸出:

[+] Running 3/3
 ? Network flask-redis-counter_app-net    Created    0.1s
 ? Volume "flask-redis-counter_redis-data"  Created    0.0s
 ? Volume "flask-redis-counter_flask-logs"  Created    0.0s
 ? Container redis                         Started    0.5s
 ? Container flask-app                     Started    1.2s

注意兩個細節(jié):第一,網絡和卷的名稱會自動帶上項目名(默認是當前目錄名,這里是 flask-redis-counter)作為前綴,避免不同項目之間的資源名稱沖突。第二,docker compose up -d 僅啟動服務,不會重新構建鏡像。如果你修改了 Dockerfile 或代碼,需要先 docker compose buildup,或者直接用 docker compose up --build -d。

4.2 查看服務狀態(tài)

輸出:

NAME        IMAGE                        COMMAND                  SERVICE     STATUS                    PORTS
flask-app   flask-redis-counter:2.0     "python app.py"          flask-app   running (healthy)         0.0.0.0:5000->5000/tcp
redis       redis:alpine                "docker-entrypoint.s…"   redis       running (healthy)         6379/tcp

注意兩點:docker compose ps 只會顯示當前項目的容器(根據 docker-compose.yml 所在目錄識別項目),不會混入宿主機上其他 Docker 容器;STATUS 列標注了 (healthy),說明兩個服務的 HEALTHCHECK 都已通過。

4.3 查看日志

# 查看所有服務的日志
docker compose logs

# 實時跟蹤日志
docker compose logs -f

# 只看特定服務
docker compose logs flask-app

# 看最后 50 行
docker compose logs --tail=50 flask-app

docker compose logsdocker logs 最大的區(qū)別在于:前者會聚合所有服務的日志,并在每條日志前標注服務名,對于排查跨服務的調用鏈問題非常方便。

4.4 擴容服務

這是手動模式最難做到的事情——Compose 一條命令搞定

# 將 Flask 服務擴容到 3 個實例
docker compose up -d --scale flask-app=3

輸出:

 [+] Running 3/3
 ? Container redis     Running    0.0s
 ? Container flask-app Started    0.3s
 ? Container flask-app-2 Started  0.4s
 ? Container flask-app-3 Started  0.4s

--scale 參數在 docker compose 中僅用于臨時一次性擴容,不會持久化到配置文件。下次執(zhí)行 docker compose up -d 時,副本數會恢復為默認的 1 個。如果需要長期使用多個副本,建議在 Compose 文件中使用 deploy.replicas(需 Swarm 模式),或直接用 K8s 的 Deployment 管理。

4.5 停止與清理

# 停止所有服務(不刪除容器、網絡、卷)
docker compose stop

# 啟動已停止的服務
docker compose start

# 停止并刪除容器(不刪除網絡和卷)
docker compose down

# 停止并刪除容器、網絡(保留卷,防止誤刪數據)
docker compose down --volumes
# 或簡寫
docker compose down -v

注意docker compose down 默認不會刪除 volumes,這是出于數據安全的考慮。如果你確定要徹底清理包括數據在內的所有資源,必須顯式加 -v。

五、完整驗證流程

# 1. 確認目錄結構
ls
# app.py  docker-compose.yml  Dockerfile  requirements.txt  .dockerignore

# 2. 啟動應用棧
docker compose up -d

# 3. 查看狀態(tài)
docker compose ps

# 4. 測試功能
curl http://localhost:5000
# Hello World! I have been seen 1 times.
curl http://localhost:5000
# Hello World! I have been seen 2 times.

# 5. 測試健康檢查
curl http://localhost:5000/health
# {"status":"ok"}

# 6. 查看聚合日志
docker compose logs --tail=20

# 7. 停止服務
docker compose down

現在,整個 Flask + Redis 應用棧的啟動從第 10 篇的"手動敲 8 條命令"變成了:

一條命令,從啟動 Redis、等待就緒、啟動 Flask,到創(chuàng)建網絡和數據卷,全部自動完成。

六、V1 vs V2 命令對比

Docker Compose 有兩個命令版本,如果你在網上看教程,可能會遇到混用的情況。以下是區(qū)別:

如果你之前用過 docker-compose(帶橫杠),現在統一換為 docker compose(空格)。兩者語法 99% 兼容,但 V2 在性能和功能上更優(yōu)。

七、本篇總結

Docker Compose 解決的核心問題就是——把多容器應用從手動管理變成聲明式管理。

  • 聲明式配置docker-compose.yml 一站式定義服務、網絡、卷,可納入 Git 管理
  • 一鍵啟停docker compose up -ddocker compose down,告別冗長的手動命令
  • 健康檢查驅動的啟動順序depends_on + condition: service_healthy,不再需要 sleep
  • 服務擴容--scale 參數快速測試多副本場景
  • 聚合日志:一個命令查看整個應用棧的日志,跨服務排錯效率大幅提升

到此這篇關于Docker Compose入門指南之一條命令啟動多服務的文章就介紹到這了,更多相關Docker Compose命令內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 優(yōu)化docker鏡像體積的方法詳解

    優(yōu)化docker鏡像體積的方法詳解

    鏡像的本質是鏡像層和運行配置文件組成的壓縮包,構建鏡像是通過運行 Dockerfile 中的 RUN 、COPY 和 ADD 等指令生成鏡像層和配置文件的過程,本文給大家介紹了如何優(yōu)化 docker 鏡像體積,需要的朋友可以參考下
    2025-03-03
  • 利用Docker-compose安裝redis的簡單步驟

    利用Docker-compose安裝redis的簡單步驟

    Docker-compose是Docker官方推出的一個工具軟件,可以管理多個Docker容器組成的一個應用,下面這篇文章主要給大家介紹了關于利用Docker-compose安裝redis的簡單步驟,需要的朋友可以參考下
    2024-03-03
  • docker搭建kafka集群的方法實現

    docker搭建kafka集群的方法實現

    本文主要介紹了docker搭建kafka集群的方法實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-05-05
  • Docker容器綁定外部IP和端口的方法

    Docker容器綁定外部IP和端口的方法

    Docker允許通過外部訪問容器或者容器之間互聯的方式來提供網絡服務。這篇文章主要介紹了Docker容器綁定外部IP和端口的方法,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-12-12
  • 減少Docker鏡像大小的10個優(yōu)化技巧

    減少Docker鏡像大小的10個優(yōu)化技巧

    當使用Docker時,鏡像大小是一個很大的問題,下面這篇文章主要給大家介紹了關于減少Docker鏡像大小的10個優(yōu)化技巧,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-01-01
  • Docker 1分鐘搭建DNS服務器的方法

    Docker 1分鐘搭建DNS服務器的方法

    本篇文章介紹了Docker 1分鐘搭建DNS服務器的方法,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-12-12
  • Docker容器host與none網絡的使用

    Docker容器host與none網絡的使用

    本文主要介紹了Docker容器host與none網絡的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧<BR>
    2022-06-06
  • Centos7 安裝部署Kubernetes(k8s)集群實現過程

    Centos7 安裝部署Kubernetes(k8s)集群實現過程

    這篇文章主要為大家介紹了Centos7 安裝部署Kubernetes(k8s)集群實現過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • docker容器調用yum報錯的解決辦法

    docker容器調用yum報錯的解決辦法

    在本篇文章里小編給大家分享的是關于docker容器調用yum報錯的解決辦法,有興趣的朋友們可以參考下。
    2020-03-03
  • docker如何查詢鏡像版本信息

    docker如何查詢鏡像版本信息

    這篇文章主要介紹了docker如何查詢鏡像版本信息問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03

最新評論

潮州市| 洪洞县| 兴隆县| 吉安县| 上杭县| 和静县| 裕民县| 甘泉县| 金川县| 扬州市| 黔西| 大方县| 玉溪市| 镇康县| 定南县| 巴林左旗| 大埔区| 梁山县| 手游| 雅安市| 绥棱县| 泾阳县| 新河县| 宁国市| 望谟县| 德令哈市| 苏尼特右旗| 会宁县| 江津市| 刚察县| 海兴县| 定兴县| 大庆市| 沈丘县| 上蔡县| 清镇市| 隆昌县| 拉萨市| 秦安县| 富蕴县| 旬邑县|