zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    jmeter上做分布压测
    jpg,jpeg,bmp,png,gif图片格式区别
    jmeter的命令行进行压力测试
    Java8新特性
    02-Git
    01-Maven
    Java-集合
    Java-I/O框架
    mongodb安装配置
    Nginx常见错误及处理方法
  • 原文地址:https://www.cnblogs.com/zhouzhifei/p/11764916.html
Copyright © 2011-2022 走看看