docker-compose.yml文件
Posted linuxws
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了docker-compose.yml文件相关的知识,希望对你有一定的参考价值。
version:指定 docker-compose.yml 的版本
执行docker-compose.yml文件之前先查看yml文件的版本信息version 和docker-compose的版本是否匹配一致
不一致要卸载docker-compose安装适配的版本
- V1 版本的 docker-compose.yml 只被支持到 docker-compose 1.6.x。再往后的 docker-compose 版本就不再支持 V1 版本的 docker-compose.yml
V1 版本的 docker-compose.yml 文件格式主要区别就是:
- 没有开头的 version 声明 - 没有 services 声明 - 不支持 depends_on - 不支持命名的 volumes, networks, build arguments 声明
- V2版本仅支持单机模式
- V3版本支持单机模式也支持多机模式
version: ‘2‘ services: web: #服务名,自定义的 image: dockercloud/hello-world #指定服务的镜像名称或镜像 ID。如果镜像在本地不存在,Compose 将会尝试拉取这个镜像。 ports: - 8080 networks: - front-tier - back-tier redis: image: redis links: - web networks: - back-tier lb: image: dockercloud/haproxy ports: - 80:80 links: - web networks: - front-tier - back-tier volumes: - /var/run/docker.sock:/var/run/docker.sock networks: front-tier: driver: bridge back-tier: driver: bridge
version: ‘2‘ services: c-chemical-mysql: #服务名,自定义的 build: context: ./ dockerfile: ./doc/db/Dockerfile environment: MYSQL_ROOT_PASSWORD: root restart: always container_name: c-chemical-mysql image: c-chemical-mysql #指定服务的镜像名称或镜像 ID。如果镜像在本地不存在,Compose 将会尝试拉取这个镜像。 ports: - 13306:3306 volumes: - ./doc/conf/mysql/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf privileged: true c-chemical-redis: image: redis:4.0.10 restart: always container_name: c-chemical-redis volumes: - ./doc/conf/redis/redis.conf:/etc/redis/redis.conf command: redis-server /etc/redis/redis.conf
一份标准配置文件应该包含 version、services、networks 三大部分,其中最关键的就是 services 和 networks 两个部分
2. build
服务可以基于镜像和 Dockerfile两种方式构建。build指定 Dockerfile 的路径。Compose 根据Dockerfile构建镜像,然后使用构建好的镜像启动服务容器。
Dockerfile的路径可以是绝对路径、相对路径,或者设定上下文根目录,然后以该目录为准指定 Dockerfile。
build: /path/to/build/dir build: ./dir build: context: ../ dockerfile: path/of/Dockerfile
注意 build 都是一个目录,dockerfile 标签指定Dockerfile 文件。
如果同时指定了 image 和 build 两个标签,那么 Compose 会构建镜像并且把镜像命名为 image 后面的那个名字。
command
command 容器启动后默认执行命令
也可以写成类似 Dockerfile 中的格式:
command: [bundle, exec, thin, -p, 3000]
container_name
Compose 的容器名称格式是:<项目名称><服务名称><序号>
虽然可以自定义项目名称、服务名称,但是如果你想完全控制容器的命名,可以使用这个标签指定:
container_name: app
environment
环境变量设置,可使用数组或字典两种方式。示例:
environment: RACK_ENV: development SHOW: ‘true‘ SESSION_SECRET: environment: - RACK_ENV=development - SHOW=true - SESSION_SECRET
privileged: true
大约在0.6版,privileged被引入docker。
使用该参数,container内的root拥有真正的root权限。
否则,container内的root只是外部的一个普通用户权限。
privileged启动的容器,可以看到很多host上的设备,并且可以执行mount。
甚至允许你在docker容器中启动docker容器。
开了可以挂载host上的硬盘或其它的设备, 如打印机, 摄像头什么的都可以, volumes和这参数没什么关系
以上是关于docker-compose.yml文件的主要内容,如果未能解决你的问题,请参考以下文章
“docker-compose”命令为 docker-compose.yml 文件设置路径
在文件'./docker-compose.yml'中,服务'proxy-nginx'必须是映射而不是字符串?
docker-compose.yml样例(mysql主从+mycat读写分离)
如何在 AWS Elastic Container Service 中使用现有的 docker-compose.yml 文件?