欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Docker多容器編排Compose實戰(zhàn)案例

 更新時間:2025年09月17日 14:40:13   作者:敲上癮  
Docker Compose是用于管理多容器應用的工具,通過YAML文件定義服務、網(wǎng)絡、卷,實現(xiàn)一鍵部署和配置,解決手動操作繁瑣問題,簡化依賴管理,適用于開發(fā)測試環(huán)境,生產(chǎn)需Kubernetes等更強大工具,本文給大家介紹Docker多容器編排Compose實戰(zhàn)教程,感興趣的朋友一起看看吧

概念簡述

核心定義

  Docker Compose 是一個用于定義和運行多容器 Docker 應用程序的工具。它允許您使用一個單獨的配置文件(通常是 .yml 格式)來配置應用程序的所有服務、網(wǎng)絡和卷,然后通過一條簡單的命令就能創(chuàng)建和啟動所有服務。
可以把它想象成一個自動化腳本編排工具,專門用于在單臺主機上部署由多個容器組成的應用。

為什么要使用 Docker Compose?解決什么問題?

在理解 Compose 之前,先想想如果不用它,會多麻煩:
假設應用由以下服務組成:Web 應用、Redis 緩存服務、MySQL 數(shù)據(jù)庫服務,如果沒有 Docker Compose,你需要手動完成以下步驟:

  1. 創(chuàng)建一個 Docker 網(wǎng)絡讓容器可以通信。
  2. 單獨啟動 MySQL 容器,并指定網(wǎng)絡、卷、環(huán)境變量等。
  3. 單獨啟動 Redis 容器,并指定網(wǎng)絡、環(huán)境變量等。
  4. 構建你的 Web 應用的鏡像。
  5. 啟動 Web 應用容器,并鏈接到之前創(chuàng)建的網(wǎng)絡,設置環(huán)境變量指向 Redis 和 PostgreSQL 的容器名。

你需要記住并輸入一大堆 docker run 命令,這個過程非常繁瑣且容易出錯。

Docker Compose 解決了這個問題:

  • 簡化流程:用一個文件(docker-compose.yml)描述整個應用棧的架構。
  • 一鍵操作:通過一條命令(docker compose up)就能同時創(chuàng)建、啟動所有服務,并處理好它們之間的依賴關系。
  • 配置即代碼:將你的應用基礎設施(服務、網(wǎng)絡、存儲)用配置文件管理起來,可以納入版本控制系統(tǒng),方便協(xié)作和追溯。

核心概念與工作流程

  • 定義 docker-compose.yml 文件:
    • 這是 Docker Compose 的核心。你在這個 YAML 文件中定義你的應用所需的服務、網(wǎng)絡和卷。
    • 服務:對應一個容器。你可以指定使用哪個鏡像、暴露哪些端口、掛載哪些卷、設置哪些環(huán)境變量、依賴哪些其他服務等。
    • 網(wǎng)絡:定義容器之間通信的網(wǎng)絡。
    • 卷:定義持久化數(shù)據(jù)存儲的位置。
  • 執(zhí)行 docker compose up 命令:
    • 在包含 docker-compose.yml 文件的目錄下運行此命令。Compose 會:
    • 自動構建或拉取所需的鏡像。
    • 按依賴順序創(chuàng)建并啟動所有定義的服務。
    • 將所有服務的日志輸出聚合到一個流中,方便查看。
  • 執(zhí)行 docker compose down 命令:
    • 當你想要停止并清理整個應用時,運行此命令。它會停止所有容器,并刪除創(chuàng)建的容器和網(wǎng)絡(默認情況下不刪除卷)。

總結:Docker Compose 的優(yōu)點

  1. 隔離環(huán)境:整個應用棧與主機環(huán)境完全隔離。
  2. 極簡配置:一個命令替代了大量復雜的 docker run 命令。
  3. 快速部署:極大地簡化了多容器應用的部署和測試流程,是開發(fā)、測試和 CI/CD 環(huán)境的理想選擇。
  4. 服務發(fā)現(xiàn):自動在服務之間創(chuàng)建網(wǎng)絡,并通過服務名進行DNS解析,使容器間通信變得非常簡單。

注意:Docker Compose 通常用于開發(fā)、測試和單機部署。對于生產(chǎn)環(huán)境中跨多臺主機的集群管理和編排,更強大的工具如 KubernetesDocker Swarm 更為合適。不過,Compose 文件可以作為學習這些更復雜工具的基礎。

配置文件格式

version:指定Docker Compose文件的版本格式,不同版本支持的功能和語法有所不同,高版本兼容低版本
services: 服務,可以存在多個
servicename: 服務名字,它也是內(nèi)部bridge網(wǎng)絡可以使用的DNS name,如果不是集群模式相當于docker run的時候指定的一個名稱,集群(Swarm)模式是多個容器的邏輯抽象
  image: 鏡像的名字(必選)
  command: 如果設置,則會覆蓋默認鏡像里的CMD命令
  environment: 等價于docker container run里的–env選項,設置環(huán)境變量
  volumes: 等價于docker container run里的-v選項,綁定數(shù)據(jù)卷
  networks: 等價于docker container run里的–network選項,指定網(wǎng)絡
  ports: 等價于docker container run里的-p選項,指定端口映射
  expose: 可選,指定容器暴露的端口
  build: 構建目錄
  depends_on: 服務依賴配置
  env_file: 環(huán)境變量文件
servicename2:
  image:
  command:
  networks:
  ports:
servicename3:
#…
volumes: # 可選,等價于 docker volume create
networks: # 可選,等價于 docker network create

參數(shù)詳解

準備這樣一個目錄結構:

mycompose/
├── prj1
│   └── docker-compose.yml
├── prj2
│   └── docker-compose.yml
└── prj3
    └── docker-compose.yml
......

image
功能:指定容器鏡像
示例:

  1. 創(chuàng)建prj1目錄:
    • mkdir prj1
  2. 在prj1中創(chuàng)建文件docker-compose.yml
    • cd prj1
    • touch docker-compose.yml
  3. 編輯docker-compose文件
    • vim docker-compose.yml
    •  services: 
          web:
            image: nginx:1.24.0
  4. 啟動配置
    • docker compose up
  5. 清除容器
    • docker compose down

接下來就不再詳細展示每個步驟,重點講解第3步文件的配置。
command
功能:覆蓋容器啟動的默認指令
格式:

command: ["bundle", "exec", "thin", "-p", "3000"]
//或
command: bundle exec thin -p 3000

示例:

serveices:
  web:
    image: nginx:1.24.0
    command: bundle exec thin -p 3000

這些內(nèi)容都寫在配置文件docker-compose.yml里面

entrypoint
功能:覆蓋容器默認的 entrypoint。
格式:

entrypoint: /code/entrypoint.sh

也可以是列表格式:

entrypoint:
  - php
  - -d
  - zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20100525/xdebug.so
  - -d
  - memory_limit=-1
  - vendor/bin/phpunit

示例:

services:
  web:
    image: nginx:1.24.0
    entrypoint:
      - tail
      - -f
      - /etc/os-release

environment
environment
功能:
  添加環(huán)境變量。您可以使用數(shù)組或字典、任何布爾值,布爾值需要用引號引起來,以確保 YML 解析器不會將其轉換為 TrueFalse。
格式:

# map 格式
environment:
  RACK_ENV: development
  SHOW: "true"
  USER_INPUT:
# 數(shù)組格式
environment:
  - RACK_ENV=development
  - SHOW=true
  - USER_INPUT=

示例:

services:
  web:
    image: nginx:1.24.0
    environment:
      TEST: 1

networks
功能:配置容器網(wǎng)絡
示例:

services:
  web:
    image: nginx:1.24.0
    networks:
      - web1
      - web2
networks:
  web1:
  web2:

volume
功能:配置容器的存儲卷

#短語法
volumes:
  - "/localhost/postgres.sock:/var/run/postgres/postgres.sock"
  - "/localhost/data:/var/lib/postgresql/data"
#完整語法
volumes:
	#命名卷
  - type: volume
    source: db-data
    target: /data
    volume:
      nocopy: true
	#綁定卷
  - type: bind
    source: /var/run/postgres/postgres.sock
    target: /var/run/postgres/postgres.sock

示例:

