docker-compose.yml文件

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

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

不一致要卸載docker-compose安裝適配的版本redis

  1. V1 版本的 docker-compose.yml 只被支持到 docker-compose 1.6.x。再日後的 docker-compose 版本就再也不支持 V1 版本的 docker-compose.yml

V1 版本的 docker-compose.yml 文件格式主要區別就是: sql

- 沒有開頭的 version 聲明 - 沒有 services 聲明 - 不支持 depends_on - 不支持命名的 volumes, networks, build arguments 聲明 docker

  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構建鏡像,而後使用構建好的鏡像啓動服務容器。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]

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 重啓時,容器未能自動啓動。

如今要添加該參數怎麼辦呢,方法有二:

一、Docker 命令修改

docker container update --restart=always 容器名字
相關文章
相關標籤/搜索