0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

docker-compose配置文件內(nèi)容詳解以及常用命令介紹

馬哥Linux運(yùn)維 ? 來(lái)源:馬哥Linux運(yùn)維 ? 2024-12-02 09:29 ? 次閱讀

一、Docker Compose 簡(jiǎn)介

Docker Compose是一種用于定義和運(yùn)行多容器Docker應(yīng)用程序的工具。通過(guò)一個(gè)docker-compose.yml文件,您可以配置應(yīng)用程序需要的所有服務(wù)(例如:Web服務(wù)器、數(shù)據(jù)庫(kù)、緩存等)并輕松管理它們。

Docker Compose 使用的三個(gè)步驟:

使用 Dockerfile 定義應(yīng)用程序的環(huán)境。

使用 docker-compose.yml 定義構(gòu)成應(yīng)用程序的服務(wù),這樣它們可以在隔離環(huán)境中一起運(yùn)行。

最后,執(zhí)行 docker-compose up 命令來(lái)啟動(dòng)并運(yùn)行整個(gè)應(yīng)用程序。

二、docker-compose 安裝

此處我采用的是離線安裝方式。

首先下載 docker-compose 到本地,下載地址:https://github.com/docker/compose/

fb2f3676-ae3d-11ef-93f3-92fbcf53809c.png

fb43b81c-ae3d-11ef-93f3-92fbcf53809c.png

下載鏈接:https://github.com/docker/compose/releases/download/v2.30.1/docker-compose-linux-x86_64

如果直接點(diǎn)擊下載比較慢的話,建議復(fù)制鏈接地址到迅雷下載,這樣可能會(huì)快一些。下載完成后,把它上傳到 Linux 服務(wù)器,如下所示:

fb564f7c-ae3d-11ef-93f3-92fbcf53809c.png

接著把可執(zhí)行文件移到 Linux 系統(tǒng)命令目錄(/usr/local/bin/)下,并重命名為 “docker-compose” :

mv docker-compose-linux-x86_64 /usr/local/bin/docker-compose

fb5f7c64-ae3d-11ef-93f3-92fbcf53809c.png

授權(quán):

chmod +x /usr/local/bin/docker-compose

fb6cbc1c-ae3d-11ef-93f3-92fbcf53809c.png

驗(yàn)證是否安裝成功:

docker-compose --version

fb7a104c-ae3d-11ef-93f3-92fbcf53809c.png

如果能正常顯示出正確的版本號(hào),說(shuō)明安裝成功了。

如果需要卸載,直接刪除即可:

sudo rm /usr/local/bin/docker-compose

三、docker-compose常用命令

1、docker-compose up 命令

用法:

docker-compose up [options]

示例:

docker-compose up -d

功能:

創(chuàng)建并啟動(dòng)服務(wù)(容器):如果服務(wù)尚未創(chuàng)建,docker-compose up -d 會(huì)根據(jù) docker-compose.yml 文件中的定義創(chuàng)建并啟動(dòng)這些服務(wù)。

后臺(tái)運(yùn)行:-d 參數(shù)表示“detached”模式,即以分離模式運(yùn)行,服務(wù)會(huì)在后臺(tái)運(yùn)行,不會(huì)占用當(dāng)前終端。

重新創(chuàng)建容器:如果服務(wù)已經(jīng)存在且正在運(yùn)行,docker-compose up -d 會(huì)先停止并刪除現(xiàn)有的容器,然后重新創(chuàng)建并啟動(dòng)新的容器。

構(gòu)建鏡像:如果配置文件中指定了 build 指令,docker-compose up -d 會(huì)先構(gòu)建所需的 Docker 鏡像。

檢查配置:在啟動(dòng)服務(wù)之前,docker-compose up -d 會(huì)檢查并驗(yàn)證 docker-compose.yml 文件中的配置。

使用場(chǎng)景:

首次部署:當(dāng)你第一次部署服務(wù)時(shí),使用 docker-compose up -d 可以確保所有服務(wù)都按最新配置創(chuàng)建并啟動(dòng)。

更新服務(wù):當(dāng)你修改了 docker-compose.yml 文件中的配置或鏡像,使用 docker-compose up -d 可以確保這些更改生效。

