• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Benjamin

            靜以修身,儉以養(yǎng)德,非澹薄無(wú)以明志,非寧?kù)o無(wú)以致遠(yuǎn)。
            隨筆 - 398, 文章 - 0, 評(píng)論 - 196, 引用 - 0
            數(shù)據(jù)加載中……

            docker之Compose.yml配置說(shuō)明

            1、build:指定dockerfile的上下文路徑,或詳細(xì)配置的對(duì)象。示例如下:
                 version: "3.9"
                 services:
                   webapp:
                     build:
                        context: ./dir
                        dockerfile: Dockerfile-alternate
                        args:
                          buildno: 1
                context 上下文路徑,可以是文件路徑,也可以是到鏈接到 git 倉(cāng)庫(kù)的 url。當(dāng)是相對(duì)路徑時(shí),它被解釋為相對(duì)于 Compose 文件的位置。
                dockerfile 指定構(gòu)建鏡像的 Dockerfile 文件名
                args 構(gòu)建參數(shù),在構(gòu)建過(guò)程中訪問(wèn)的環(huán)境變量
                cache_from 緩存解析鏡像列表
                labels 設(shè)置構(gòu)建鏡像的元數(shù)據(jù)
                network 設(shè)置網(wǎng)絡(luò)容器連接,none 表示在構(gòu)建期間禁用網(wǎng)絡(luò)
                shm_size 設(shè)置/dev/shm此構(gòu)建容器的分區(qū)大小
                target 多階段構(gòu)建,可以指定構(gòu)建哪一層
            2、network:自定義網(wǎng)絡(luò)。一般的Compose為您的應(yīng)用程序設(shè)置單個(gè)網(wǎng)絡(luò)。services 服務(wù)的每個(gè)容器都加入默認(rèn)網(wǎng)絡(luò),并且可以被該網(wǎng)絡(luò)上的其他容器訪問(wèn)。
                          應(yīng)用程序網(wǎng)絡(luò)的名稱基于“項(xiàng)目名稱”,也就是其所在目錄的名稱。可以使用 --project-name 命令行選項(xiàng) 或 COMPOSE_PROJECT_NAME 環(huán)境變量覆蓋項(xiàng)目名稱。
                例如:version: "3.9"
                services:
                  web:
                    build: .   #當(dāng)前目錄
                    ports:
                     - "8000:8000"
                  db:
                    image: postgres
                    ports:
                      - "8001:5432" #8001宿主機(jī)端口 5432(postgres默認(rèn)端口)即是容器端口
                                           執(zhí)行docker-compose up即創(chuàng)建項(xiàng)目名稱(項(xiàng)目路徑)_default網(wǎng)絡(luò)并將web和db加入網(wǎng)絡(luò)
                 每個(gè)Sevices配置下也可以指定network配置,來(lái)指定一級(jí)配置的網(wǎng)絡(luò)。如下所示:
                 version: "3"
                 services:
                   proxy:
                     build: ./proxy
                   networks:
                     - frontend
                 app:
                   build: ./app
                  networks:
                    - frontend
                    - backend
                db:
                  image: postgres
                networks:
                  - backend
              networks:
                frontend:
                # Use a custom driver
                driver: custom-driver-1
              backend:
                # Use a custom driver which takes special options
                driver: custom-driver-2
                driver_opts:
                  foo: "1"
                  bar: "2"
              這里配置了兩個(gè)frontend和backend ,且自定義了網(wǎng)絡(luò)類型。
              每一個(gè)services下,proxy , app , db都定義了networks配置。
               proxy 只加入到 frontend網(wǎng)絡(luò)。
               db 只加入到backend網(wǎng)絡(luò)。
               app同時(shí)加入到 frontend和backend 。
               db和proxy不能通訊,因?yàn)椴辉谝粋€(gè)網(wǎng)絡(luò)中。
               app和兩個(gè)都能通訊,因?yàn)閍pp在兩個(gè)網(wǎng)絡(luò)中都有配置。
               db和proxy要通訊,只能通過(guò)app這個(gè)應(yīng)用來(lái)連接。

               同一網(wǎng)絡(luò)上的其他容器可以使用服務(wù)名稱或別名來(lái)連接到其他服務(wù)的容器。例如
               services:
                 s ome-service:
                    networks:
                  some-network:
                    aliases:#別名
                      - alias1
                      - alias3
                  other-network:
                    aliases:
                      - alias2
               還可以指定靜態(tài)IP地址,例如
                version: "3.9"
                services:
                  app:
                    image: nginx:alpine
                 networks:
                    app_net:
                        ipv4_address: 172.16.238.10
                        ipv6_address: 2001:3984:3989::10
                networks:
                   app_net:
                       ipam:
                           driver: default
                      config:
                          - subnet: "172.16.238.0/24"
                         - subnet: "2001:3984:3989::/64
             
                driver 指定該網(wǎng)絡(luò)應(yīng)使用哪個(gè)驅(qū)動(dòng)程序。默認(rèn)使用bridge單個(gè)主機(jī)上的網(wǎng)絡(luò),overlay代表跨多個(gè)節(jié)點(diǎn)的網(wǎng)絡(luò)群
                 host or none 使用主機(jī)的網(wǎng)絡(luò)堆棧,或者不使用網(wǎng)絡(luò)。相當(dāng)于docker run --net=host或docker run --net=none。僅在使用docker stack命令時(shí)使用。如果您使用該           docker-compose命令,請(qǐng)改用 network_mode。
                 driver_opts 將選項(xiàng)列表指定為鍵值對(duì)以傳遞給此網(wǎng)絡(luò)的驅(qū)動(dòng)程序
                 driver_opts:
                     foo: "bar"
                     baz: 1
                 attachable 僅在driver設(shè)置為 overlay時(shí)可用。如果設(shè)置為true,那么除了服務(wù)之外,獨(dú)立容器也可以連接到此網(wǎng)絡(luò)。例如
                networks:
                  mynet1:
                     driver: overlay
                attachable: true
               enable_ipv6 在此網(wǎng)絡(luò)上啟用 IPv6 網(wǎng)絡(luò)。
               ipam 自定義 IPAM (IP地址管理)配置
               ipam:
                  driver: default
              config:
                - subnet: 172.28.0.0/16
               internal 默認(rèn)情況下,Docker 會(huì)將橋接網(wǎng)絡(luò)提供外部連接。如果要?jiǎng)?chuàng)建外部隔離的覆蓋網(wǎng)絡(luò),可以將此選項(xiàng)設(shè)置為true。
               labels 添加元數(shù)據(jù)
               external如果設(shè)置為true,則指定此網(wǎng)絡(luò)是在 Compose 之外創(chuàng)建的。docker-compose up不會(huì)嘗試創(chuàng)建它,如果它不存在,則會(huì)引發(fā)錯(cuò)誤。在下面的例子中,proxy是通往外界的門戶。例如
               version: "3.9"
               services:
                  proxy:
                    build: ./proxy
                networks:
                  - outside
                  - default
                app:
                  build: ./app
                networks:
                  - default
              networks:
                 outside:
                    external: true
                name為此網(wǎng)絡(luò)設(shè)置自定義名稱。例如
                version: "3.9"
                networks:
                  network1:
                     name: my-app-net
             3、cap_add, cap_drop添加或刪除容器功能。例如
                 cap_add:
                     - ALL
                cap_drop:
                   - NET_ADMIN
                   - SYS_ADMIN
             4、cgroup_parent為容器指定一個(gè)可選的父 cgroup。
             5、command:覆蓋容器啟動(dòng)后默認(rèn)執(zhí)行的命令
             6、configs:賦予服務(wù)相應(yīng)的configs訪問(wèn)權(quán)限
                              一般指定配置名稱即可,以下示例授予redis服務(wù)訪問(wèn)my_config和my_other_configconfigs 的權(quán)限。
                 以下示例授予redis服務(wù)訪問(wèn)my_config和my_other_configconfigs 的權(quán)限。
                    version: "3.9"
                    services:
                         redis:
                             image: redis:latest
                        deploy:
                           replicas: 1
                        configs:
                           - my_config
                           - my_other_config
                   configs:
                       my_config:
                           file: ./my_config.txt
                       my_other_config:
                           external: true
                   詳細(xì)用法示例:
                   version: "3.9"
                   services:
                       redis:
                            image: redis:latest
                      deploy:
                           replicas: 1
                      configs:
                           - source: my_config         #配置名
                          target: /redis_config     #掛載文件路徑名稱
                          uid: '103'
                          gid: '103'
                          mode: 0440                 #掛載文件在容器的權(quán)限  這里是可讀權(quán)限
                  configs:
                       my_config:
                            file: ./my_config.txt
                       my_other_config:
                            external: true
                一級(jí)configs詳細(xì)配置參數(shù)說(shuō)明:
               file: 使用指定路徑中的文件內(nèi)容創(chuàng)建配置。
               external: 如果設(shè)置為 true,則指定此配置已經(jīng)創(chuàng)建。Docker 不會(huì)嘗試創(chuàng)建它,如果它不存在, 會(huì)報(bào)錯(cuò)config not found。
               name: Docker 中配置對(duì)象的名稱。此字段可用于引用包含特殊字符的配置。
               driver和driver_opts:自定義驅(qū)動(dòng)程序的名稱,以及作為鍵/值對(duì)傳遞的特定于驅(qū)動(dòng)程序的選項(xiàng)。
               template_driver:要使用的模板驅(qū)動(dòng)程序的名稱,它控制是否以及如何將配置負(fù)載作為模板。如果未設(shè)置驅(qū)動(dòng)程序,則不使用模板。當(dāng)前支持的唯一驅(qū)動(dòng)程序是golang
               當(dāng) Docker 中的配置名稱與服務(wù)中存在的名稱不同時(shí),可以使用name進(jìn)行配置
               configs:
                  my_first_config:
                      file: ./config_data
                   my_second_config:
                      external:
                           name: redis_config
                7、container_name:自定義容器名稱,必須是唯一
                8、credential_spec:僅Windows 容器的服務(wù)有用。為托管服務(wù)帳戶配置憑據(jù)規(guī)范。
                      配置列表格式為file://<filename>或registry://<value-name>
                9、depends_on:表示服務(wù)之間的依賴關(guān)系
                      docker-compose up按依賴順序啟動(dòng)服務(wù)。在下面的例子中,db和redis在 web之前啟動(dòng)。
                     docker-compose up SERVICE自動(dòng)包含SERVICE的依賴項(xiàng)。在下面的示例中,docker-compose up web還創(chuàng)建并啟動(dòng)db和redis。
                     docker-compose stop按依賴順序停止服務(wù)。在以下示例中,web在db和redis之前停止。示例如下:
                  version: "3.9"
                  services:
                    web:
                      build: .
                    depends_on:
                       - db
                       - redis
                    redis:
                      image: redis
                    db:
                      image: postgres
             10、deploy:部署和運(yùn)行有關(guān)的配置,只在 swarm(集群管理工具)模式下才會(huì)有用。
                   endpoint_modeL:訪問(wèn)集群服務(wù)的方式.
                   vip是Docker 集群服務(wù)一個(gè)對(duì)外的虛擬 ip,求都會(huì)通過(guò)這個(gè)虛擬 ip 到達(dá)集群服務(wù)內(nèi)部的機(jī)器。
                   dnsrr :dns輪詢。所有的請(qǐng)求會(huì)自動(dòng)輪詢獲取到集群 ip 列表中的一個(gè) ip 地址。
                  labels 在服務(wù)上設(shè)置標(biāo)簽  容器上的 labels(跟 deploy 同級(jí)的配置) 覆蓋 deploy 下的 labels。 
                  mode 指定服務(wù)提供的模式
                  global:全局服務(wù),服務(wù)將部署至集群的每個(gè)節(jié)點(diǎn)
                  replicated:復(fù)制服務(wù),復(fù)制指定服務(wù)到集群的機(jī)器上
                  placement 指定約束和首選項(xiàng)的位置。示例如下
                    version: "3.9"
                    services:
                       db:
                            image: postgres
                      deploy:
                           placement:
                               constraints:
                                    - "node.role==manager"
                                    - "engine.labels.operatingsystem==ubuntu 18.04"
                                preferences:
                                     - spread: node.labels.zone
                 可以通過(guò)定義約束表達(dá)式來(lái)限制可以安排任務(wù)的節(jié)點(diǎn)集。約束表達(dá)式可以使用匹配(==) 或排除(!=) 規(guī)則。多個(gè)約束查找可以使用 AND 匹配。
                 約束可以匹配節(jié)點(diǎn)或 Docker 引擎標(biāo)簽,如下所示:
                    節(jié)點(diǎn)屬性                           匹配                                    例子
                    node.id                          節(jié)點(diǎn)ID                          node.id==2ivku8v2gvtg4
                    node.hostname                 節(jié)點(diǎn)主機(jī)名                          node.hostname!=node-2
                    node.role                  節(jié)點(diǎn)角色 ( manager/ worker)  node.role==manager
                    node.platform.os       節(jié)點(diǎn)操作系統(tǒng)                          node.platform.os==windows
                    node.platform.arch       節(jié)點(diǎn)架構(gòu)                          node.platform.arch==x86_64
                    node.labels             用戶定義的節(jié)點(diǎn)標(biāo)簽                  node.labels.security==high
                    engine.labels          Docker 引擎的標(biāo)簽                  engine.labels.operatingsystem==ubuntu-14.04
               max_replicas_per_node 如果服務(wù)是replicated(默認(rèn)值),則限制任何時(shí)間在節(jié)點(diǎn)上運(yùn)行的副本數(shù)
               replicas 如果服務(wù)是replicated(默認(rèn)值),指定在任何給定時(shí)間應(yīng)運(yùn)行的容器數(shù)量。
               resources 配置資源約束。在下面示例中,redis服務(wù)被限制為使用不超過(guò) 50M 的內(nèi)存和0.50(單核的 50%)可用處理時(shí)間 (CPU),并保留20M內(nèi)存和0.25CPU 時(shí)間(始終可用)。
               version: "3.9"
               services:
                    redis:
                      image: redis:alpine
                      deploy:
                         resources:
                            limits:
                               cpus: '0.50'
                               memory: 50M
                             reservations:
                                  cpus: '0.25'
                                  memory: 20M
                   restart_policy 配置是否以及如何在退出時(shí)重新啟動(dòng)容器。替換restart
                   condition: none, on-failure 或 any (默認(rèn): any) 之一
                   delay:重新啟動(dòng)嘗試之間等待的時(shí)間(默認(rèn)值:5s)。
                   max_attempts:在放棄之前嘗試重新啟動(dòng)容器的次數(shù)(默認(rèn)值:永不放棄),。如果在配置的窗口(window)內(nèi)重新啟動(dòng)未成功,則此嘗試不計(jì)入配置max_attempts值
                   window:決定重啟是否成功之前等待多長(zhǎng)時(shí)間(默認(rèn)值:立即重啟)。
                   rollback_config 在更新失敗的情況下應(yīng)如何回滾服務(wù)
                    parallelism:一次回滾的容器數(shù)量。如果設(shè)置為 0,則所有容器同時(shí)回滾。
                    delay:每個(gè)容器組回滾之間等待的時(shí)間(默認(rèn)為 0 秒)。
                    failure_action: 如果回滾失敗怎么辦。continue或者pause(默認(rèn)pause)
                    monitor:每次任務(wù)更新后監(jiān)控失敗的持續(xù)時(shí)間(ns|us|ms|s|m|h)(默認(rèn) 5s)注意:設(shè)置為 0 將使用默認(rèn) 5s。
                    max_failure_ratio:回滾期間允許的故障率(默認(rèn)為 0)。
                    order:回滾期間的操作順序。stop-first(舊任務(wù)在開(kāi)始新任務(wù)之前停止),或start-first(首先啟動(dòng)新任務(wù),并且正在運(yùn)行的任務(wù)短暫重疊)(默認(rèn)stop-first)。
                    update_config 配置應(yīng)如何更新服務(wù)
                     parallelism:一次更新的容器數(shù)量。
                    delay:更新一組容器之間的等待時(shí)間。
                    failure_action: 如果更新失敗怎么辦。continue,rollback或者pause (默認(rèn):pause)。
                    monitor:每次任務(wù)更新后監(jiān)控失敗的持續(xù)時(shí)間(ns|us|ms|s|m|h)(默認(rèn) 5s)注意:設(shè)置為 0 將使用默認(rèn) 5s。
                    max_failure_ratio:更新期間可容忍的故障率。
                    order:更新期間的操作順序。stop-first(舊任務(wù)在開(kāi)始新任務(wù)之前停止),或start-first(新任務(wù)首先啟動(dòng),并且正在運(yùn)行的任務(wù)短暫重疊)(默認(rèn)stop-first)
              11、devices。設(shè)備映射列表。使用與--devicedocker 客戶端創(chuàng)建選項(xiàng)格式相同
                    devices:
                          - "/dev/ttyUSB0:/dev/ttyUSB0"
              12、dns:自定義 DNS 服務(wù)器。可以是單個(gè)值或列表
              13、dns_earch:自定義 DNS 搜索域。可以是單個(gè)值或列表
              14、entrypoint:用于運(yùn)行程序
                    entrypoint: /code/entrypoint.sh
                     entrypoint: ["php", "-d", "memory_limit=-1", "vendor/bin/phpunit"]
              15、env_file:從文件添加環(huán)境變量。可以是單個(gè)值或列表。
                  Compose 文件docker-compose -f FILE,則其中的路徑 env_file相對(duì)于該文件所在的目錄。
                  environment 聲明的環(huán)境變量會(huì)覆蓋這些值——即使這些值是空的或未定義的。
              16、environment:添加環(huán)境變量。您可以使用數(shù)組或字典。任何布爾值(true、false、yes、no)都需要用引號(hào)括起來(lái)。
                   environment和Dockerfile 中的ENV指令一樣把變量保存在容器、鏡像中。
              17、expose:暴露端口。實(shí)際上docker-compose.yml的端口映射還得ports這樣的標(biāo)簽。
              18、external_links鏈接到 docker-compose.yml 外部的容器,甚至 并非 Compose 項(xiàng)目文件管理的容器
                    external_links:
                          - redis_1
                          - project_db_1:mysql
                          - project_db_1:postgresql
              19、extra_hosts:添加主機(jī)名映射,使用與 docker 客戶端--add-host類似會(huì)往/etc/hosts文件中添加一些記錄
                    extra_hosts:
                       - "somehost:162.242.195.82"
                        - "otherhost:50.31.209.229"
              20、healthcheck:檢查容器是否“健康”。如果需要禁用鏡像的所有檢查項(xiàng)目,可以使用disable:true,相當(dāng)于test:["NONE"]
                 healthcheck:
                   test: ["CMD", "curl", "-f", "http://localhost"]
                   interval: 1m30s    #間隔
                   timeout: 10s
                   retries: 3
                   start_period: 40s   #開(kāi)始時(shí)間
                 test必須是字符串或列表。如果是列表,則第一項(xiàng)必須是NONE,CMD或CMD-SHELL。如果是字符串,則相當(dāng)于指定CMD-SHELL后跟該字符串。
                     # Hit the local web app
                      test: ["CMD", "curl", "-f", "http://localhost"]
                      test: ["CMD-SHELL", "curl -f http://localhost || exit 1"]
                      test: curl -f https://localhost || exit 1
              21、image:從指定的鏡像中啟動(dòng)容器,可以是存儲(chǔ)倉(cāng)庫(kù)、標(biāo)簽以及鏡像 ID
              22、init:轉(zhuǎn)發(fā)信號(hào)和取得進(jìn)程,將此選項(xiàng)設(shè)置true為服務(wù)啟用此功能
              23、isolation:容器隔離技術(shù).在 Linux 上,唯一支持的值是default。
                                   在 Windows 上,可接受的值為default、process和hyperv。
              24、labels:元數(shù)據(jù)添加到容器,可以使用數(shù)組或字典
                    labels:
                       - "com.example.description=Accounting webapp"
                       - "com.example.department=Finance"
                       - "com.example.label-with-empty-value"
                     labels:
                       com.example.description: "Accounting webapp"
                       com.example.department: "Finance"
                       com.example.label-with-empty-value: ""
              25、links:鏈接到另一個(gè)服務(wù)中的容器。指定服務(wù)名稱和鏈接別名 ("SERVICE:ALIAS"),或僅指定服務(wù)名稱。
                    在以下示例中,web可以訪問(wèn)db,并且設(shè)置別名為database:
                       version: "3.9"
                       services:
                             web:
                                  build: .
                              links:
                              - "db:database"
                               db:
                                  image: postgres
              26、logging:日志記錄配置.示例如下
                       version: "3.9"
                        services:
                             some-service:
                                  image: some-service
                            logging:
                                 driver: "json-file"
                           options:
                                  max-size: "200k"
                                  max-file: "10"
                      network_mode
              27、network_mode:網(wǎng)絡(luò)模式,可以使用特殊形式service:[service name]。
                       network_mode: "bridge"
                       network_mode: "host"
                       network_mode: "none"
                       network_mode: "service:[service name]"
                       network_mode: "container:[container name/id]"
              28、pid:將 PID 模式設(shè)置為主機(jī) PID 模式。這會(huì)在容器和主機(jī)操作系統(tǒng)之間共享 PID 地址空間。
                   使用此標(biāo)志啟動(dòng)的容器可以訪問(wèn)和操作裸機(jī)命名空間中的其他容器.
                      pid: "host"
              29、port:暴露端口
                    一般寫(xiě)法:指定兩個(gè)端口 ( HOST:CONTAINER)
                                僅指定容器端口(為主機(jī)端口選擇了一個(gè)臨時(shí)主機(jī)端口)。
                                指定要綁定到兩個(gè)端口的主機(jī) IP 地址(默認(rèn)為 0.0.0.0,表示所有接口):( IPADDR:HOSTPORT:CONTAINERPORT)。
                                如果 HOSTPORT 為空(例如127.0.0.1::80),則會(huì)選擇一個(gè)臨時(shí)端口來(lái)綁定到主機(jī)上。
                    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"
                         - "127.0.0.1::5000"
                         - "6060:6060/udp"
                         - "12400-12500:1240"
                詳細(xì)寫(xiě)法:
                      target: 容器內(nèi)的端口
                      published: 公開(kāi)的端口
                      protocol:端口協(xié)議(tcp或udp)
                      mode:host用于在每個(gè)節(jié)點(diǎn)上發(fā)布主機(jī)端口,或ingress用于負(fù)載平衡的群模式端口。
                   ports:
                       - target: 80
                        published: 8080
                        protocol: tcp
                        mode: host
             30、profiles:用于定義和控制哪些服務(wù)在特定場(chǎng)景下運(yùn)行,通過(guò)為每個(gè)服務(wù)指定一個(gè)或多個(gè) profile 標(biāo)簽,可以實(shí)現(xiàn)條件化啟動(dòng)服務(wù)。
                                    默認(rèn)啟動(dòng)所有。要激活特定的 profile,可以在命令行中使用 `--profile` 參數(shù)。
                     profiles: ["frontend", "debug"]
                     profiles:
                      - frontend
                      - debug
             31、restart:重啟策略
                  restart: "no"   #默認(rèn),任何情況下都不會(huì)重啟
                  restart: always   #一直重啟不停
                  restart: on-failure        #如果退出代碼指示失敗錯(cuò)誤,則該策略會(huì)重新啟動(dòng)容器
                  restart: unless-stopped    #總是重新啟動(dòng)容器,除非容器停止(手動(dòng)或其他方式)
             32、secrets:授予訪問(wèn)權(quán)限
                   一般用法僅指定機(jī)密名稱,示例如下
                      version: "3.9"
                      services:
                          redis:
                               image: redis:latest
                         deploy:
                              replicas: 1
                         secrets:
                              -  my_secret
                              - my_other_secret
                     secrets:
                          my_secret:
                               file: ./my_secret.txt
                          my_other_secret:
                              external: true    #外部機(jī)密,表示已經(jīng)在docker中定義,無(wú)論如何都不會(huì)重新建立。如果外部機(jī)密不存在,部署失敗并顯示secret not found
               
                詳細(xì)用法:source:定義機(jī)密標(biāo)識(shí)符。
                arget:要掛載在/run/secrets/服務(wù)的任務(wù)容器中的文件的名稱,默認(rèn)是 source。
                uid和gid:/run/secrets/在服務(wù)的任務(wù)容器中擁有文件的數(shù)字 UID 或 GID 。
                mode:要掛載在/run/secrets/ 服務(wù)的任務(wù)容器中的文件的權(quán)限,以八進(jìn)制表示法。例如,0444 代表可讀。
                file:使用指定路徑中的文件內(nèi)容創(chuàng)建機(jī)密。
                template_driver:要使用的模板驅(qū)動(dòng)程序的名稱。當(dāng)前支持的唯一驅(qū)動(dòng)程序是golang,它使用golang。示例
                
               version: "3.9"
               services:
                    redis:
                       image: redis:latest
                    deploy:
                      replicas: 1
                   secrets:
                       - source: my_secret
                       target: redis_secret
                        uid: '103'
                       gid: '103'
                       mode: 0440 #組可讀
                 secrets:
                    my_secret:
                         file: ./my_secret.txt     #使用指定路徑中的文件內(nèi)容創(chuàng)建機(jī)密
                    my_other_secret:
                         external: true   
                 上述例子表示my_first_secret在<stack_name>_my_first_secret 部署堆棧時(shí)創(chuàng)建 ,并且my_second_secret已存在于 Docker 中。
              33、security_opt:管理全部服務(wù)的標(biāo)簽,比如設(shè)置全部服務(wù)的 user 標(biāo)簽值為USER
                   security_opt:
                    - label:user:USER
                    - label:role:ROLE 
              34、stop_grace_period:嘗試停止容器時(shí)等待多長(zhǎng)時(shí)間,默認(rèn)10秒
              35、stop_signal:設(shè)置信號(hào)來(lái)停止容器。默認(rèn)情況下stop使用 SIGTERM
              36、sysctls:內(nèi)核參數(shù)。可以是數(shù)組或字典
                 sysctls:
                    net.core.somaxconn: 1024
                    net.ipv4.tcp_syncookies: 0
              37、tmpfs:容器掛載臨時(shí)文件。可以是單個(gè)值或列表
                    tmpfs: /run
                    tmpfs:
                       - /run
                       - /tmp
              38、ulimits:設(shè)置當(dāng)前進(jìn)程以及其子進(jìn)程的資源使用量,覆蓋默認(rèn)試著
                    ulimits:
                       nproc: 65535   #最大進(jìn)程數(shù)
                       nofile:
                         soft: 20000   #軟件資源限制
                         hard: 40000  
              39、userns_mode:如果 Docker 守護(hù)程序配置了用戶命名空間,則禁用此服務(wù)的用戶命名空間。
                    userns_mode: "host" #服務(wù)停用用戶命名空間功能,讓服務(wù)以宿主機(jī)的用戶命名空間運(yùn)行,類似 docker run 命令中使用 --userns=host 參數(shù)的效果
                    使用 docker stack deploy 在 Swarm(集群) 模式下部署堆棧時(shí),userns_mode 配置項(xiàng)會(huì)被忽略,其僅對(duì)基于常規(guī) docker-compose 啟動(dòng)的服務(wù)生效
              40、volumes:指定卷(Volumes)的掛載位置。卷用于在容器和宿主機(jī)之間共享數(shù)據(jù),或者在不同的容器之間共享數(shù)據(jù)。
                     web 服務(wù)使用命名卷 (mydata),以及為單個(gè)服務(wù)定義的綁定安裝(dbservice下的第一個(gè)路徑volumes)。db服務(wù)還使用名為dbdata(dbservice下的第二個(gè)路徑             volumes)的命名卷,使用了舊字符串格式定義它以安裝命名卷。命名卷必須列在頂級(jí)volumes鍵下。
                 version: "3.9"
                 services:
                    web:
                      image: nginx:alpine
                       volumes:
                          - type: volume  #安裝類型,volume(默認(rèn)值:持久化存儲(chǔ)卷)
                                                 #tmpfs(數(shù)據(jù)會(huì)存儲(chǔ)內(nèi)存里。適合存儲(chǔ)臨時(shí)的非持久化且需較快讀寫(xiě)速度的數(shù)據(jù),容器停止后對(duì)應(yīng)數(shù)據(jù)便會(huì)消失。能搭配 size 等選項(xiàng)設(shè)定容量限制)
                                                #npipe(僅適用于 Windows 系統(tǒng),用于掛載命名管道(Named Pipe))
                                                #bind(代表綁定掛載,把宿主機(jī)指定路徑直接掛載到容器內(nèi)。宿主機(jī)路徑可用絕對(duì)或相對(duì)路徑表示,常適合開(kāi)發(fā)中需快速訪問(wèn)宿主機(jī)文件場(chǎng)景)
                          source: mydata  #安裝源、主機(jī)上用于綁定安裝的路徑或在頂級(jí)volumes 中定義的卷的名稱 。不適用于 tmpfs 掛載
                          target: /data   #安裝卷的容器中的路徑
                          volume:
                            nocopy: true  #創(chuàng)建卷時(shí)禁用從容器復(fù)制數(shù)據(jù)的標(biāo)志
                          - type: bind
                             source: ./static
                             target: /opt/app/static
                    db:
                      image: postgres:latest
                      volumes:
                           - "/var/run/postgres/postgres.sock:/var/run/postgres/postgres.sock" #綁定掛載:指定宿主機(jī)路徑和容器內(nèi)路徑。格式[SOURCE:]TARGET[:MODE]格式
                           - "dbdata:/var/lib/postgresql/data"                                   #具名掛載:指定卷名和容器內(nèi)路徑。卷名需要在頂級(jí)volumes鍵下聲明。
                           - /path/in/container                                                  #匿名掛載:只指定容器內(nèi)路徑,不指定宿主機(jī)路徑或卷名。Docker Compose會(huì)創(chuàng)建一個(gè)匿名卷。
               volumes:
                 mydata:
                 dbdata: # 聲明具名卷
               一級(jí)(最上面Volmes)配置參數(shù):driver 指定該卷應(yīng)使用哪個(gè)卷驅(qū)動(dòng)程序 
                                          driver_opts 將選項(xiàng)列表指定為鍵值對(duì)以傳遞給此卷的驅(qū)動(dòng)程序
                                          labels 添加元數(shù)據(jù)
                                          name 為此卷設(shè)置自定義名稱
                                          o選項(xiàng)用于向卷驅(qū)動(dòng)傳遞以逗號(hào)分隔的多個(gè)掛載選項(xiàng)列表。其具體取值取決于卷驅(qū)動(dòng)類型(type)
                                            使用 local 驅(qū)動(dòng)作綁定掛載:用 o: bind 表明用綁定模式掛載,類似執(zhí)行 mount -o bind 命令,常與 type: none 組合
                                            當(dāng)驅(qū)動(dòng)為 nfs 時(shí),o 可設(shè)服務(wù)器地址、讀寫(xiě)權(quán)限等
                                            掛載 CIFS 卷:掛載 CIFS 協(xié)議的網(wǎng)絡(luò)共享目錄時(shí),借 o 設(shè)定用戶名、密碼及目錄、文件權(quán)限等
                                            當(dāng) driver 為 tmpfs 時(shí),能借 o 配置類似大小、uid 等,像 o: "size=100m,uid=1000" 限制卷大小 100MB,并設(shè)所有者用戶 ID 為 1000。
                     volumes:
                          example:
                               driver_opts:
                                 type: "nfs"
                                 o: "addr=10.40.0.199,nolock,soft,rw"  
                                 device: ":/docker/example
             41、變量置換:用 $VARIABLE 或者 ${VARIABLE} 來(lái)置換變量,避免硬編碼敏感信息或重復(fù)配置,非常適合多環(huán)境部署場(chǎng)景
                   ${VARIABLE:-default}VARIABLE在環(huán)境中未設(shè)置或?yàn)榭諘r(shí)設(shè)置為default。
                   ${VARIABLE-default}僅當(dāng)VARIABLE在環(huán)境中未設(shè)置時(shí)才設(shè)置為default。
                   ${VARIABLE:?err}退出并顯示一條錯(cuò)誤消息,其中包含環(huán)境中的errif VARIABLE未設(shè)置或?yàn)榭铡?/div>
                   ${VARIABLE?err}退出并顯示一條錯(cuò)誤消息,其中包含errif VARIABLE在環(huán)境中未設(shè)置。
                   如果想使用一個(gè)不被compose處理的變量,可用使用 $$;如有特殊字符,要用引號(hào)引起來(lái)使用環(huán)境變量
                   services:
                      app:
                       image: ${IMAGE_NAME:default-app:latest}  # 變量不存在時(shí)使用默認(rèn)值
                       ports:
                            - "${APP_PORT}:80"
                   使用 .env 文件 
                    # .env 文件
                    IMAGE_NAME=my-app:1.0
                    APP_PORT=8080
                    compose.yml文件
                    services:
                    app:
                      image: ${IMAGE_NAME}
                      ports:
                        - "${APP_PORT}:80"  #若 APP_PORT 未定義,使用 80
                --env-file 選項(xiàng)指定額外的環(huán)境變量文件
                    docker-compose --env-file ./config/prod.env up
                    在環(huán)境變量中使用變量,注意env 文件中支持變量嵌套(需注意 Shell 兼容性),env文件示例如下
                    BASE_DIR=/app
                    DATA_DIR=${BASE_DIR}/data  # 引用 BASE_DIR 的值        
                默認(rèn)情況下,未定義的變量會(huì)被替換為空字符串。若希望未定義變量報(bào)錯(cuò),可啟用嚴(yán)格模式

            posted on 2025-08-09 23:01 Benjamin 閱讀(30) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 雜談

            女人香蕉久久**毛片精品| 欧美久久久久久午夜精品| 国产精品久久久久久吹潮| 久久久噜噜噜久久熟女AA片| 欧美精品一区二区精品久久| 午夜精品久久久久久久无码| 久久亚洲春色中文字幕久久久| 国产激情久久久久影院小草| 超级97碰碰碰碰久久久久最新| 国产精品久久久久影视不卡| 日韩精品久久久久久久电影| 久久久久久久综合日本亚洲| 久久亚洲精品无码aⅴ大香| 9191精品国产免费久久| 中文字幕久久久久人妻| 久久久WWW成人免费毛片| 国产成人精品白浆久久69| 久久久久se色偷偷亚洲精品av| 国产高潮国产高潮久久久91| 国产精品美女久久久久久2018| 久久精品免费全国观看国产| 国产综合精品久久亚洲| 99久久免费国产精品热| 久久影院综合精品| 国产精品久久久久久久app| 久久九九免费高清视频| 久久93精品国产91久久综合 | 精品无码久久久久久久动漫| 国产精品9999久久久久| 亚洲精品乱码久久久久久蜜桃图片| 久久久久综合国产欧美一区二区| 秋霞久久国产精品电影院| 久久精品国产亚洲网站| 久久精品国产亚洲麻豆| 品成人欧美大片久久国产欧美 | 亚洲国产精品嫩草影院久久| 久久国产高清一区二区三区| 香蕉久久一区二区不卡无毒影院 | 99久久人妻无码精品系列蜜桃| 囯产精品久久久久久久久蜜桃| 精品国产乱码久久久久久人妻 |