services:
  web:
    image: nginx:1.24.0
    volumes:
      - /home/qsy/gitDocker/data/myvolumes:/usr/share/nginx/html/

ports
功能:配置容器的端口映射

#完整語法
ports:
  - target: 80
    host_ip: 127.0.0.1
    published: 8080
    protocol: tcp
    mode: host
  - target: 80
    host_ip: 127.0.0.1
#短語法
ports:
  - "3000"
  - "3000-3005"
  - "8000:8000"
  - "9090-9091:8080-8081"
  - "49100:22"
  - "127.0.0.1:8001:8001"
  - "127.0.0.1:5000-5010:5000-5010"
  - "6060:6060/udp"

示例:

services:
  web:
    image: nginx:1.24.0
    ports:
      - 7070:80

expose
功能:暴露端口,但不映射到宿主機,只被連接的服務訪問。僅可以指定內(nèi)部端口為參數(shù).
格式/示例:

expose:
  - "3000"
  - "8000"

depends_on
功能:設置依賴關系

  • docker compose up:以依賴性順序啟動服務。在以下示例中,先啟動 dbredis,才會啟動 web
  • docker compose up SERVICE:自動包含 SERVICE 的依賴項。在以下示例中,docker compose up web 還將創(chuàng)建并啟動 dbredis
  • docker compose stop:按依賴關系順序停止服務。在以下示例中,webdbredis 之前停止。
version: "3.7"
services:
  web:
    build: .
    depends_on:
      - db
      - redis
  redis:
    image: redis
  db:
    image: postgres

env_file
從文件添加環(huán)境變量??梢允菃蝹€值或列表的多個值。

env_file: xxx.env

也可以是列表格式:

env_file:
  - ./.env
  - ./apps/web.env
  - /opt/secrets.env

docker compose指令

docker compose 指令與容器操作相似,只不過把容器改成了服務
命令格式:
docker-compose 命令的基本的使用格式為

docker compose [OPTIONS] COMMAND [ARGS...]

命令清單:

  • docker compose build - 構建服務
  • docker compose config - 以規(guī)范格式顯示服務配置
  • docker compose cp - 在本地系統(tǒng)和服務容器之間拷貝文件
  • docker compose create - 創(chuàng)建服務的容器
  • docker compose down - 停止所有容器并刪除容器
  • docker compose events - 從服務器獲取實時事件
  • docker compose exec - 在容器中執(zhí)行命令
  • docker compose images - 列出所有容器使用的鏡像
  • docker compose kill - 強制停止服務的容器
  • docker compose logs - 顯示容器日志
  • docker compose ls - 顯示所有項目
  • docker compose pause - 暫停服務
  • docker compose port - 列出所有的端口映射
  • docker compose ps - 列出項目中目前的所有容器
  • docker compose pull - 拉取服務鏡像
  • docker compose push - 推送服務鏡像
  • docker compose restart - 重啟服務
  • docker compose rm - 刪除已停止的服務容器
  • docker compose run - 在指定服務容器上執(zhí)行命令
  • docker compose start - 啟動當前停止的容器
  • docker compose stop - 停止當前運行的容器
  • docker compose top - 顯示運行的進程
  • docker compose unpause - 恢復服務
  • docker compose up - 構建、創(chuàng)建、啟動和鏈接服務相關的容器(支持 --no-recreate 參數(shù)避免重新創(chuàng)建,-d 后臺運行)
  • docker compose version - 查看版本信息

用法和功能與容器的相關指令類似,只是docker compose的操作對象是服務而已。
參考文章:Docker容器核心指令
關鍵命令選項
up
功能:
  該命令的作用十分強大,它會嘗試自動完成包括構建鏡像、(重新)創(chuàng)建服務、啟動服務并關聯(lián)服務相關容器的一系列操作,可以直接通過該命令來啟動一個項目。
語法:

docker compose up [options] [service...]

選項說明:

  • -d 在后臺運行服務器,推薦在生產(chǎn)環(huán)境下使用該選項
  • --force-recreate 強制重新創(chuàng)建容器,不能與 --no-recreate 同時使用
  • --no-recreate 如果容器已經(jīng)存在了,則不重新創(chuàng)建,不能與 --force-recreate 同時使用