確保最新?tīng)顟B(tài):無(wú)論服務(wù)是否已經(jīng)存在,docker-compose up -d 都會(huì)確保服務(wù)是最新的狀態(tài)。

用于部署一個(gè) Compose 應(yīng)用。

默認(rèn)情況下該命令會(huì)讀取名為 docker-compose.yml 或 docker-compose.yaml 的文件。

當(dāng)然用戶也可以使用 -f 指定其他文件名。通常情況下,會(huì)使用 -d 參數(shù)令應(yīng)用在后臺(tái)啟動(dòng)。

2、docker-compose down 命令

用法:

docker-compose down [options]

功能:

docker-compose down -v 命令用于停止并移除使用 docker-compose.yml 文件定義的所有容器、網(wǎng)絡(luò)、卷(通過(guò) -v 參數(shù)指定的數(shù)據(jù)卷)以及默認(rèn)的網(wǎng)絡(luò)橋接。

使用 -v 參數(shù)會(huì)刪除所有命名的數(shù)據(jù)卷。這可能會(huì)導(dǎo)致數(shù)據(jù)丟失,因此在執(zhí)行前請(qǐng)確保已經(jīng)做好了必要的備份。

使用場(chǎng)景:

適用于徹底清理環(huán)境,例如在開(kāi)發(fā)過(guò)程中需要重置環(huán)境或者測(cè)試不同配置時(shí)。

完全重置環(huán)境:當(dāng)你需要完全重置開(kāi)發(fā)環(huán)境,確保沒(méi)有任何遺留數(shù)據(jù)時(shí),可以使用 docker-compose down -v。

測(cè)試環(huán)境清理:在自動(dòng)化測(cè)試中,每次測(cè)試結(jié)束后使用 docker-compose down -v 可以確保環(huán)境干凈,不受上次測(cè)試的影響。

部署前清理:在部署新版本應(yīng)用之前,使用 docker-compose down -v 可以確保沒(méi)有舊版本的殘留數(shù)據(jù)。

選項(xiàng):

--rmi :刪除鏡像。type 可以是以下值之一:

all:刪除所有服務(wù)的鏡像。

local:僅刪除那些不帶有 :(表示鏡像標(biāo)簽)或 latest 標(biāo)簽的鏡像(通常是構(gòu)建時(shí)創(chuàng)建的鏡像)。

-v 或 --volumes:移除所有為服務(wù)定義的卷(包括默認(rèn)卷和命名卷)。

--rmi-all:等同于 --rmi all,刪除所有服務(wù)的鏡像。

-h, --help:顯示幫助信息。

示例:

1)停止并移除容器、網(wǎng)絡(luò)和默認(rèn)網(wǎng)絡(luò)

docker-compose down

2)停止并移除容器、網(wǎng)絡(luò)、卷以及鏡像

docker-compose down --volumes --rmi all

3)僅移除構(gòu)建時(shí)創(chuàng)建的本地鏡像

docker-compose down --rmi local

4)指定配置文件

docker-compose -f my-compose-file.yml down

注意事項(xiàng):

使用 docker-compose down --volumes 會(huì)刪除所有在 docker-compose.yml 文件中定義的卷,包括默認(rèn)卷和命名卷。如果你不想刪除這些卷,請(qǐng)不要使用這個(gè)選項(xiàng)。

刪除鏡像操作是不可逆的,請(qǐng)確保在刪除鏡像之前備份必要的數(shù)據(jù)。

如果你使用 Docker Compose 來(lái)管理多個(gè)環(huán)境(例如開(kāi)發(fā)、測(cè)試和生產(chǎn)環(huán)境),請(qǐng)確保你在正確的環(huán)境中運(yùn)行 docker-compose down 命令,以避免誤刪重要數(shù)據(jù)。

3、docker-compose stop 命令

docker-compose stop

停止 Compose 應(yīng)用相關(guān)的所有容器,但不會(huì)刪除它們。

被停止的應(yīng)用可以很容易地通過(guò) docker-compose restart 命令重新啟動(dòng)。

