赞
踩
docker-compose中的配置命令很多都是Dockerfile中的命令,不过需要遵循yml的文件格式。下面讲解yml配置是针对单服务器的容器管理,如果是集群模式配置会稍微有些不同。
指定本 yml 依从的 compose 哪个版本制定的。
指定为构建镜像上下文路径:
例如 webapp 服务,指定为从上下文路径 ./dir/Dockerfile 所构建的镜像:
- version: "3.7"
- services:
- webapp:
- build: ./dir
或者,作为具有在上下文指定的路径的对象,以及可选的参数 Dockerfile 和 args等:
- version: "3.7"
- services:
- webapp:
- build:
- context: ./dir
- dockerfile: Dockerfile-alternate
- args:
- buildno: 1
- labels:
- - "com.example.description=Accounting webapp"
- - "com.example.department=Finance"
- - "com.example.label-with-empty-value"
指定容器从哪个镜像运行启动。以下格式都可以:
- image: redis
- image: ubuntu:14.04
- image: tutum/influxdb
- image: example-registry.com:4000/postgresql
- image: a4bc65fd # 镜像id
自定义运行后容器名称,而不是生成的默认名称。
container_name: my-web-container
将主机的数据卷或着文件挂载到容器里。
- volumes:
- - "/localhost/postgres.sock:/var/run/postgres/postgres.sock"
- - "/localhost/data:/var/lib/postgresql/data"
覆盖容器启动的默认命令。
command: ["bundle", "exec", "thin", "-p", "3000"]
覆盖容器默认的 entrypoint。
entrypoint: /code/entrypoint.sh
也可以是以下格式:
- entrypoint:
- - php
- - -d
- - zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20100525/xdebug.so
- - -d
- - memory_limit=-1
- - vendor/bin/phpunit
设置依赖关系。
- version: "3.7"
- services:
- web:
- build: .
- depends_on:
- - db
- - redis
- redis:
- image: redis
- db:
- image: postgres
- restart: "no"
- restart: always
- restart: on-failure
- restart: unless-stopped
暴露端口,但不映射到宿主机,只被连接的服务访问。仅可以指定内部端口为参数:
- expose:
- - "3000"
- - "8000"
environment添加环境变量。可以使用数组或字典、任何布尔值,布尔值需要用引号引起来,以确保 YML 解析器不会将其转换为 True 或 False。
- environment:
- RACK_ENV: ${development} #可以从环境中读取环境变量
- SHOW: 'true'
env_file: docker compose 对环境变量的使用提供了非常丰富支持和灵活的使用方式。可以从文件添加环境变量,默认从当前下的。可以是单个值或列表的多个值。
env_file: .env
也可以是列表格式:
- env_file:
- - ./common.env
- - ./apps/web.env
- - /opt/secrets.env
前面的的一些命令相对比较常用,下面给出一个具体的yml文件配置示例:
- version: '3'
- services:
- my-search:
- build:
- context: .
- container_name: my-search
- image: my_search:v1
- depends_on:
- - elasticsearch
- ports:
- - 8500:8500/tcp
- environment:
- - MySQL_CASE_HOST=10.201.187.225
- - MySQL_CASE_PORT=123456
- - MySQL_CASE_USER=root
- - MySQL_CASE_PASSWD=screte
- - DEFAULT_CASE_DATABASE=gov_init_1
- - CASE_TYPE=kingbase # 如果mysql数据TPYE改成mysql
- restart: always
- command: python start_service.py
-
-
- elasticsearch:
- image: docker.elastic.co/elasticsearch/elasticsearch:7.6.2
- container_name: "elasticsearch"
- ports:
- - 9200:9200
- - 9300:9300
- environment:
- - "ES_JAVA_OPTS=-Xms1g -Xmx1g"
- - cluster.name=hanscal-es
- - bootstrap.memory_lock=true
- - discovery.type=single-node
- volumes:
- - ./data/elasticsearch/data:/usr/share/elasticsearch/data
- - ./data/elasticsearch/logs:/usr/share/elasticsearch/logs
- - ./data/elasticsearch/plugins/ik:/usr/share/elasticsearch/plugins/ik
-
- kibana:
- image: docker.elastic.co/kibana/kibana:7.6.2
- container_name: kibana
- depends_on:
- - elasticsearch
- ports:
- - 5601:5601
- volumes:
- - ./config/kibana.yml:/usr/share/kibana/config/kibana.yml
- environment:
- - ELASTICSEARCH_URL=http://elasticsearch:9200
- - ELASTICSEARCH_HOSTS=http://elasticsearch:9200
- links:
- - elasticsearch
下面的命令使用频率稍微低一点。
networks配置容器连接的网络,引用顶级 networks 下的条目 。
- services:
- some-service:
- networks:
- some-network:
- aliases:
- - alias1
- other-network:
- aliases:
- - alias2
- networks:
- some-network:
- # Use a custom driver
- driver: custom-driver-1
- other-network:
- # Use a custom driver which takes special options
- driver: custom-driver-2
network_mode设置网络模式。
- network_mode: "bridge"
- network_mode: "host"
- network_mode: "none"
- network_mode: "service:[service name]"
- network_mode: "container:[container name/id]"
用于检测 docker 服务是否健康运行。
- healthcheck:
- test: ["CMD", "curl", "-f", "http://localhost"] # 设置检测程序
- interval: 1m30s # 设置检测间隔
- timeout: 10s # 设置检测超时时间
- retries: 3 # 设置重试次数
- start_period: 40s # 启动后,多少秒开始启动检测程序
存储敏感数据,例如密码:
- version: "3.1"
- services:
-
- mysql:
- image: mysql
- environment:
- MYSQL_ROOT_PASSWORD_FILE: /run/secrets/my_secret
- secrets:
- - my_secret
-
- secrets:
- my_secret:
- file: ./my_secret.txt
同一网络上的其他容器可以使用服务名称或此别名来连接到对应容器的服务。
添加主机名映射。类似 docker client --add-host。
- extra_hosts:
- - "somehost:162.242.195.82"
- - "otherhost:50.31.209.229"
以上会在此服务的内部容器中 /etc/hosts 创建一个具有 ip 地址和主机名的映射关系:
- 162.242.195.82 somehost
- 50.31.209.229 otherhost
服务的日志记录配置。
driver:指定服务容器的日志记录驱动程序,默认值为json-file。有以下三个选项
- driver: "json-file"
- driver: "syslog"
- driver: "none"
在 json-file 驱动程序下,可以使用以下参数,限制日志得数量和大小。当达到文件限制上限,会自动删除旧得文件。
- logging:
- driver: json-file
- options:
- max-size: "200k" # 单个文件大小为200k
- max-file: "10" # 最多10个文件
syslog 驱动程序下,可以使用 syslog-address 指定日志接收地址。
- logging:
- driver: syslog
- options:
- syslog-address: "tcp://192.168.0.42:123"
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。