Docker Compose
文档
Docker Compose 是 Docker 官方编排项目之一,负责快速在集群中部署分布式应用。
命令
docker-compose [options] [COMMAND] [ARGS...]
# options
--version 打印版本并退出
-f --file 使用特定的 compose 模板文件,默认为 docker-compose.yml
-p --project-name 指定项目名称,默认使用目录名称。
# COMMAND
build 指定项目名称,默认使用目录名称。
kill
logs
ps
pull
rm
run
start 针对service
stop
up 针对project
down
# ARGS...
-d 后台运行
-s 通过信号量来控制
案例
以下是一个通过nginx 反向代理的node项目的docker-compose.yml
参考: yaml docker-compose
version: "3"
services:
redis:
restart: always
image: redis:3.2.11
container_name: redis
volumes:
- /etc/localtime:/etc/localtime:ro
network:
- backend
mysql:
restart: always
image: mysql:5.7.19
container_name: mysql
volumes:
- /etc/localtime:/etc/localtime:ro
- /var/project/db/mysql:/var/lib/mysql
- /var/project/data/mysql:/docker-entrypoint-init.d
enviroment:
MYSQL_ROOT_PASSWORD: root_password
MYSQL_DATABASE: project
MYSQL_USER: user
MYSQL_PASSWORD: password
network:
- backend
nginx:
restart: always
image: nginx:1.12.1
container_name: nginx
volumes:
- /etc/localtime:/etc/localtime:ro
- /var/project/nginx:/etc/nginx:ro
- /var/project/logs/nginx:/var/log/nginx:ro
- /var/project/upload:/upload
- /var/project/statis:/static
network:
- backend
ports:
- "80:80"
web:
restart: always
image: node:8.12
container_name: project
command: npm start
volumes:
- /etc/localtime:/etc/localtime:ro
- /var/project/server:/app
- /var/project/upload:/upload
- /var/project/logs/server:/logs
working_dir: /app
depends_on:
- redis
- mysql
networks:
- backend
networks:
backend:
简单分析一个这个docker-compose文件:
-
services
应用容器。以上这个项目由redis,mysql,nginx,以及实际运行的node程序共四个容器构成。
-
restart
docker-compose 3推荐使用restart_policy来替代restart。作用是控制容器退出时的策略。
-
image
指定容器启动时的镜像。
-
container_name
指定容器名,在同一网络中的其他容器中可以使用其来替代host。
-
command
和dockerfile里的command类似,指定容器启动时的命令。
-
volumes
用来挂载指定host路径。
这里所有的容器都挂载了host的localtime来保证容器内时间相同。
也可以将对应配置文件挂载到容器内。
-
networks
指定容器所在的网络,同一网络下的容器可以互相通信。
-
environment
向容器内添加环境变量。
-
ports
指定host和容器的端口映射关系。
上面的例子里,只有nginx将端口暴露出来,保证安全性。
-
working_dir
容器的工作目录
-
depends_on
指定docker_compose up时的启动顺序。