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

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

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

概念簡述

核心定義

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

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

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

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

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

Docker Compose 解決了這個(gè)問題:

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

核心概念與工作流程

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

總結(jié):Docker Compose 的優(yōu)點(diǎn)

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

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

配置文件格式

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

參數(shù)詳解

準(zhǔn)備這樣一個(gè)目錄結(jié)構(gòu):

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. 啟動(dòng)配置
    • docker compose up
  5. 清除容器
    • docker compose down

接下來就不再詳細(xì)展示每個(gè)步驟,重點(diǎn)講解第3步文件的配置。
command
功能:覆蓋容器啟動(dòng)的默認(rèn)指令
格式:

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
功能:覆蓋容器默認(rèn)的 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 解析器不會(huì)將其轉(zhuǎn)換為 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)絡(luò)
示例:

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

volume
功能:配置容器的存儲(chǔ)卷

#短語法
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
功能:暴露端口,但不映射到宿主機(jī),只被連接的服務(wù)訪問。僅可以指定內(nèi)部端口為參數(shù).
格式/示例:

expose:
  - "3000"
  - "8000"

depends_on
功能:設(shè)置依賴關(guān)系

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

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

env_file: xxx.env

也可以是列表格式:

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

docker compose指令

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

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

命令清單:

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

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

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

選項(xiàng)說明:

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

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

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

選項(xiàng)說明:

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

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

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

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

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

示例:

綜合案例

docker-compose.yml配置

啟動(dòng),會(huì)先啟動(dòng)依賴的服務(wù)。

清理,與啟動(dòng)相反,先清理主要的服務(wù),然后清理依賴的服務(wù)。

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

相關(guān)文章

  • 一文教會(huì)你如何高效地搭建Docker私有倉庫

    一文教會(huì)你如何高效地搭建Docker私有倉庫

    Docker容器應(yīng)用的開發(fā)和運(yùn)行離不開可靠的鏡像管理,雖然Docker官方也提供了公共的鏡像倉庫,但是從安全和效率等方面考慮,部署我們私有環(huán)境內(nèi)的Registry也是非常必要的,這篇文章主要介紹了如何高效地搭建Docker私有倉庫的相關(guān)資料,需要的朋友可以參考下
    2022-08-08
  • Docker 簡單部署 ElasticSearch的實(shí)現(xiàn)方法

    Docker 簡單部署 ElasticSearch的實(shí)現(xiàn)方法

    這篇文章主要介紹了Docker 簡單部署 ElasticSearch的實(shí)現(xiàn)方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-09-09
  • 如何連接docker中的MySQL容器

    如何連接docker中的MySQL容器

    這篇文章主要介紹了如何連接docker中的MySQL容器問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • 如何讓docker中的mysql啟動(dòng)時(shí)自動(dòng)執(zhí)行sql語句

    如何讓docker中的mysql啟動(dòng)時(shí)自動(dòng)執(zhí)行sql語句

    這篇文章主要介紹了讓docker中的mysql啟動(dòng)時(shí)自動(dòng)執(zhí)行sql的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-09-09
  • docker python如何實(shí)現(xiàn)打包的方法

    docker python如何實(shí)現(xiàn)打包的方法

    這篇文章主要介紹了docker 打包python實(shí)現(xiàn)方法的相關(guān)資料,這里說明如今實(shí)現(xiàn),需要的朋友可以參考下
    2016-12-12
  • Docker如何固定IP設(shè)置的方法

    Docker如何固定IP設(shè)置的方法

    本篇文章主要介紹了Docker如何固定IP設(shè)置的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-07-07
  • Docker容器使用jenkins部署web項(xiàng)目(總結(jié))

    Docker容器使用jenkins部署web項(xiàng)目(總結(jié))

    這篇文章主要介紹了Docker容器使用jenkins部署web項(xiàng)目(總結(jié)),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-08-08
  • docker容器狀態(tài)轉(zhuǎn)換管理命令實(shí)例詳解

    docker容器狀態(tài)轉(zhuǎn)換管理命令實(shí)例詳解

    Docker容器只是一個(gè)運(yùn)行于宿主操作系統(tǒng)host?OS上的應(yīng)用進(jìn)程,所以你需要一個(gè)鏡像來運(yùn)行它,Docker鏡像以進(jìn)程的方式運(yùn)行時(shí)就叫做Docker容器,這篇文章主要給大家介紹了關(guān)于docker容器狀態(tài)轉(zhuǎn)換管理命令的相關(guān)資料,需要的朋友可以參考下
    2022-05-05
  • docker的harbor倉庫登錄問題小結(jié)

    docker的harbor倉庫登錄問題小結(jié)

    在使用Docker?Harbor時(shí),可能會(huì)因?yàn)樽C書信任問題或DNS解析問題導(dǎo)致登錄失敗,解決方法包括將自簽名證書添加到系統(tǒng)的可信證書存儲(chǔ)中,本文給大家介紹docker的harbor倉庫登錄問題,感興趣的朋友一起看看吧
    2024-09-09
  • CentOS7構(gòu)建docker-ce的過程詳解

    CentOS7構(gòu)建docker-ce的過程詳解

    使用CentOS 7.9系列的Linux操作系統(tǒng),從CentOS系統(tǒng)基礎(chǔ)配置開始,0到1快速構(gòu)建docker應(yīng)用,本文給大家分享CentOS7構(gòu)建docker-ce的過程,感興趣的朋友跟隨小編一起看看吧
    2024-05-05

最新評論

莱西市| 平阳县| 北流市| 黔西| 辽阳市| 日土县| 宣威市| 日土县| 高雄县| 肃宁县| 张掖市| 牟定县| 江陵县| 临城县| 朝阳区| 亚东县| 郎溪县| 土默特左旗| 衡山县| 星座| 红河县| 汪清县| 蒙山县| 英超| 平和县| 溆浦县| 天等县| 高邑县| 维西| 沛县| 红安县| 林州市| 普宁市| 安仁县| 饶平县| 寿宁县| 陆丰市| 仪陇县| 修水县| 吉隆县| 建德市|