通俗的说,docker-compose 正如其名,是将你的多个 docker 容器服务整合起来的命令行工具。举个例子,假设你有一个 MySQL 实例和一个 Node.js 实例分别部署在两个容器中,仅需一个docker-compose.yml
文件,docker-compose 就能够为你完成从打包到运行的全部步骤,并若是你还在苦恼手动执行各类docker run []
命令,这份指南可能可以帮上你。mysql
若是你是在本地开发环境中使用 docker-compose,你不须要安装任何的依赖项,Docker for Windows 和 Docker for Mac 都已经内置了 docker-compose 的包git
在 Linux based 服务器上安装:github
sudo curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m`-o /usr/local/bin/docker-compose
下载 docker-compose 的安装脚本sudo chmod +x /usr/local/bin/docker-compose
sh /usr/local/bin/docker-compose
docker-compose 使用目录下的docker-compose.yml
做为项目的配置文件, 以上述咱们举的 MySQL 和 Node.js 应用的例子 docker-compose.yml
文件应该具备相似如下的结构:web
你能够在Github上克隆和运行下文中的示例sql
services:
mysql:
image: mysql:latest
ports:
- '3306:3306'
restart: always
environment:
MYSQL_ROOT_PASSWORD: '123456'
webapp:
build: .
container_name: webapp
restart: always
depends_on:
- 'mysql'
environment:
NODE_ENV: 'production'
ports:
- '80:8080'
复制代码
看不懂是很正常的,下面咱们来一条一条详细剖析每一个配置项是什么意思docker
services
表示该集合下包含的全部服务,在这个例子中咱们有 mysql 和 webapp 两个服务数据库
image
表示从官方维护的 mysql 镜像构建咱们的容器express
port
表示将 docker 宿主机的 3306 端口映射 docker 容器的 3306 端口上,这样咱们就能在宿主上经过 localhost:3306 链接到咱们的 mysql 数据库django
webapp服务器
build
: 表示 docker 从哪一个文件夹开始构建镜像container_name
: 容器名字restart
: 表示 Dockerfile 中的 CMD 命令返回任何非 0 的状态时都将重启容器depends_on
: 容器的依赖。在这里,webapp 容器会保证在 mysql 容器以后启动。environment
: 须要注入的 unix 环境变量,供容器使用。注意:services 下的全部服务会共享同一个 docker network,这意味着你能够再 webapp 容器中经过 mysql:3306 访问到 mysql 服务,在 mysql 容器中经过 webapp:8080 访问到咱们的 express 服务端, 更加详细的 networks 配置请查阅 Networking in Compose
depends_on 仅仅保证容器的执行顺序,而不保证你的应用已经在可用的状态(无论可用的状态对于你的应用意味着什么)。docker 这样设计是通过了周密考虑的:为了保证应用的健壮性,你应该自行定义在容器之间服务链接错误时候的重试/重启机制。
docker-compose up
便可看到 docker 开始构建镜像并启动服务docker-compose up -d
docker-compose down
来中止运行中的容器docker-compose build
从新构建容器运行成功后,访问http://localhost 能够看到 express 服务器的 hello world 示例,http://localhost/mysql 能够检查 mysql 链接状态
docker 官网提供的其余示例:
完整的配置项文档请移步docker 官网文档