博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Docker Compose YML文件配置
阅读量:4958 次
发布时间:2019-06-12

本文共 4009 字,大约阅读时间需要 13 分钟。

Docker Compose YML

默认的模板文件是 docker-compose.yml,其中定义的每个服务都必须通过 image 指令指定镜像或 build 指令(需要 Dockerfile)来自动构建。

其它大部分指令都跟 docker run 中的类似。
如果使用 build 指令,在 Dockerfile 中设置的选项(例如:CMD, EXPOSE, VOLUME, ENV 等) 将会自动被获取,无需在 docker-compose.yml 中再次设置。
image指定为镜像名称或镜像 ID。如果镜像在本地不存在,Compose 将会尝试拉去这个镜像。

image

镜像的地址,可以在镜像仓库找到。会在主机不存在该镜像的时候,拉取。

image: ubuntuimage: orchardup/postgresqlimage: a4bc65fd

build

指定 Dockerfile 所在文件夹的路径。 Compose 将会利用它自动构建这个镜像,然后使用这个镜像。

build: /path/to/build/dir

command

覆盖掉默认的命令

command: bundle exec thin -p 3000

可以Link到其他的容器。可以直接写应用名(同一个YML内),或者可以写Link别名()

links:    - db       - db:database    - redis

Docker Link 会修改您容器内的HOST表和环境变量,的工作方式可以参考 Docker Link文档。

external_links可以Link到不是同一个YML内的容器。语法和普通的Link接近。但启动的时候要保证被Link的容器是正常运行的。可以直接写应用名(同一个YML内),或者可以写Link别名()

external_links:    - redis_1    - project_db_1:mysql    - project_db_1:postgresql

extra_hosts

hostname映射。相当于在Docker Run中--add-host 参数.

extra_hosts:    - "somehost:162.242.195.82"    - "otherhost:50.31.209.229"

这个配置会在容器的 /etc/hosts 文件中添加如下的内容。

162.242.195.82 somehost

50.31.209.229 otherhost

ports

开放端口,可以同时申明主机和容器端口 (HOST:CONTAINER), 也可以只申明容器端口。(会随机选定一个外部端口).

ports:    - "3000"    - "8000:8000"    - "49100:22"    - "127.0.0.1:8001:8001"

expose

开放端口但不会在主机上映射。仅仅用于被其他的容器Link。只能保留内部端口

expose:    - "3000"    - "8000"

volumes

支持Mount存储卷,可以支持指定主机路径和容器路径(HOST:CONTAINER), 还可以包括只读 (HOST:CONTAINER:ro).

volumes:    - /var/lib/mysql    - ./cache:/tmp/cache    - ~/configs:/etc/configs/:ro

volumes_from

支持从其他APP和容器Mount。

volumes_from:    - service_name    - container_name

environment

可以添加环境变量,您可以指定YML数组或者字典。

environment:    RACK_ENV: development    SESSION_SECRET:environment:    - RACK_ENV=development    - SESSION_SECRET

env_file

从文件中获取环境变量,可以为单独的文件路径或列表。

如果通过 docker-compose -f FILE 指定了模板文件,则 env_file 中路径会基于模板文件路径。
如果有变量名称与 environment 指令冲突,则以后者为准。

env_file: .envenv_file:    - ./common.env    - ./apps/web.env    - /opt/secrets.env

环境变量文件中每一行必须符合格式,支持 # 开头的注释行。

环境变量文件中每一行必须符合格式,支持 # 开头的注释行。

common.env: Set Rails/Rack environment

RACK_ENV=development

extends

基于已有的服务进行扩展。例如我们已经有了一个 webapp 服务,模板文件为 common.yml。

# common.yml   webapp:   build: ./webapp   environment:    - DEBUG=false    - SEND_EMAILS=false

编写一个新的 development.yml 文件,使用 common.yml 中的 webapp 服务进行扩展。

web:extends:file: common.ymlservice: webappports:    - "8000:8000"links:    - dbenvironment:    - DEBUG=truedb:    image: postgres

后者会自动继承 common.yml 中的 webapp 服务及相关环节变量。

labels

可以通过Docker Lable给容器加一些元数据。

labels:    com.example.description: "Accounting webapp"    com.example.department: "Finance"    com.example.label-with-empty-value: ""

log_driver

可以给容器增加Log Driver。和命令行参数 --log-driver 相同

现在支持 json-file, syslog and none. 默认是 json-file.

log_driver: "json-file"log_driver: "syslog"log_driver: "none"

net

设置网络模式。使用和 docker client 的 --net 参数一样的值

net: "bridge"net: "none"net: "container:[name or id]"net: "host"

pid

容器共享pid。 跟主机系统共享进程命名空间。打开该选项的容器可以相互通过进程 ID 来访问和操作。在docker命令中的使用是:docker run --pid container:containerid

pid: "host"

dns

配置 DNS 服务器。可以是一个值,也可以是一个列表。

dns: 8.8.8.8dns:    - 8.8.8.8    - 9.9.9.9

cap_add

增加容器的能力

cap_add:     - ALL

cap_drop

删除容器的能力

cap_drop:    - NET_ADMIN    - SYS_ADMIN

配置 DNS 搜索域。可以是一个值,也可以是一个列表

dns_search: example.comdns_search:    - dc1.example.com    - dc2.example.com

devices

设备映射. 和命令行参数 --device 相同

devices:    - "/dev/ttyUSB0:/dev/ttyUSB0"

security_opt

覆盖默认的容器安全参数

security_opt:    - label:user:USER    - label:role:ROLE

working_dir

docker指定工作目录

entrypoint

docker入口点

user

指定容器当前用户

hostname

指定容器主机名

domainname

指定域名

mem_limit

指定容器内存限制

privileged

开启特权,可以设置容器里的内核参数

restart

重启后的容器启动情况

stdin_open

tty

支持tty

cpu_shares

CPU 共享权值(相对权重)

cpuset

允许使用的CPU 集,值可以为 0-3,0,1

read_only

设置只读文件系统

下列的熟悉都和 docker run 命令中的参数相同。

cpu_shares: 73cpuset: 0,1working_dir: /codeentrypoint: /code/entrypoint.shuser: postgresqlhostname: foodomainname: foo.commac_address: 02:42:ac:11:65:43mem_limit: 1000000000privileged: truerestart: alwaysstdin_open: truetty: trueread_only: true

转载于:https://www.cnblogs.com/aric2016/p/11377520.html

你可能感兴趣的文章
oracle数据库基本命令
查看>>
WLAN热点创建
查看>>
开发环境中快速部署Oracle Essbase(Rapid deployment of oracle essbase in development envrioments)...
查看>>
Lodop Web打印插件使用
查看>>
sha1 加密 2...
查看>>
[GX/GZOI2019]旧词(树上差分+树剖+线段树)
查看>>
第509篇-Delegate和Event异同--(内容篇5:共6篇)
查看>>
设计模式--6大原则--开闭原则
查看>>
高德地图JSapi
查看>>
团队协作第八周个人PSP
查看>>
centos-linux热拔插scsi硬盘
查看>>
五周总结学习笔记
查看>>
docker 应用-2(Dockerfile 编写以及镜像保存提交)
查看>>
编码GBK的不可映射字符
查看>>
Response.ContentType 详细列表
查看>>
list集合转换成datatable
查看>>
九度 1551 切蛋糕(数学)
查看>>
1.4 使用电脑测试MC20的接收英文短信功能
查看>>
JavaScript学习笔记——FromData上传文件
查看>>
tomcat内存溢出设置JAVA_OPTS
查看>>