docker-compose stop 命令用于停止通過(guò) docker-compose.yml 文件定義并啟動(dòng)的所有容器。這個(gè)命令不會(huì)移除容器、網(wǎng)絡(luò)或卷,它只是停止了容器的運(yùn)行。

4、docker-compose start 命令

docker-compose start

docker-compose start 命令用于啟動(dòng)之前已經(jīng)創(chuàng)建但已停止的容器。

5、docker-compose restart 命令

docker-compose restart

重啟已停止的 Compose 應(yīng)用。

如果用戶在停止該應(yīng)用后對(duì)其進(jìn)行了變更,那么變更的內(nèi)容不會(huì)反映在重啟后的應(yīng)用中,這時(shí)需要重新部署應(yīng)用使變更生效。

6、docker-compose ps 命令

docker-compose ps

用于列出 Compose 應(yīng)用中的各個(gè)容器。

輸出內(nèi)容包括當(dāng)前狀態(tài)、容器運(yùn)行的命令以及網(wǎng)絡(luò)端口

7、docker-compose rm 命令

用于刪除已停止的 Compose 應(yīng)用。它會(huì)刪除容器和網(wǎng)絡(luò),但是不會(huì)刪除卷和鏡像。

語(yǔ)法:

docker-compose rm [OPTIONS] [SERVICE...]

選項(xiàng):

-f, --file FILE:指定使用的 Compose 配置文件,默認(rèn)為 docker-compose.yml。

-v, --volumes:刪除容器的同時(shí)刪除由 docker-compose.yml 文件定義的卷(如果它們存在并且是容器專用的)。

-a, --all:刪除所有服務(wù)容器,而不僅僅是停止的容器。默認(rèn)情況下,docker-compose rm 只刪除停止的容器。

--rmi TYPE:刪除鏡像。這個(gè)選項(xiàng)會(huì)刪除構(gòu)建鏡像時(shí)產(chǎn)生的中間鏡像和構(gòu)建緩存。TYPE 可以是 all(刪除所有鏡像)、local(只刪除本地鏡像)或 built(只刪除通過(guò) docker-compose 構(gòu)建的鏡像)。

-s, --stop:在刪除容器之前先停止它們。這是默認(rèn)行為,可以通過(guò)添加 --no-stop 標(biāo)志來(lái)覆蓋。

--no-stop:在刪除容器之前不停止它們(通常與 -f 一起使用)。

示例:

1)刪除所有停止的容器

docker-compose rm

這個(gè)命令會(huì)刪除所有在 docker-compose.yml 文件中定義且當(dāng)前已停止的容器。

2)刪除所有容器

docker-compose rm -a

這個(gè)命令會(huì)刪除所有在 docker-compose.yml 文件中定義的容器,無(wú)論它們是運(yùn)行中的還是已停止的。

3)刪除容器和卷

docker-compose rm -v

這個(gè)命令會(huì)刪除所有已停止的容器以及由 docker-compose.yml 文件定義的卷(如果它們存在并且是容器專用的)。

4)使用指定的 Compose 配置文件

docker-compose -f my-compose.yml rm

這個(gè)命令會(huì)使用 my-compose.yml 文件來(lái)刪除容器。

5)刪除鏡像

docker-compose rm --rmi local

這個(gè)命令會(huì)刪除所有通過(guò) docker-compose 構(gòu)建且在本地存在的鏡像。

注意事項(xiàng):

使用 docker-compose rm 命令時(shí),請(qǐng)確保你確實(shí)想要?jiǎng)h除這些容器,因?yàn)閯h除后的數(shù)據(jù)(除非已備份到卷中)將不可恢復(fù)。

如果容器正在運(yùn)行,你需要先停止它們,或者使用 -s 或 --stop 選項(xiàng)來(lái)確保在刪除之前先停止它們。

8、docker-compose logs 命令

docker-compose logs 命令用于查看 Docker Compose 應(yīng)用中各個(gè)服務(wù)的日志。這個(gè)命令非常有用,因?yàn)樗梢詭椭阍\斷問(wèn)題或監(jiān)視服務(wù)的行為。

基本用法:

docker-compose logs [options] [SERVICE...]

SERVICE(可選):指定要查看日志的服務(wù)名稱。如果未指定,則顯示所有服務(wù)的日志。

常用選項(xiàng):

--follow, -f:實(shí)時(shí)跟蹤日志輸出,類似于 tail -f。

--tail, -t "all":顯示日志的最后幾行。默認(rèn)值是 all,也可以指定一個(gè)數(shù)字。

--no-color:禁用顏色輸出,使日志更適合重定向到文件或其他工具。

--timestamps, -T:在日志輸出中包含時(shí)間戳。

示例:

1)查看所有服務(wù)的日志

docker-compose logs

2)查看特定服務(wù)的日志

docker-compose logs web

3)查看特定服務(wù)的最后10行日志

docker-compose logs --tail 10 web

4)查看所有服務(wù)的日志并包含時(shí)間戳

docker-compose logs -T

9、使用多個(gè)Compose文件

你可以將配置拆分為多個(gè)文件:

docker-compose -f docker-compose.yml -f docker-compose.prod.yml up

四、docker-compose.yml 配置詳解

1、Compose配置文件格式版本與Docker引擎的兼容性表

Compose file format Docker Engine release
Compose specification 19.03.0+
3.8 19.03.0+
3.7 18.06.0+
3.6 18.02.0+
3.5 17.12.0+
3.4 17.09.0+
3.3 17.06.0+
3.2 17.04.0+
3.1 1.13.1+
3.0 1.13.0+
2.4 17.12.0+
2.3 17.06.0+
2.2 1.13.0+
2.1 1.12.0+
2.0 1.10.0+

2、頂級(jí)配置項(xiàng)

version 定義了版本信息

services 定義了服務(wù)的配置信息

networks 定義了網(wǎng)絡(luò)信息,提供給 services 中的 具體容器使用

volumes 定義了卷信息,提供給 services 中的 具體容器使用

示例:

version: "3.8" # Compose文件版本
services:
  redis: # 服務(wù)名稱
    image: redis:alpine # 使用的鏡像
    ports:
      - "6379" # 指定的端口
    networks:
      - frontend # 使用的網(wǎng)絡(luò)
    deploy:
      replicas: 2
      update_config:
        parallelism: 2
        delay: 10s
      restart_policy:
        condition: on-failure


  db:
    image: postgres:9.4
    volumes:
      - db-data:/var/lib/postgresql/data
    networks:
      - backend


  result:
    image: nginx
    ports:
      - "5001:80"
    networks:
      - backend
    depends_on:
      - db
    deploy:
      replicas: 1
      update_config:
        parallelism: 2
        delay: 10s
      restart_policy:
        condition: on-failure


  worker:
    image: nginx
    networks:
      - frontend
      - backend
    deploy:
      mode: replicated
      replicas: 1
      labels: [APP=VOTING]
      restart_policy:
        condition: on-failure
        delay: 10s
        max_attempts: 3
        window: 120s


networks:
  frontend:
  backend:
volumes:
  db-data:

3、version 常用版本

指定Docker Compose文件格式的版本。常用版本為3.8,3.7等。

4、services 配置指令

1)container_name

指定自定義容器名稱,而不是生成的默認(rèn)名稱。

version: "3.8"
services:


  redis:
    image: redis:alpine
    container_name: redis_test

2)image

指定容器運(yùn)行的鏡像名稱或鏡像 ID。如果鏡像在本地不存在,Compose 將會(huì)嘗試?yán)∵@個(gè)鏡像。

version: "3.8"
services:

  redis:
    image: redis:alpine

3)build

指定 Dockerfile 所在文件夾的路徑(可以是絕對(duì)路徑,或者相對(duì) docker-compose.yml 文件的路徑)。Compose 將會(huì)利用它自動(dòng)構(gòu)建這個(gè)鏡像,然后使用這個(gè)鏡像。

version: '3.8'
services:
  webapp:
    build: ./dir

也可以使用 context 指令指定 Dockerfile 所在文件夾的路徑(或者是git倉(cāng)庫(kù)的URL)。同時(shí)使用 dockerfile 指令指定 Dockerfile 文件名。

