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和這參數沒什么關系
