Docker-compose容易忽略的使用細節


Docker-compose是docker官方的開源項目,通過使用模版yaml文件,實現對docker容器集群的管理。具體教程可以通過官方地址進行實踐。Docker-compose主要有兩個重要的概念:服務(service)和項目(project),service定義了多個容器,組成了完整的project。

一.Docker-compose與docker的版本
目前docker-compose文件格式有3個版本,分別為1, 2.x 和 3.x分別對應了不同的docker版本,使用yaml文件時需要正確引用。

二.多個-f參數用法
通過-f選項指定一個其它名稱的配置文件,比如:

docker-compose -f docker-compose-dev.yml up

但如果添加多個-f選項,docker-compose會自動合並,當然也會根據先后順序把一些重復的配置項覆蓋掉。

三.別名使用
參數links用法是鏈接到其它服務中的容器, 該選項是docker歷史遺留的選項, 目前已經可以被aliases網絡別名標簽功能代替。並且如果service在同一個network中,即使不用links也可以通過容器名稱進行通信,親測過即使使用了links也未曾在/etc/hosts中發現對應的配置,猜測應該是docker-compose對網絡進行了優化吧。
補充:
在自定義networks中聲明的網絡名稱,會自動生成folder_my-network容器網絡,而並非自定義的my-network名稱,也就是會和docker-compose的yaml文件目錄有關。

四.使用已經存在的網絡
Docker-compose中的網絡配置都是默認新建屬於自己的專屬網絡,如果要使用已經存在的網絡,需要在yaml文件network配置項中單獨說明

networks:
  default:
     external:
        name: leo_zhou

使用leo_zhou這個已經存在的網絡。

五.關於變量的使用
docker-compose中涉及到變量有兩個參數,一個是environment和env_file,用法比較特殊,需要特別的注意!
1.env_file有兩種用法,一種是默認的.env配置文件,使用docker-compose文件時會自動加載其中的配置項,實時更新並且是可以作為整個docker-compose的全局變量傳入參數;還有一種用法是使用自定義的env配置文件,但作用域僅限與environment參數之中的變量,並且使用自定義的env配置文件時,命令docker-compose config會出現“WARNING: The XXX variable is not set. Defaulting to a blank string.”的錯誤,自定義的env配置文件是為了補充environment的配置項的可讀性,但不建議測試時使用。
2.參數傳入也有優先級:
①在docker-compose文件固定寫好的參數優先級最高
②使用shell命令export引入參數
③使用.env默認的配置文件引入參數
④使用自定義的env文件引入參數
⑤默認為null的參數
3.environment僅作為docker run -e運行時傳入的參數,與env_file用法不一樣,並非為修改docker-compose文件設計。

最后補充關於WordPress和MySQL的典型yaml文件,僅作為參考:
.env配置文件

PORT=1080
MYSQL_ROOT_PASSWORD=123456

WordPress+MySQL搭建

version: '3'
services:
    wordpress:
            image: wordpress
            ports:
                - '${PORT}:80'
            environment:
                WORDPRESS_DB_HOST: mysql
                WORDPRESS_DB_PASSWORD: 123456
            networks:
                - leo-bridge
            container_name: wordpress
            depends_on:
                - mysql
    mysql:
            image: mysql:5.7.21
            privileged: true
            environment:
                MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
            networks:
                - leo-bridge
            container_name: mysql
            volumes:
                - /data/mysql:/var/lib/mysql
networks:
    leo-bridge:
      driver: bridge

 如果使用了aliases標簽,yaml需要重新配置:

version: '3'
services:
    wordpress:
            image: wordpress
            ports:
                - '${PORT}:80'
            environment:
                WORDPRESS_DB_HOST: mysql
                WORDPRESS_DB_PASSWORD: 123456
            networks:
               leo-bridge:
                    aliases:
                      - yw_wordpress
            container_name: wordpress
            depends_on:
                - mysql
    mysql:
            image: mysql:5.7.21
            privileged: true
            environment:
                MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
            networks:
               leo-bridge:
                    aliases:
                      - yw_mysql
            container_name: mysql
            volumes:
                - /data/mysql:/var/lib/mysql
networks:
    leo-bridge:
      driver: bridge


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM