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和這參數沒什麼關係