version: '3.8'
services:


  webapp: #自定義發(fā)我名稱 ,主要用查詢
    build:
      context: ./dir
      dockerfile: Dockerfile-name

注意:

如果同時(shí)指定了 image和 build, image 不在具有單獨(dú)使用它的意義,而是指定了目前要構(gòu)建的鏡像的名稱。也就是說(shuō) Compose 會(huì)使用 build 指令中指定的 Dockerfile 構(gòu)建的鏡像,之后構(gòu)建的鏡像名稱使用 image 中指定的名字 webapp:tag命名。

4)command

使用 command 可以覆蓋容器啟動(dòng)后默認(rèn)執(zhí)行的命令。

# 寫成shell形式
command: bundle exec thin -p 3000

# 寫成Dockerfile中的exec格式
command: [bundle, exec, thin, -p, 3000]

5)depends_on

設(shè)置依賴關(guān)系。解決容器的依賴、啟動(dòng)先后的問(wèn)題。

version: "3.8"
services:
  web:
    build: .
    depends_on:
      - db
      - redis
  redis:
    image: redis
  db:
    image: postgres

注意:web 服務(wù)不會(huì)等待 redis 和 db 完全啟動(dòng) 之后才啟動(dòng)。

6)environment

添加環(huán)境變量。您可以使用數(shù)組或字典、任何布爾值,布爾值需要用引號(hào)引起來(lái),以確保 YML 解析器不會(huì)將其轉(zhuǎn)換為 True 或 False。

environment:
  RACK_ENV: development
  SHOW: 'true'

如果變量名稱或者值中用到 true|false,yes|no 等表達(dá)布爾含義的詞匯,最好放到引號(hào)里,避免 YAML 自動(dòng)解析某些內(nèi)容為對(duì)應(yīng)的布爾語(yǔ)義。這些特定詞匯如下:

y|Y|yes|Yes|YES|n|N|no|No|NO|true|True|TRUE|false|False|FALSE|on|On|ON|off|Off|OFF

7)expose

暴露端口,但不映射到宿主機(jī),只被連接的服務(wù)訪問(wèn)。

僅可以指定內(nèi)部端口為參數(shù):

expose:
 - "3000"
 - "8000"

8)ports

映射端口信息。

宿主機(jī)端口 : 容器端口 (即:HOST:CONTAINER) 的格式,或者僅僅指定容器的端口(宿主機(jī)將會(huì)隨機(jī)選擇端口)。


ports:
 - "3000"
 - "3000-3005"
 - "8000:8000"
 - "9090-9091:8080-8081"
 - "49100:22"
 - "127.0.0.18001"
 - "127.0.0.15000-5010"
 - "6060:6060/udp"

注意:當(dāng)使用 HOST:CONTAINER 格式來(lái)映射端口時(shí),如果你使用的容器端口小于 60 并且沒(méi)放到引號(hào)里,可能會(huì)得到錯(cuò)誤結(jié)果,因?yàn)?YAML 會(huì)自動(dòng)解析 xx:yy 這種數(shù)字格式為 60 進(jìn)制。為避免出現(xiàn)這種問(wèn)題,建議數(shù)字串都采用引號(hào)括起來(lái)的字符串格式。

9)extra_hosts

添加主機(jī)名映射。類似 docker client --add-host。

extra_hosts:
 - "somehost:162.242.195.82"
 - "otherhost:50.31.209.229"

以上會(huì)在此服務(wù)的內(nèi)部容器中 /etc/hosts 創(chuàng)建一個(gè)具有 ip 地址和主機(jī)名的映射關(guān)系:

162.242.195.82  somehost
50.31.209.229   otherhost

10)networks

配置容器連接的網(wǎng)絡(luò),引用頂級(jí) networks 下的條目 。


services:
  some-service:
    networks:
      some-network:
        aliases:
         - alias1
      other-network:
        aliases:
         - alias2
networks:
  some-network:
    # Use a custom driver
    driver: custom-driver-1
  other-network:
    # Use a custom driver which takes special options
    driver: custom-driver-2

11)entrypoint