down
功能:停止所有容器,并刪除容器和網(wǎng)絡。
語法:

docker compose down [options] [SERVICE...]

選項說明:

  • -v, --volumes:刪除容器同時刪除目錄映射。

run
功能:該命令可以在指定服務器上執(zhí)行相關的命令
語法:

# 例如:啟動一個 ubuntu 服務容器,并執(zhí)行 ping docker.com 命令
# docker compose run ubuntu ping docker.com
docker compose run [options] SERVICE [COMMAND] [ARGS...]

與docker run的區(qū)別,該指令是用服務啟動容器,而不是鏡像
選項說明:

  • -d 后臺運行容器
  • --name NAME 為容器指定一個名字
  • --entrypoint CMD 覆蓋默認的容器啟動指令
  • -e KEY=VAL 設置環(huán)境變量值,可多次使用選項來設置多個環(huán)境變量
  • -u, --user="" 指定運行容器的用戶名或者 uid
  • --rm 運行命令后自動刪除容器
  • -p, --publish=[] 映射容器端口到本地主機

示例:

綜合案例

docker-compose.yml配置

啟動,會先啟動依賴的服務。

清理,與啟動相反,先清理主要的服務,然后清理依賴的服務。

到此這篇關于Docker多容器編排:Compose 實戰(zhàn)教程的文章就介紹到這了,更多相關Docker多容器Compose 實戰(zhàn)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • docker容器中登陸并操作postgresql的實現(xiàn)

    docker容器中登陸并操作postgresql的實現(xiàn)

    本文主要介紹了docker容器中登陸并操作postgresql的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-02-02
  • Docker中Mysql容器忽略大小寫方式

    Docker中Mysql容器忽略大小寫方式

    數(shù)據(jù)遷移中因源庫與目標庫大小寫處理差異導致服務異常,通過Docker構建中間MySQL容器并配置忽略大小寫,實現(xiàn)兼容性,此為實踐經(jīng)驗,供參考
    2025-09-09
  • docker磁盤空間清理的解決辦法

    docker磁盤空間清理的解決辦法

    前段時間遇到docker磁盤空間太少,無法寫入數(shù)據(jù)的問題。本文就來介紹一下docker磁盤空間清理的解決辦法,感興趣的可以了解一下
    2021-06-06
  • Docker搭建Jenkins實現(xiàn)自動部署的圖文教程

    Docker搭建Jenkins實現(xiàn)自動部署的圖文教程

    本文主要介紹了Docker搭建Jenkins實現(xiàn)自動部署教程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-05-05
  • docker nginx 部署多個項目的示例方法

    docker nginx 部署多個項目的示例方法

    這篇文章主要介紹了docker nginx 部署多個項目的示例方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11
  • docker安裝部署zabbix的全過程

    docker安裝部署zabbix的全過程

    zabbix由2部分構成,zabbix?server與可選組件zabbix?agent,要想搭建一個Zabbix的工作環(huán)境,主要有三個方面(界面、服務器和數(shù)據(jù)庫)可以安裝在同一臺服務器上,也可以不在同一個服務器,本次使用Docker開源的應用容器來快速搭建zabbix,需要的朋友可以參考下
    2024-03-03
  • docker部署zabbix_agent的方法步驟

    docker部署zabbix_agent的方法步驟

    這篇文章主要介紹了docker部署zabbix_agent的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-10-10
  • Docker容器鏡像加載及底層基本原理深入解析

    Docker容器鏡像加載及底層基本原理深入解析

    這篇文章主要為大家介紹了Docker容器鏡像加載及底層基本原理深入分析,讓大家能夠有更深入的理解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2022-03-03
  • 本地Docker安裝Postgres 12 + pgadmin的方法 (支持Apple M1)

    本地Docker安裝Postgres 12 + pgadmin的方法 (支持Apple M1)

    這篇文章主要介紹了本地Docker安裝Postgres 12 + pgadmin的方法 (支持Apple M1),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • docker設置了端口映射,不能訪問的解決方案

    docker設置了端口映射,不能訪問的解決方案

    這篇文章主要介紹了docker設置了端口映射,不能訪問的解決方案,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03

最新評論