Docker(六)

Posted by Run-dream Blog on December 5, 2018

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时的启动顺序。