指定服務(wù)容器啟動(dòng)后執(zhí)行的入口文件。

12)user

指定容器中運(yùn)行應(yīng)用的用戶名。

13)working_dir

指定容器中工作目錄。

14)restart

restart:

no:是默認(rèn)的重啟策略,在任何情況下都不會(huì)重啟容器。

always:容器總是重新啟動(dòng)。

on-failure:在容器非正常退出時(shí)(退出狀態(tài)非0),才會(huì)重啟容器。

unless-stopped:在容器退出時(shí)總是重啟容器,但是不考慮在Docker守護(hù)進(jìn)程啟動(dòng)時(shí)就已經(jīng)停止了的容器

restart: "no"
restart: always
restart: on-failure
restart: unless-stopped

指定容器退出后的重啟策略為始終重啟。該命令對(duì)保持服務(wù)始終運(yùn)行十分有效,在生產(chǎn)環(huán)境 中推薦配置為 always 或者 unless-stopped 。

restart: always

注:swarm 集群模式,請(qǐng)改用 restart_policy。

15)aliases

aliases :同一網(wǎng)絡(luò)上的其他容器可以使用服務(wù)名稱或此別名來(lái)連接到對(duì)應(yīng)容器的服務(wù)。


services:
  some-service:
    networks:
      some-network:
        aliases:
         - alias1
         - alias3
      other-network:
        aliases:
         - alias2

16)healthcheck

用于檢測(cè) docker 服務(wù)是否健康運(yùn)行。


services:
  web:
    image: nginx
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost"] # 設(shè)置檢測(cè)程序
      interval: 1m30s # 設(shè)置檢測(cè)間隔
      timeout: 10s # 設(shè)置檢測(cè)超時(shí)時(shí)間
      retries: 3 # 設(shè)置重試次數(shù)
      start_period: 40s # 啟動(dòng)后,多少秒開(kāi)始啟動(dòng)檢測(cè)程序

17)env_file

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

env_file: .env

也可以是列表格式:

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

18)Compose中的環(huán)境變量

你可以使用.env文件設(shè)置docker-compose.yml中使用的變量:

version: '3.8'
services:
  web:
    image: nginx
    ports:
      - "${HOST_PORT}:80"

.env文件:

HOST_PORT=8080

5、volumes 配置指令

將主機(jī)的數(shù)據(jù)卷或者文件掛載到容器里。

version: "3.8"
services:
  db:
    image: postgres:latest
    volumes:
      - "/localhost/postgres.sock:/var/run/postgres/postgres.sock"
      - "/localhost/data:/var/lib/postgresql/data"

數(shù)據(jù)卷所掛載路徑設(shè)置??梢栽O(shè)置宿主機(jī)路徑 (HOST:CONTAINER) 或加上訪問(wèn)模式 (HOSTro)。

該指令中路徑支持相對(duì)路徑:

volumes:
 - /var/lib/mysql
 - cache/:/tmp/cache
 - ~/configs:/etc/configs/:ro

6、networks 配置指令

1)未顯式聲明網(wǎng)絡(luò)環(huán)境

使用docker-compose up啟動(dòng)容器后,這些容器都會(huì)被加入app_default網(wǎng)絡(luò)中。使用docker network ls可以查看網(wǎng)絡(luò)列表,docker network inspect 可以查看對(duì)應(yīng)網(wǎng)絡(luò)的配置。

version: '3'
services:
  web:
    mage: nginx:latest
    container_name: web
    depends_on:
      - db
    ports:
      - "9090:80"
    links:
      - db
  db:
    image: mysql
    container_name: db

2)networks關(guān)鍵字指定自定義網(wǎng)絡(luò)

例如:下面的docker-compose.yml文件,定義了front和back網(wǎng)絡(luò),實(shí)現(xiàn)了網(wǎng)絡(luò)隔離。其中proxy和db之間只能通過(guò)app來(lái)實(shí)現(xiàn)通信。其中,custom-driver-1并不能直接使用,你應(yīng)該替換為host, bridge, overlay等選項(xiàng)中的一種。

version: '3.8'


