附005.Docker Compose文件詳解

一 Docker Compose文件簡介

compose文件使用yml格式,主要分為了四個區域:
  • version:用于指定當前docker-compose.yml語法遵循哪個版本
  • services:服務,在它下面可以定義應用需要的一些服務,每個服務都有自己的名字、使用的鏡像、掛載的數據卷、所屬的網絡、依賴哪些其他服務等等。
  • networks:應用的網絡,在它下面可以定義應用的名字、使用的網絡類型等。
  • volumes:數據卷,在它下面可以定義數據卷,然后掛載到不同的服務下去使用。

二 Docker Compose文件詳解

2.1 version字段

用于指定當前compose文件語法遵循哪個版本,Compose文件版本支持特定的Docker版本列表如下:
Compose文件格式
Docker Engine版本
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+
1.0
1.9.1.+
示例:version: "3"

2.2 services區域

所有服務的定義都是定義在services區域中,services常用的配置項如下:
image:指定要啟動容器的映像。可以是一個repository/tag或鏡像ID來表明。
示例:
image: redis image: ubuntu:14.04 image: tutum/influxdb image: example-registry.com:4000/postgresql image: a4bc65fd
提示:image可以是本地也可以是遠程的,如果本地不存在,compose會嘗試pull下來,肉使用了build手動構建鏡像,則使用指定的選項構建它,并使用指定的標簽標記它。
build:該參數指定Dockerfile文件的路徑,compose會通過Dockerfile構建并生成鏡像,然后使用該鏡像
示例:
  1 version: '3'
  2 services:
  3   webapp:
  4     build: ./dir
  5     image: webapp:tag
提示:如果在構建鏡像的時候你指定相關名字和tag,則生成指定的鏡像和tag。
command:重寫默認的命令,即指定啟動容器的命令。
示例:
command: bundle exec thin -p 3000 或
command: ["bundle", "exec", "thin", "-p", "3000"]
links:鏈接到其他服務中的容器,可以指定服務名稱和這個鏈接的別名,或者只指定服務名稱。
示例:
  1 web:
  2   links:
  3    - db
  4    - db:database
  5    - redis
此時,在容器內部,會在/etc/hosts文件中用別名創建幾個條目,如下:
  1 172.17.2.100 db
  2 172.17.2.100 database
  3 172.17.2.100 redis
external_links:鏈接到compose外部啟動的容器,特別是對于提供共享和公共服務的容器。在指定容器名稱和別名時,external_links遵循著和links相同的語義用法。
示例:
  1 external_links:
  2  - redis_1
  3  - project_db_1:mysql
  4  - project_db_1:postgresql
ports:暴露端口,指定宿主機到容器的端口映射,或者只指定容器的端口,則表示映射到主機上的隨機端口。
提示:注意:以HOST:CONTAINER格式映射端口時,使用低于60的容器端口時可能會遇到錯誤的結果,因為YAML會將格式xx:yy中的數字解析為base-60值。因此,我們建議始終將端口映射明確指定為字符串。
示例:
  1 ports:
  2  - "3000"
  3  - "3000-3005"
  4  - "8000:8000"
  5  - "9090-9091:8080-8081"
  6  - "49100:22"
  7  - "127.0.0.1:8001:8001"
  8  - "127.0.0.1:5000-5010:5000-5010"
  9  - "6060:6060/udp"
示例2:
  1 ports:
  2   - target: 80
  3     published: 8080
  4     protocol: tcp
  5     mode: host
解釋:長格式語法允許配置無法以簡短形式表示的其他字段。
  • target:容器內的端口
  • published:公開暴露的港口
  • protocol:端口協議(tcp或udp)
  • mode:host用于在每個節點上發布主機端口,或者ingress用于負載平衡的群集模式端口。
expose:暴露端口,但不需要建立與宿主機的映射,只是會向鏈接的服務提供,只能指定內部端口。
示例:
  1 expose:
  2  - "3000"
  3  - "8000"
