version:指定 docker-compose.yml 的版本mysql
执行docker-compose.yml文件以前先查看yml文件的版本信息version 和docker-compose的版本是否匹配一致web
不一致要卸载docker-compose安装适配的版本redis
V1 版本的 docker-compose.yml 文件格式主要区别就是: sql
- 没有开头的 version 声明 - 没有 services 声明 - 不支持 depends_on - 不支持命名的 volumes, networks, build arguments 声明 docker
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 两个部分数组
服务能够基于镜像和 Dockerfile两种方式构建。build指定 Dockerfile 的路径。Compose 根据Dockerfile构建镜像,而后使用构建好的镜像启动服务容器。bash
Dockerfile的路径能够是绝对路径、相对路径,或者设定上下文根目录,而后以该目录为准指定 Dockerfile。app
build: /path/to/build/dir build: ./dir build: context: ../ dockerfile: path/of/Dockerfile
注意 build 都是一个目录,dockerfile 标签指定Dockerfile 文件。
若是同时指定了 image 和 build 两个标签,那么 Compose 会构建镜像而且把镜像命名为 image 后面的那个名字。flex
command
command 容器启动后默认执行命令
也能够写成相似 Dockerfile 中的格式:ui
command: [bundle, exec, thin, -p, 3000]
Compose 的容器名称格式是:<项目名称><服务名称><序号>
虽然能够自定义项目名称、服务名称,可是若是你想彻底控制容器的命名,可使用这个标签指定:
container_name: app
环境变量设置,可以使用数组或字典两种方式。示例:
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和这参数没什么关系