services:
  proxy:
    build: ./proxy
    networks:
      - front
  app:
    build: ./app
    networks:
      - front
      - back
  db:
    image: postgres
    networks:
      - back


networks:
  front:
    # Use a custom driver
    driver: custom-driver-1
  back:
    # Use a custom driver which takes special options
    driver: custom-driver-2
    driver_opts:
      foo: "1"
      bar: "2"


3)配置默認(rèn)網(wǎng)絡(luò)

version: '3.8'


services:
  web:
    build: .
    ports:
      - "8000:8000"
  db:
    image: postgres


networks:
  default:
    # Use a custom driver
    driver: custom-driver-1

4)使用已存在的網(wǎng)絡(luò)


networks:
  default:
    external:
      name: my-pre-existing-network

五、最佳實(shí)踐

保持docker-compose.yml簡(jiǎn)潔:使用多個(gè)文件來(lái)分離開(kāi)發(fā)和生產(chǎn)配置。

版本控制:將你的docker-compose.yml放入版本控制系統(tǒng)中,以管理跨環(huán)境的配置。

使用命名卷:確保數(shù)據(jù)在容器重啟后依然存在。

version: '3.8'  # 指定Compose文件的版本


services:  # 定義多個(gè)服務(wù)
  web:  # Web服務(wù),通常是前端或后端的應(yīng)用
    image: nginx:latest  # 使用Nginx鏡像
    ports:
      - "80:80"  # 將容器的80端口映射到主機(jī)的80端口
    volumes:
      - ./web:/usr/share/nginx/html  # 掛載本地目錄到容器中
    environment:
      - NGINX_HOST=localhost  # 設(shè)置環(huán)境變量
      - NGINX_PORT=80
    networks:
      - frontend  # 連接到前端網(wǎng)絡(luò)
    depends_on:
      - app  # 該服務(wù)將在'app'服務(wù)啟動(dòng)后才啟動(dòng)
    restart: always  # 在容器崩潰后總是重啟


  app:  # 應(yīng)用服務(wù),可以是任何語(yǔ)言的后端服務(wù)
    build:  # 從Dockerfile構(gòu)建鏡像
      context: ./app  # Dockerfile所在的目錄
      dockerfile: Dockerfile  # 使用的Dockerfile名稱
    ports:
      - "3000:3000"  # 將容器的3000端口映射到主機(jī)的3000端口
    volumes:
      - ./app:/usr/src/app  # 掛載本地代碼目錄到容器中
    environment:
      - NODE_ENV=development  # 設(shè)置環(huán)境變量
      - PORT=3000
    networks:
      - frontend  # 連接到前端網(wǎng)絡(luò)
      - backend  # 連接到后端網(wǎng)絡(luò)
    depends_on:
      - db  # 該服務(wù)將在'db'服務(wù)啟動(dòng)后才啟動(dòng)
    restart: on-failure  # 僅在容器非正常退出時(shí)重啟


  db:  # 數(shù)據(jù)庫(kù)服務(wù),使用MySQL
    image: mysql:5.7  # 使用MySQL 5.7鏡像
    volumes:
      - db_data:/var/lib/mysql  # 持久化MySQL數(shù)據(jù)到命名卷
    environment:
      MYSQL_ROOT_PASSWORD: example  # MySQL root用戶的密碼
      MYSQL_DATABASE: example_db  # 自動(dòng)創(chuàng)建的數(shù)據(jù)庫(kù)名稱
      MYSQL_USER: user  # 創(chuàng)建的用戶名稱
      MYSQL_PASSWORD: password  # 用戶密碼
    networks:
      - backend  # 連接到后端網(wǎng)絡(luò)
    restart: unless-stopped  # 僅在手動(dòng)停止時(shí)不重啟


volumes:  # 定義命名卷,用于數(shù)據(jù)持久化
  db_data:  # MySQL數(shù)據(jù)卷


networks:  # 定義自定義網(wǎng)絡(luò)
  frontend:  # 前端網(wǎng)絡(luò),連接web和app服務(wù)
  backend:  # 后端網(wǎng)絡(luò),連接app和db服務(wù)

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 應(yīng)用程序
    +關(guān)注

    關(guān)注

    38

    文章

    3309

    瀏覽量

    58334
  • Docker
    +關(guān)注

    關(guān)注

    0

    文章

    498

    瀏覽量

    12336