environment:加入環境變量,可以使用數組或者字典,只有一個key的環境變量可以在運行compose的機器上找到對應的值。
提示:任何布爾值; true,false,yes no,需要用引號括起來,以確保YML解析器不會將它們轉換為True或False。
示例:
  1 environment:
  2   RACK_ENV: development
  3   SHOW: 'true'
  4   SESSION_SECRET:
  5 environment:
  6   - RACK_ENV=development
  7   - SHOW=true
  8   - SESSION_SECRET
env_file:從一個文件中引入環境變量,該文件可以是一個單獨的值或者一個列表,如果同時定義了environment,則environment中的環境變量會重寫這些值。
示例:
  1 env_file: .env
  2 
  3 env_file:
  4   - ./common.env
  5   - ./apps/web.env
  6   - /opt/secrets.env
提示:列表中文件的順序對于確定分配給多次顯示的變量的值非常重要。列表中的文件從上到下進行處理。對于在文件中指定的相同變量a.env并在文件中 分配不同的值b.env,如果b.env列在下面(后),則來自b.envstand 的值。
如:給出以下聲明docker_compose.yml:
  1 services:
  2   some-service:
  3     env_file:
  4       - a.env
  5       - b.env
以下文件:
# a.env VAR=1
# b.env VAR=hello
則$VAR是hello。
depends_on:指定與部署和運行服務相關的配置。
示例:
  1 version: '3'
  2 services:
  3   web:
  4     build: .
  5     depends_on:
  6       - db
  7       - redis
  8   redis:
  9     image: redis
 10   db:
 11     image: postgres
服務依賴關系之間的Express依賴關系會導致以下行為:
  • docker-compose up:以依賴順序啟動服務,在以上示例中,db和redis之在web之前啟動。
  • docker-compose up SERVICE:自動包含SERVICE依賴項。在以上示例中,docker-compose up web還創建并啟動db和redis。
deploy:指定與部署和運行服務相關的配置。
示例:
  1 version: '3'
  2 services:
  3   redis:
  4     image: redis:alpine
  5     deploy:
  6       labels:
  7  com.example.description: "This label will appear on all containers for the web service"
  8       resources:
  9         limits:
 10           cpus: '0.50'
 11           memory: 50M
 12         reservations:
 13           cpus: '0.25'
 14           memory: 20M
 15       replicas: 6
 16       update_config:
 17         parallelism: 2
 18         delay: 10s
 19       update_config:
 20         parallelism: 2
 21         delay: 10s
 22         order: stop-first
 23       restart_policy:
 24         condition: on-failure
 25         delay: 5s
 26         max_attempts: 3
 27         window: 120s
子選項說明:
labels:指定服務的標簽。這些標簽僅在服務上設置,而不是在服務的任何容器上設置。
mode:global:每個集群節點只有一個容器,默認為replicated。
resources:資源限制,如上所示:redis服務被限制為使用不超過50M的內存和0.50(50%)的CPU時間,并且保留20M了內存和0.25CPU時間(始終可用)。
replicas:指定replicated后,或默認情況下課使用replicas指定副本數,
restart_policy:配置是否以及如何在容器退出時重新啟動容器,包括:
  • condition:其中之一none,on-failure或any(默認:) any。
  • delay:重新啟動嘗試之間等待的時間,指定為持續時間(默認值:0)。
  • max_attempts:在放棄之前嘗試重新啟動容器的次數(默認值:永不放棄)。如果在配置中未成功重新啟動 window,則此嘗試不會計入配置的max_attempts值。例如,如果max_attempts設置為“2”,并且第一次嘗試時重新啟動失敗,則可能會嘗試重新啟動兩次以上。
  • window:在決定重啟是否成功之前等待多長時間,指定為持續時間(默認值:立即決定)。
rollback_config:配置在更新失敗的情況下應如何回滾服務。
  • parallelism:一次回滾的容器數。如果設置為0,則所有容器同時回滾。
  • delay:每個容器組的回滾之間等待的時間(默認為0)。
  • failure_action:如果回滾失敗該怎么辦。一個continue或pause(默認pause)
  • monitor:每次更新任務后的持續時間以監視失敗(ns|us|ms|s|m|h)(默認為0)。
  • max_failure_ratio:回滾期間容忍的失敗率(默認值為0)。
  • order:回滾期間的操作順序。其中之一stop-first(舊任務在啟動新任務之前停止),或者start-first(首先啟動新任務,并且正在運行的任務暫時重疊)(默認stop-first)。
update_config:配置服務應如何更新,用于配置滾動更新。
  • parallelism:一次更新的容器數。
  • delay:更新一組容器之間的等待時間。
  • failure_action:更新失敗時的行為。其中一個continue,rollback或者pause (默認:pause)。
  • monitor:每次更新任務后的持續時間以監視失敗(ns|us|ms|s|m|h)(默認為0)。
  • max_failure_ratio:更新期間容忍的故障率。
  • order:更新期間的操作順序。其中一個stop-first(舊任務在啟動新任務之前停止),或者start-first(首先啟動新任務,并且正在運行的任務暫時重疊)(默認stop-first)注意:僅支持v3.4及更高版本。
注意:order僅支持v3.4及更高版本的撰寫文件格式。
healthcheck:配置運行的檢查以確定此服務的容器是否“健康”。
示例:
  1 healthcheck:
  2   test: ["CMD", "curl", "-f", "http://localhost"]
  3   interval: 1m30s
  4   timeout: 10s
  5   retries: 3
  6   start_period: 40s
提示:healthcheck可參考:https://docs.docker.com/engine/reference/builder/#healthcheck
network_mode:網絡類型,可指定容器運行的網絡類型
示例:
  1 network_mode: "bridge"
  2 network_mode: "host"
  3 network_mode: "none"
  4 network_mode: "service:[service name]"
  5 network_mode: "container:[container name/id]"
dns:自定義dns服務
  1 dns: 8.8.8.8
  2 dns:
  3   - 8.8.8.8
  4   - 9.9.9.9

2.3 networks區域

網絡決定了服務之間以及服務和外界之間如何去通信,在執行docker-compose up的時候,docker會默認創建一個默認網絡,創建的服務也會默認的使用這個默認網絡。服務和服務之間,可以使用服務的名字進行通信,也可以自己創建網絡,并將服務加入到這個網絡之中,這樣服務之間可以相互通信,而外界不能夠與這個網絡中的服務通信,可以保持隔離性。
提示:注意:您的應用程序網絡的名稱基于“項目名稱”,該名稱基于其所在目錄的名稱。您可以使用--project-name參數或COMPOSE_PROJECT_NAME環境變量覆蓋項目名稱,如當前的目錄為myapp,期docker-compose.yml如下:
  1 version: "3"
  2 services:
  3   web:
  4     build: .
  5     ports:
  6       - "8000:8000"
  7   db:
  8     image: postgres
  9     ports:
 10       - "8001:5432"
運行時docker-compose up,則:
  1. 創建了一個名為myapp_default的網絡。
  2. 使用web配置創建容器,在web下加入myapp_default網絡。
  3. 使用db配置創建容器,在db下加入myapp_default網絡。
示例:
  1 version: '2'
  2 
  3 services:
  4   app:
  5     image: busybox
  6     command: ifconfig
  7     networks:
  8       app_net:
  9         ipv4_address: 172.16.238.10
 10 
 11 networks:
 12   app_net:
 13     driver: bridge
 14     enable_ipv6: true
 15     ipam:
 16       driver: default
 17       config:
 18       - subnet: 172.16.238.0/24
 19         gateway: 172.168.238.254

2.4 volumes區域

可以在Compose file文件上聲明卷,同時也可以在本區域創建volumes_from,以便在多個服務中重用卷。
示例:
  1 version: "3"
  2 services:
  3   db:
  4     image: db
  5     volumes:
  6       - data-volume:/var/lib/db
  7   backup:
  8     image: backup-service
  9     volumes:
 10       - data-volume:/var/lib/backup/data
 11 volumes:
 12   data-volume:
提示:volumes可參考:https://docs.docker.com/compose/compose-file/#specifying-byte-values

轉載于:https://www.cnblogs.com/itzgr/p/10041249.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/395887.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/395887.shtml
英文地址,請注明出處:http://en.pswp.cn/news/395887.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如何使用TensorFlow構建簡單的圖像識別系統(第2部分)

by Wolfgang Beyer沃爾夫岡拜爾(Wolfgang Beyer) 如何使用TensorFlow構建簡單的圖像識別系統(第2部分) (How to Build a Simple Image Recognition System with TensorFlow (Part 2)) This is the second part of my introduction to building an image recognition system wi…

網站 服務器 用sqlite,sqlite服務器數據庫

sqlite服務器數據庫 內容精選換一換簡要介紹SQLite是一款輕量級的關系型數據庫,它的運算速度非常快,占用資源很少,不僅支持標準的SQL語法,還遵循了數據庫的ACID事務。編寫語言:C一句話概述:輕量級的關系型數…

type-c接口圖片_TypeC接口除了充電還能干嗎?這些功能都不知道,簡直是在浪費...

Type C手機接口相信每個使用智能手機的朋友都很熟悉,目前已經廣泛使用在智能手機領域,并且得到用戶一致好評。但是對于Type C接口真正的用處很少有人知道,大部分用戶只了解正反面都可充電,其他方面一概不知,對于這一點…

Zookeeper的api的簡單使用(轉載)

轉載自: http://www.cnblogs.com/sunddenly/p/4031881.html 1.API 2.API 示例 ZooKeeper中的組成員關系 理解ZooKeeper的一種方法就是將其看作一個具有高可用性的文件系統。但這個文件系統中沒有文件和目錄,而是統一使用“節點”(node)的概念,稱為znode…

必須使用301重定向的運用場景

必須使用301重定向的運用場景

1.1好素數

題目 題意:一個好素數的定義是,他是一個素數,然后他的左右兩邊10區間內存在素數,那么他就是好素數,現在讓你輸入一個數字,這個數字以內的好素數的數量。 解題方法:先把每一個數字是不是素數判斷…

jquery.vue.js_一個Vue.js簡介,面向只了解jQuery的人

jquery.vue.jsby Matt Rothenberg馬特羅森伯格(Matt Rothenberg) 一個Vue.js簡介,面向只了解jQuery的人 (A Vue.js introduction for people who know just enough jQuery to get by) I’ve had a love-hate relationship with JavaScript for years.我與JavaScrip…

python 矩陣獲取行數_4個最佳項目創意的代碼片段和示例,旨在為Python和機器學習構建出色的簡歷!...

點擊上方“小白學視覺”,選擇加"星標"或“置頂”重磅干貨,第一時間送達一篇文章帶你了解4個最佳項目創意的代碼片段和示例Python是一種特殊的編程語言,適用于從初學者到中級用戶。由于它的靈活性,它正逐漸成為一種非常流…

Android 多狀態加載布局的開發 Tips

2019獨角獸企業重金招聘Python工程師標準>>> 什么是多狀態 Layout 對于大多數 App 而言,項目中都有多狀態加載 View 這種需求,如下圖所示。 對應到開發中,我們通常會開發一個對應的自定義 layout 用于根據頁面不同的狀態來顯示不同…

XML解析之JAXP案例詳解

根據一個CRUD的案例&#xff0c;對JAXP解析xml技術&#xff0c;進行詳細的解釋&#xff1a; 首先&#xff0c;已知一個xml文件中的數據如下&#xff1a; <?xml version"1.0" encoding"UTF-8" standalone"no"?> <書架><書 出版社…

