<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                [TOC] [compose模板文件官方文檔](https://docs.docker.com/compose/compose-file/) ## 一 compose命令和模板說明 ### A. compse命令列表說明 每個命令后后還有很多參數,具體的請用`--help`去查看 | 命令名 | 參數說明 | | --- | --- | |build |構建項目中的服務容器| |images |列出所有鏡像 | |kill |通過發送SIGKILL信號來強制停止服務容器| |logs |查看服務器容器的輸出| |pause |暫停一個服務容器 | |port |打印某個容器的端口所映射的公共端口| |ps |列出項目中目前的所有容器| |pull |拉取服務依賴的鏡像 | |push |推送服務依賴的鏡像 | |restart |重啟項目中的服務 | |rm |刪除所有的服務器容器(停止狀態的)| |run |在指定服務上執行一個命令| |scale |設置指定服務運行的容器個數| |start |啟動已經存在的服務容器| |stop |停止已經處于運行狀態的容器,但不刪除它| |top |展示運行的進程 | |unpause |恢復處于暫停狀態中的服務| |up |自動完成包括構建鏡像、創建服務、啟動服務并關聯服務相關容器的一系列操作| ### B. Compose模板文件的說明 1. [compose模板文件官方文檔](https://docs.docker.com/compose/compose-file/) 2. compose模板文件有三個版本,現在用第三版 3. 模板文件可以使用的擴展名為`.yml`或`.yaml` 4. 模板文件使用的yaml語法,用空格縮進不支持tab縮進 * 結構通過`空格`來表示縮進,推薦2個空格,不支持`tab ` * 連續的項目通過減號`-`來表示,鍵值對用冒號`:`分割 * 每個散列項(鍵值對`k: v`)冒號和值之間至少有一個空格 5. 模板有4個頂級的配置項,頂級配置項包含非常多的子項: * version 定義版本信息 * services 定義服務的配置信息,類似`docker container create` * networks 定義網絡,給 給容器使用,類似`docker network create` * volumes 定義卷,給具體容器使用,類似`docker volume create` > 定義卷和定義網絡這兩個頂級配置,定義的東西都是為了讓容器可以用的 ## 二 services普通選項說明 以下僅僅討論常用的配置指令 ### A. container_name容器名 容器名默認將會使用(項目名稱_服務名稱_序號)的格式,如果使用container_name,可以指定該容器的名稱. ```sh version: '3' services: webapp: container_name: web01 ``` > 注意: 指定容器名稱后,該服務將無法進行擴展(scale),因為Docker不允許多個容器具有相同的名稱。 ### B. labels標簽信息 為容器添加 Docker 元數據(`metadata`)信息。例如可以為容器添加輔助說明信息。 ```sh version: '3' services: xxxapp: labels: com.startupteam.description: "webapp for a startup team" com.startupteam.department: "devops department" com.startupteam.release: "rc3 for v1.0" ``` ### C. command容器啟動命令 使用 command 可以覆蓋容器啟動后默認執行的命令,支持shell和exec格式。 ```sh version: '3' services: xxxapp: command: bundle exec thin -p 3000 command: [bundle, exec, thin, -p, 3000] ``` ### D. depends_on依賴關系 解決容器的依賴、啟動先后的問題,注意不要弄錯循環依賴了。 ```sh version: '3' services: web: build: . depends_on: - db db: image: postgres ``` > 注意`web`服務不會等待`db`[完全啟動]之后才啟動。 ### E. environment和env_file環境變量 environment可設置環境變量,可以使用數組或字典兩種格式。 如果只給定變量名不賦值,會自動獲取運行 Compose 主機上對應變量的值 ```sh version: '3' services: xxxapp: environment: RACK_ENV: development SESSION_SECRET: environment: - RACK_ENV=development - SESSION_SECRET ``` 如果變量名稱或者值中用到 `true|false|` 等布爾含義的詞匯,需要放到引號里,包括 ```sh y|Y|yes|Yes|YES|n|N|no|No|NO|true|True|TRUE|false|False|FALSE|on|On|ON|off|Off|OFF ``` env_file可從文件中獲取環境變量,可以指定一個文件路徑或路徑列表,其優先級低于 environment 指定的環境變量 ``` version: '3' services: xxxapp: env_file: .env --------------- env_file: - ./common.env ``` ### F. expose和ports端口 1. expose向容器暴露端口 僅暴露端口,但不映射到宿主機,只被連接的服務訪問,可以指定容器內部的端口為參數 ```sh version: '3' services: xxxapp: expose: - "3000" - "8000" ``` 2. ports端口映射 **宿主端口:容器端口**(即:HOST:CONTAINER)的格式格式,或者僅僅指定容器的端口(宿主將會隨機選擇端口)。 ```sh version: '3' services: xxxapp: ports: - "3000" - "8000:8000" - "49100:22" - "127.0.0.1:8001:8001" ``` > 數字串都采用引號包括起來的字符串格式。 ### G. extra_hosts主機名映射 類似 Docker 中的--add-host參數,指定額外的host名稱映射信息。 ```sh version: '3' services: xxxapp: extra_hosts: - "googledns:8.8.8.8" - "dockerhub:52.1.157.61" ``` 會在啟動后的服務容器中/etc/hosts文件中添加IP地址與主機名的映射記錄。 ### H. healthcheck健康檢查 通過命令檢查容器是否健康運行,需要設置測試的命令,間隔時間,超時時間,判斷次數等 ```sh services: ...... healthcheck: test: ["CMD", "curl", "-f", "http://localhost"] interval: 1m30s timeout: 10s retries: 3 ``` ### I. logging日志 配置日志選項,指定日志驅動和該驅動下可用的選項 ```sh version: "3.7" services: some-service: image: some-service logging: driver: "json-file" options: max-size: "200k" max-file: "10" ``` 目前支持三種日志驅動類型。 ```sh driver: "json-file" driver: "syslog" driver: "none" ``` options 配置日志驅動的相關參數。 ```sh options: max-size: "200k" max-file: "10" ``` ### J DNS和dns_search 1. dns:配置 dns 服務器,可以是一個值或列表 ```sh version: '3' services: xxxapp: dns: 8.8.8.8 ------------ dns: - 8.8.8.8 - 9.9.9.9 ``` 2. dns_search:配置 DNS 搜索域,可以是一個值或列表 ```sh version: '3' services: xxxapp: dns_search: example.com ------------------------ dns_search: - dc1.example.com - dc2.example.com ``` ## 四 **build和image鏡像設置** 每個服務都必須要有 `image` 或 `build` 指令二者之一 ### A. 單獨bulid指令 指定 Dockerfile 所在文件夾的絕對或相對路徑。 Compose 將會利用它自動構建和使用這個鏡像。類似于命令行的 `docker build .` ```sh version: '3' services: xxxapp: build: ./dir [1-docker-compose快速入門](1-docker-compose%E5%BF%AB%E9%80%9F%E5%85%A5%E9%97%A8.md) ``` 也可以使用 context 指令指定 Dockerfile 所在文件夾的路徑,同時使用 dockerfile 指令指定 Dockerfile 文件名。 ```sh version: '3' services: xxxapp: build: context: ./dir dockerfile: Dockerfile-alternate ``` ### B. 單獨image指令 指定為鏡像名稱或鏡像 ID。如果鏡像不存在將會嘗試拉取這個鏡像。 ```sh version: '3' services: xxxapp: image: ubuntu image: orchardup/postgresql image: a4bc65fd ``` ### C. 同時使用image和build 如果同時指定了 image和 build,Compose 會使用 build指令中指定的 Dockerfile構建的鏡像,鏡像名稱使用 image中指定的名字`webapp:tag`命名。 ```sh version: '3' services: xxxapp: build: ./dir image: webapp:tag ``` ## 五 **volumes的配置說明** volumes可以直接使用目錄掛載,也可以先創建volume卷,然后用卷名進行掛載,其實就是docker掛載目錄,文件,容器管理卷等操作 ### A. 直接掛載目錄 可以設置宿主機路徑 (HOST:CONTAINER) 或加上訪問模式 (HOST:CONTAINER:ro)。 有長短兩種格式,短格式就直接是源:目的,長格式需要寫出每一項的屬性 1. 短格式示例 ```sh services: xxxapp: volumes: - /var/lib/mysql - cache/:/tmp/cache - ~/configs:/etc/configs/:ro ``` 2. 長格式示例 ```sh services: xxxapp: volumes: - type: volume source: mydata target: /data volume: nocopy: true - type: bind source: ./static target: /opt/app/static ``` ### B. 容器卷方式掛載 需要用頂級配置項`volumes`先創建卷,然后容器中直接使用卷名進行掛載, ```sh volumes: mysql: services: mysql: image: mysql container_name: mysql volumes: - mysql:/var/lib/mysql ``` ### C. 長格式的所有參數 * `type`: 掛載的類型.有[volume|bind|tmpfs] * `source`: 掛載的源、目錄或卷名-file/#volume-configuration-reference). Not applicable for a tmpfs mount. * `target`: 掛載到容器中的目的地 * `read_only`: 設置為只讀 * `bind`: 配置附加的綁定選項 * `propagation`: 綁定使用的傳播模式 * `volume`: 配置附加的卷選項 * `nocopy`: 創建卷時禁用從容器復制數據 * `tmpfs`: 配置附加的tmpfs選項 * `size`: tmpfs掛載的大小 ### D. 頂級配置項中的volumes volumes不僅可以是容器卷,也支持通過driver插件的方法支持其他類型的存儲 1. driver_opts指定其他類型存儲 ```sh services: xxxapp: volumes: example: driver_opts: type: "nfs" o: "addr=10.40.0.199,nolock,soft,rw" device: ":/docker/example" ``` 2. external設置擴展信息 默認compose會創建卷data,但如果指定該參數為true,則只會尋找已有的data卷來使用,而不會創建 ```sh services: xxxapp: volumes: data: external: true ``` 3. labels和name labels設置卷的元數據信息(標簽),name設置源的指定名字,而不讓卷被compose自動命名 ```sh version: "3.7" volumes: data: external: true name: my-app-data labels: - "com.example.description=Database volume" - "com.example.department=IT/Ops" ``` ## 六 networks網絡配置 設置要加入的網絡,需要使用頂級`networks` 定義下的條目 。 ### A. service中的networds ```sh services: some-service: networks: - some-network - other-network networks: some-network: other-network: ``` 1. 網絡的alias別名 設置此服務的別名(備用主機名)。同一網絡上的其他容器可以使用此別名連接容器。 由于aliases是網絡范圍的,因此相同的服務可以在不同的網絡上具有不同的別名。 ```sh services: some-service: networks: some-network: aliases: - alias1 - alias3 other-network: aliases: - alias2 ``` 2. 指定IP地址 默認都是自動分配的ip地址,但也可以手動指定,但頂級網絡配置部分中對應的網絡配置必須有一個ipam塊才行。 ```sh version: "3.7" 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" ``` ### B. 頂級模塊中的networks 1. driver網絡驅動 與docker引擎配置有關,默認情況下單機是bridge,多機是overlay,當然還支持其他網絡(如host,none等),差異很大,略過 ```sh networks: mynet1: driver: overlay ``` 2. driver_opts傳輸參數 給對應的驅動傳輸相應的參數,驅動不同參數差異很大,簡單舉例 ~~~sh networks: mynet1: driver_opts: foo: "bar" baz: 1 ~~~ 3. attachable是否允許附加 當網絡為overlay是才能用,用途是允許該網絡被此項目外的其他獨立容器使用 ~~~sh networks: mynet1: driver: overlay attachable: true ~~~ 4. ipam配置IP地址信息 ~~~ networks: mynet1: ipam: driver: default config: - subnet: 172.28.0.0/16 ~~~ 5. name和external name設置網絡名,external設置使用已創建好的網絡,而不是自己創建 ~~~sh version: "3.7" networks: network1: external: true name: my-app-net ~~~ ## 八 關于容器的限制的參數 ### A. sysctls內核參數控制 配置容器內核參數。 ```sh services: some-service: sysctls: net.core.somaxconn: 1024 net.ipv4.tcp_syncookies: 0 sysctls: - net.core.somaxconn=1024 - net.ipv4.tcp_syncookies=0 ``` ### B. ulimits進程和句柄數控制 指定容器的 ulimits 限制值。 例如,指定最大進程數為 65535,指定文件句柄數為 20000(軟限制,應用可以隨時修改,不能超過硬限制) 和 40000(系統硬限制,只能 root 用戶提高)。 ```sh services: some-service: ulimits: nproc: 65535 nofile: soft: 20000 hard: 40000 ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看