原文標(biāo)題:docker-compose 配置文件內(nèi)容詳解以及常用命令介紹

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 0人收藏

    評(píng)論

    相關(guān)推薦

    Docker常用命令大全

    Docker----常用命令大全
    發(fā)表于 05-30 16:13

    docker常用命令有哪些?

    docker常用命令Docker鏡像相關(guān)Docker容器相關(guān)Docker倉(cāng)庫(kù)相關(guān)
    發(fā)表于 11-06 06:48

    vim常用命令

    vim常用命令
    發(fā)表于 01-08 15:59 ?3次下載

    redis常用命令總結(jié)

    本文是對(duì)redis常用命令總結(jié)。
    發(fā)表于 02-09 11:25 ?1656次閱讀

    SQL的常用命令使用方法詳細(xì)說(shuō)明

    本文檔的主要內(nèi)容詳細(xì)介紹的是SQL的常用命令使用方法詳細(xì)說(shuō)明
    發(fā)表于 10-12 16:21 ?12次下載
    SQL的<b class='flag-5'>常用命令</b>使用方法詳細(xì)說(shuō)明

    SQL的常用命令詳細(xì)說(shuō)明

    本文檔的主要內(nèi)容詳細(xì)介紹的是SQL的常用命令詳細(xì)說(shuō)明。
    發(fā)表于 10-15 17:24 ?11次下載

    SQL Plus的常用命令與用戶管理實(shí)驗(yàn)說(shuō)明

    本文檔的主要內(nèi)容詳細(xì)介紹的是SQL Plus的常用命令與用戶管理實(shí)驗(yàn)說(shuō)明。
    發(fā)表于 10-30 17:19 ?8次下載

    云計(jì)算核心技術(shù)Docker教程:Docker Compose的pull和push命令詳解

    Docker-Compose pull命令可以拉取docker-compose.yml或者docker-stack.yml文件中定義的服務(wù)關(guān)
    的頭像 發(fā)表于 11-17 18:22 ?9419次閱讀

    linux常用命令手冊(cè)

    linux常用命令手冊(cè)免費(fèi)下載。
    發(fā)表于 06-01 14:59 ?68次下載

    DOS系統(tǒng)常用命令

    介紹了DOS系統(tǒng)的常用命令。
    發(fā)表于 03-21 14:59 ?0次下載

    Linux常用命令

    Linux常用命令
    的頭像 發(fā)表于 01-12 11:19 ?1245次閱讀

    Linux常用命令手冊(cè)分享

    linux常用命令合集
    發(fā)表于 04-26 11:46 ?1次下載

    linux常用命令及用法

    Linux是一種開(kāi)源的操作系統(tǒng),它以穩(wěn)定、高效和安全的特點(diǎn)受到廣大用戶的喜愛(ài)。掌握Linux的常用命令及其用法對(duì)于操作系統(tǒng)的管理和開(kāi)發(fā)都至關(guān)重要。本文將詳盡、詳實(shí)、細(xì)致地介紹Linux常用命令及其
    的頭像 發(fā)表于 11-17 09:47 ?800次閱讀

    如何利用樹(shù)莓派安裝DockerDocker-compose呢?

    本文主要演示了樹(shù)莓派如何安裝DockerDocker-compose的過(guò)程。
    的頭像 發(fā)表于 12-14 16:19 ?3279次閱讀
    如何利用樹(shù)莓派安裝<b class='flag-5'>Docker</b>和<b class='flag-5'>Docker-compose</b>呢?

    詳解kubectl常用命令

    詳解kubectl常用命令
    的頭像 發(fā)表于 11-05 15:39 ?798次閱讀
    <b class='flag-5'>詳解</b>kubectl<b class='flag-5'>常用命令</b>

    電子發(fā)燒友

    中國(guó)電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會(huì)員交流學(xué)習(xí)
    • 獲取您個(gè)性化的科技前沿技術(shù)信息
    • 參加活動(dòng)獲取豐厚的禮品