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

Docker?Compose從入門到實(shí)踐的完全指南

 更新時(shí)間:2025年05月23日 10:21:10   作者:aiweker  
Docker?Compose?是一個(gè)用于定義和運(yùn)行多容器?Docker?應(yīng)用程序的工具,通過一個(gè)?YAML?文件來配置應(yīng)用的服務(wù),只需簡單命令就能創(chuàng)建和啟動所有服務(wù),下面就跟隨小編一起來看看它的具體使用吧

1. Docker Compose 簡介與核心價(jià)值

Docker Compose 是一個(gè)用于定義和運(yùn)行多容器 Docker 應(yīng)用程序的工具。通過一個(gè) YAML 文件來配置應(yīng)用的服務(wù),只需簡單命令就能創(chuàng)建和啟動所有服務(wù)。

核心優(yōu)勢:

  • 簡化多容器管理:通過單一文件管理多個(gè)關(guān)聯(lián)容器
  • 開發(fā)環(huán)境標(biāo)準(zhǔn)化:團(tuán)隊(duì)共享相同的環(huán)境配置
  • 快速環(huán)境搭建:一條命令啟動復(fù)雜應(yīng)用棧
  • 服務(wù)依賴管理:自動處理服務(wù)間的依賴關(guān)系
  • 配置即代碼:版本控制環(huán)境配置

典型應(yīng)用場景:

  • 開發(fā)環(huán)境搭建
  • 自動化測試環(huán)境
  • 單主機(jī)部署
  • 微服務(wù)應(yīng)用演示

2. Compose 文件結(jié)構(gòu)與版本

2.1 基本文件結(jié)構(gòu)

version: "3.8"  # 指定Compose文件格式版本

services:  # 容器服務(wù)定義
  webapp:
    image: nginx:alpine
    ports:
      - "80:80"

  database:
    image: postgres:13
    environment:
      POSTGRES_PASSWORD: example

volumes:  # 持久化卷定義
  db-data:

版本選擇建議:

  • 新項(xiàng)目使用 3.8+ 版本
  • 需要 swarm 部署時(shí)使用 3.x 版本
  • 舊系統(tǒng)兼容考慮 2.4 版本

2.2 版本演進(jìn)對比

特性2.x 系列3.x 系列
Swarm 模式支持有限支持完整支持
GPU 支持不支持3.7+ 支持
擴(kuò)展字段不支持3.4+ 支持
服務(wù)依賴depends_on 基本增強(qiáng)的健康檢查依賴

3. 核心服務(wù)配置詳解

3.1 鏡像與構(gòu)建

使用現(xiàn)有鏡像:

services:
  redis:
    image: redis:6.2-alpine

基于 Dockerfile 構(gòu)建:

services:
  webapp:
    build:
      context: ./dir
      dockerfile: Dockerfile.dev
      args:
        NODE_ENV: development
    image: my-webapp:1.0

參數(shù)說明:

  • context:構(gòu)建上下文路徑
  • dockerfile:指定 Dockerfile 文件名
  • args:構(gòu)建時(shí)變量傳遞

3.2 端口映射

services:
  web:
    ports:
      - "80:80"           # 主機(jī)端口:容器端口
      - "443:443/tcp"      # 指定協(xié)議
      - "3000-3005:3000-3005"  # 端口范圍
      - "9090"            # 僅暴露容器端口

最佳實(shí)踐:

  • 開發(fā)環(huán)境使用明確端口映射
  • 生產(chǎn)環(huán)境謹(jǐn)慎暴露端口
  • 考慮使用反向代理管理入口

3.3 環(huán)境變量配置

.env 文件:

DB_USER=admin
DB_PASS=secret

Compose 文件引用:

services:
  db:
    environment:
      POSTGRES_USER: ${DB_USER}
      POSTGRES_PASSWORD: ${DB_PASS}
    env_file:
      - ./db.env

優(yōu)先級規(guī)則:

  • environment 顯式定義
  • env_file 文件定義
  • 容器內(nèi)已有環(huán)境變量

3.4 數(shù)據(jù)持久化

services:
  database:
    volumes:
      - db-data:/var/lib/postgresql/data
      - ./logs:/app/logs

volumes:
  db-data:
    driver: local

掛載類型對比:

  • 命名卷:docker 管理,適合生產(chǎn)數(shù)據(jù)
  • 主機(jī)路徑:開發(fā)調(diào)試方便
  • 臨時(shí)卷:內(nèi)存存儲,高性能臨時(shí)數(shù)據(jù)

4. 網(wǎng)絡(luò)配置策略

4.1 默認(rèn)網(wǎng)絡(luò)行為

services:
  web:
    networks:
      - frontend
  api:
    networks:
      - frontend
      - backend

networks:
  frontend:
  backend:
    driver: bridge

自動生成規(guī)則:

  • 默認(rèn)創(chuàng)建 項(xiàng)目名_default 網(wǎng)絡(luò)
  • 相同網(wǎng)絡(luò)內(nèi)的服務(wù)可通過服務(wù)名互訪
  • 隔離不同項(xiàng)目的網(wǎng)絡(luò)環(huán)境

