docker-compose.yml文件

Posted linuxws

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了docker-compose.yml文件相关的知识,希望对你有一定的参考价值。

version:指定 docker-compose.yml 的版本

执行docker-compose.yml文件之前先查看yml文件的版本信息version 和docker-compose的版本是否匹配一致

不一致要卸载docker-compose安装适配的版本

  1. 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 声明

  1. V2版本仅支持单机模式
  2. 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和这参数没什么关系

 
创建容器时没有添加参数  --restart=always ,导致的后果是:当 Docker 重启时,容器未能自动启动。

现在要添加该参数怎么办呢,方法有二:

1、Docker 命令修改

docker container update --restart=always 容器名字
 

以上是关于docker-compose.yml文件的主要内容,如果未能解决你的问题,请参考以下文章

“docker-compose”命令为 docker-compose.yml 文件设置路径

docker-compose.yml说明和编写

在文件'./docker-compose.yml'中,服务'proxy-nginx'必须是映射而不是字符串?

docker-compose.yml样例(mysql主从+mycat读写分离)

如何在 AWS Elastic Container Service 中使用现有的 docker-compose.yml 文件?

docker-compose.yml 使用说明