隨機梯度下降

1.SGD 代價函數通常可以分解成每個樣本的代價函數的總和轉載于:https://www.cnblogs.com/bigcome/p/10042800.html

iis mysql5.7_手動配置網站環境 IIS 10+PHP 7.1+MySQL 5.7

之前配置環境一直用的一鍵安裝包&#xff0c;不管是phpStudy還是lnmp&#xff0c;昨天嘗試在自己電腦配置一下iis的環境&#xff0c;也踩了一些坑&#xff0c;整理了一下。測試電腦是Windows10&#xff0c;理論上Win7和IIS7.5都支持的。安裝 IIS1&#xff1a;控制面板 > 程序…

如何使用Apache的Prediction IO Machine Learning Server構建推薦引擎

by Vaghawan Ojha通過瓦哈萬歐哈(Vaghawan Ojha) 如何使用Apache的Prediction IO Machine Learning Server構建推薦引擎 (How to build a recommendation engine using Apache’s Prediction IO Machine Learning Server) This post will guide you through installing Apache…

JavaScript DOM編程藝術第二版學習(1/4)

接下來項目需要網頁相關知識&#xff0c;故在大牛的指引下前來閱讀本書。 記錄方式&#xff1a;本書分四部分閱讀&#xff0c;完成閱讀之后會多寫一篇包括思維導圖的算是閱讀指南的東西&#xff0c;瀏覽的童鞋看著指南可以跳過一些不必要的坑~ 當前水平&#xff1a;HTML&CS…

github開源大項目_GitHub剛剛發布了一份大規模的開源指南

github開源大項目Here are three links worth your time:這是三個值得您花費時間的鏈接&#xff1a; GitHub just released a massive guide to contributing to open source (5 to 60 minute read) GitHub剛剛發布了一份有關開源的大型指南( 閱讀5至60分鐘 ) A new way to br…

mysql中where條件判斷語句_MySQL Where 條件語句介紹和運算符小結

WHERE 條件有時候操作數據庫時&#xff0c;只操作一些有條件限制的數據&#xff0c;這時可以在SQL語句中添加WHERE子句來規定數據操作的條件。語法&#xff1a;SELECT column,… FROM tb_name WHERE definitionWHERE 關鍵字后面接有效的表達式(definition)&#xff0c;該表達式…

node webkit(nw.js) 設置自動更新

原理&#xff1a;把更新的文件放在服務器上&#xff0c;設置一個客戶端版本號&#xff0c;每次打開客戶端的時候&#xff0c;通過接口獲取服務器上的版本&#xff0c;如果高于本地的版本就下載服務器上的代碼&#xff0c;低于或等于就不更新 1 <script>2 var htt…

個人工作總結04(沖刺二)

今天是團隊第二次沖刺階段開始的第04天&#xff0c;我的工作總結如下&#xff1a; 一、昨天干了什么&#xff1f; 知識圈查詢功能 基本實現數據庫查詢 (未完成) 二、今天準備做什么&#xff1f; 知識圈查詢功能 基本實現數據庫查詢 三、遇到了什么困難&#xff1f; 數據庫訪問出…

mysql8.0版1130_navicat premium連接mysql 8.0報錯error 10061和error1130問題

昨天安裝了最新版的mysql navicat premium, 但沒來得及測試使用Navicat連接。今天上班時&#xff0c;使用Navicat premium連接mysql時&#xff0c;出現報錯ERROR 2003 (HY000): Can’t connect to MySQL server on ‘1XX.XX.XX.XX’ (10061).起初以為是mysql沒有安裝成功&#…

freecodecamp_為什么您一定要參與freeCodeCamp的一個研究小組

freecodecampby Frederick Ige弗雷德里克艾格(Frederick Ige) 為什么您一定要參與freeCodeCamp的一個研究小組 (Why you should definitely get involved with one of freeCodeCamp’s study groups) I’m writing this article in hopes of convincing you to take advantage…