4.2 自定義網(wǎng)絡(luò)配置

networks:
  app-net:
    driver: bridge
    ipam:
      config:
        - subnet: 172.20.0.0/24
          gateway: 172.20.0.1
    attachable: true

高級選項(xiàng):

  • internal: true 創(chuàng)建隔離網(wǎng)絡(luò)
  • enable_ipv6: true 啟用 IPv6
  • labels 添加元數(shù)據(jù)

5. 服務(wù)依賴與健康檢查

5.1 依賴控制

services:
  web:
    depends_on:
      db:
        condition: service_healthy
      redis:
        condition: service_started

  db:
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres"]
      interval: 5s
      timeout: 3s
      retries: 5

依賴條件類型:

  • service_started:服務(wù)容器啟動
  • service_healthy:通過健康檢查
  • service_completed_successfully:一次性任務(wù)成功

5.2 健康檢查配置

healthcheck:
  test: ["CMD", "curl", "-f", "http://localhost/health"]
  interval: 30s
  timeout: 10s
  retries: 3
  start_period: 5s

檢查方式:

  • CMD:直接執(zhí)行命令
  • CMD-SHELL:通過 shell 執(zhí)行
  • 禁用:disable: true

6. 常用命令實(shí)戰(zhàn)

6.1 基礎(chǔ)命令

# 啟動所有服務(wù)(后臺模式)
docker-compose up -d

# 查看運(yùn)行狀態(tài)
docker-compose ps

# 停止服務(wù)
docker-compose stop

# 停止并刪除容器
docker-compose down

# 重建服務(wù)
docker-compose up -d --build

6.2 調(diào)試命令

# 查看服務(wù)日志
docker-compose logs -f web

???????# 執(zhí)行一次性命令
docker-compose run --rm web python manage.py migrate

# 進(jìn)入運(yùn)行中容器
docker-compose exec db psql -U postgres

6.3 擴(kuò)展操作

# 水平擴(kuò)展服務(wù)實(shí)例
docker-compose up -d --scale web=3
# 查看服務(wù)資源使用
docker-compose top

# 驗(yàn)證配置文件
docker-compose config

7. 生產(chǎn)環(huán)境最佳實(shí)踐

7.1 安全配置

services:
  db:
    read_only: true
    tmpfs: /run
    security_opt:
      - no-new-privileges:true
    user: "1000:1000"

安全建議:

  • 避免使用 root 用戶
  • 限制內(nèi)存和 CPU
  • 設(shè)置只讀文件系統(tǒng)
  • 禁用特權(quán)升級

7.2 資源約束

services:
  worker:
    deploy:
      resources:
        limits:
          cpus: '0.5'
          memory: 512M
        reservations:
          memory: 256M
    restart_policy:
      condition: on-failure
      max_attempts: 3

關(guān)鍵配置:

  • CPU 限制 (cpus)
  • 內(nèi)存限制 (memory)
  • 重啟策略
  • 容器更新順序

7.3 多環(huán)境配置

base.yml:

services:
  app:
    image: my-app
    env_file: .env

override.yml:

services:
  app:
    environment:
      DEBUG: "true"
    ports:
      - "8080:80"

啟動命令:

docker-compose -f base.yml -f override.yml up

8. 完整示例分析

微服務(wù)應(yīng)用示例

version: "3.8"

services:
  frontend:
    build: ./frontend
    ports:
      - "3000:3000"
    depends_on:
      - api
    networks:
      - app-net

  api:
    build: ./backend
    environment:
      DB_URL: postgres://user:pass@db:5432/app
    volumes:
      - ./backend:/app
    networks:
      - app-net
      - db-net

  db:
    image: postgres:13
    environment:
      POSTGRES_PASSWORD: pass
      POSTGRES_USER: user
      POSTGRES_DB: app
    volumes:
      - db-data:/var/lib/postgresql/data
    networks:
      - db-net
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U user -d app"]
      interval: 5s

networks:
  app-net:
  db-net:
    internal: true

volumes:
  db-data:

架構(gòu)特點(diǎn):

  • 前端服務(wù)暴露 3000 端口
  • API 服務(wù)連接數(shù)據(jù)庫
  • 數(shù)據(jù)庫使用獨(dú)立內(nèi)部網(wǎng)絡(luò)
  • 數(shù)據(jù)持久化存儲
  • 健康檢查確保依賴順序

9. 總結(jié)與進(jìn)階建議

9.1 核心要點(diǎn)回顧

編排能力:Compose 簡化了多容器應(yīng)用的管理

聲明式配置:YAML 文件定義完整應(yīng)用棧

環(huán)境一致性:實(shí)現(xiàn)開發(fā)-測試-生產(chǎn)環(huán)境一致

資源控制:精確管理服務(wù)資源分配

服務(wù)發(fā)現(xiàn):內(nèi)置 DNS 解析簡化服務(wù)通信

9.2 進(jìn)階學(xué)習(xí)建議

與 Swarm/K8s 集成:

docker stack deploy -c compose.yml myapp

使用擴(kuò)展字段:

x-logging: &default-logging
  options:
    max-size: "10m"
    max-file: "3"

性能調(diào)優(yōu):

  • 合理設(shè)置 ulimits
  • 優(yōu)化卷驅(qū)動選擇
  • 配置 OOM 殺手策略

監(jiān)控方案:

services:
  prometheus:
    image: prom/prometheus
    ports:
      - "9090:9090"

通過掌握 Docker Compose,您已經(jīng)具備了高效管理容器化應(yīng)用的能力。建議從簡單項(xiàng)目開始實(shí)踐,逐步應(yīng)用到復(fù)雜生產(chǎn)環(huán)境,最終實(shí)現(xiàn)基礎(chǔ)設(shè)施即代碼的現(xiàn)代化運(yùn)維模式。

到此這篇關(guān)于Docker Compose從入門到實(shí)踐的完全指南的文章就介紹到這了,更多相關(guān)Docker Compose使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • docker如何刪除懸空鏡像

    docker如何刪除懸空鏡像

    文章介紹了如何使用Docker命令刪除懸空鏡像,以提高服務(wù)器空間利用率,通過使用docker image命令結(jié)合filter和awk工具,可以過濾出沒有Tag的鏡像,并將其刪除,總結(jié)了兩種方法,一種是通過管道和awk命令,另一種是使用更簡單的docker rmi命令
    2025-02-02
  • 使用DockerFile構(gòu)建鏡像與鏡像上傳的實(shí)現(xiàn)步驟

    使用DockerFile構(gòu)建鏡像與鏡像上傳的實(shí)現(xiàn)步驟

    本文主要介紹了使用DockerFile構(gòu)建鏡像與鏡像上傳的實(shí)現(xiàn)步驟,使用Dockerfile好處是自動化構(gòu)建,確保環(huán)境的一致性和可重復(fù)性,跟蹤構(gòu)建過程的演化等,文中通過圖文講解的非常詳細(xì),需要的朋友可以參考下
    2024-02-02
  • 解決docker重啟redis,mysql數(shù)據(jù)丟失的問題

    解決docker重啟redis,mysql數(shù)據(jù)丟失的問題

    這篇文章主要介紹了解決docker重啟redis,mysql數(shù)據(jù)丟失的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • SpringBoot程序打包Docker鏡像的最佳方式

    SpringBoot程序打包Docker鏡像的最佳方式

    本文探索了SpringBoot程序打包Docker鏡像的幾種方式及其性能表現(xiàn),作者通過四種方法進(jìn)行測試,并通過代碼示例講解的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下
    2026-03-03
  • Docker部署MySQL鏡像的保姆級教程

    Docker部署MySQL鏡像的保姆級教程

    docker是一種容器化技術(shù),可以將應(yīng)用程序及其依賴項(xiàng)打包成一個(gè)獨(dú)立的可移植容器,mysql是一個(gè)流行的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),在Docker中部署MySQL鏡像可以方便地創(chuàng)建和管理MySQL數(shù)據(jù)庫實(shí)例,本文給大家介紹了Docker部署MySQL鏡像的教程,需要的朋友可以參考下
    2025-06-06
  • docker部署LNMP&phpMyAdmin的方法步驟

    docker部署LNMP&phpMyAdmin的方法步驟

    這篇文章主要介紹了docker部署LNMP&phpMyAdmin的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • docker-compose---安裝掛載本地文件啟動mariadb問題

    docker-compose---安裝掛載本地文件啟動mariadb問題

    這篇文章主要介紹了docker-compose---安裝掛載本地文件啟動mariadb問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • docker構(gòu)建并啟動前端完整流程

    docker構(gòu)建并啟動前端完整流程

    使用?Docker?部署前端項(xiàng)目是一種高效且可靠的方法,可以確保項(xiàng)目在不同環(huán)境中的一致性,這篇文章主要介紹了docker構(gòu)建并啟動前端的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-07-07
  • docker-compose的build使用方式

    docker-compose的build使用方式

    這篇文章主要介紹了docker-compose的build使用方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • 詳解使用Dockerfile創(chuàng)建帶Apache服務(wù)的CentOS Docker鏡像

    詳解使用Dockerfile創(chuàng)建帶Apache服務(wù)的CentOS Docker鏡像

    本篇文章主要介紹了使用Dockerfile創(chuàng)建帶Apache服務(wù)的CentOS Docker鏡像,具有一定的參考價(jià)值,有興趣的可以了解一下。
    2016-12-12

最新評論

微山县| 台东市| 鹿邑县| 同心县| 巴塘县| 沽源县| 镇江市| 梨树县| 玉门市| 乐安县| 四平市| 鞍山市| 宁明县| 北辰区| 临澧县| 屯门区| 海林市| 武城县| 元朗区| 恩施市| 阳高县| 宜昌市| 南川市| 剑阁县| 安丘市| 石嘴山市| 赤峰市| 墨玉县| 遂川县| 江川县| 兴山县| 乌兰浩特市| 剑川县| 陇南市| 会宁县| 调兵山市| 晋江市| 汪清县| 定边县| 高密市| 浦江县|