通俗的說,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 官網文檔