一、概念
Docker Compose 用于定義運行使用多個容器的應用,可以一條命令啟動應用(多個容器)。
使用Docker Compose 的步驟:
- 定義容器 Dockerfile
- 定義應用的各個服務 docker-compose.yml
- 啟動應用 docker-compose up?
二、安裝
Note that Compose 1.8.0 requires Docker Engine 1.10.0 or later for version 2 of the Compose File format, and Docker Engine 1.9.1 or later for version 1.
# curl -L https://github.com/docker/compose/releases/download/1.8.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose # chmod +x /usr/local/bin/docker-compose
也可以用pip或官網的run.sh腳本安裝
安裝后確認
# docker-compose --version
三、運行
1、創建一個Python應用
? ? ? 使用Flask,將數值記入Redis
1.1 建立一個python應用目錄和文件
# mkdir python # cd python# vi app.py from flask import Flask from redis import Redisapp = Flask(__name__) redis = Redis(host='redis', port=6379)@app.route('/') def hello():redis.incr('hits')return 'Hello World! I have been seen %s times.' % redis.get('hits')if __name__ == "__main__":app.run(host="0.0.0.0", debug=True)# vi requirements.txt flask redis
1.2 創建 Dockerfile
在同一目錄下,創建Dockerfile
# vi Dockerfile FROM python:2.7 ADD . /code WORKDIR /code RUN pip install -r requirements.txt CMD python app.py
對上面的Dockerfile做一下簡單說明:
- 容器使用Python 2.7的鏡像
- 將當前目錄下文件拷貝到容器內/code
- 指定工作目錄為/code
- 安裝python需要的庫:flask, redis
- 容器執行命令?python app.py
1.3 創建編排腳本
在同一目錄下,創建 docker-compose.yml
# cat docker-compose.yml version: '2' services:web:build: .ports:- "5000:5000"volumes:- .:/codedepends_on:- redisredis:image: redis
對上面的編排腳本做一下簡單說明:
- 這個應用定義了兩個服務:web, redis
- web容器通過當前路徑下的Dockerfile生成
- web容器內的5000端口映射到主機的5000端口
- 將當前目錄掛載到web容器內/code
- web容器依賴于redis容器
- redis容器從Docker Hub獲取鏡像
1.4 啟動應用
會執行編排腳本,分別制作和抓取web,redis鏡像,啟動容器
# docker-compose up
1.5?訪問應用
http://localhost:5000/?
四、命令
1、daemon模式啟動/停止
# docker-compose up -d
# docker-compose stop
2 查看信息
# docker-compose ps
3 對容器執行命令(一次)
#docker-compose run services cmd
例如:查看web容器環境變量
# docker-compose run web env
五、例子
1、例一 -?docker-compose.yml
version: '2'
services:web:image: dockercloud/hello-worldports:- 8080networks:- front-tier- back-tierredis:image: redislinks:- webnetworks:- back-tierlb:image: dockercloud/haproxyports:- 80:80links:- webnetworks:- front-tier- back-tiervolumes:- /var/run/docker.sock:/var/run/docker.sock networks:front-tier:driver: bridgeback-tier:
driver: bridge
2、例二 - docker-compose.yml
# cat docker-compose.yml version: '2' services:db:image: mysql:5.7volumes:- "./.data/db:/var/lib/mysql"restart: alwaysenvironment:MYSQL_ROOT_PASSWORD: wordpressMYSQL_DATABASE: wordpressMYSQL_USER: wordpressMYSQL_PASSWORD: wordpresswordpress:depends_on:- dbimage: wordpress:latestlinks:- dbports:- "8000:80"restart: alwaysenvironment:WORDPRESS_DB_HOST: db:3306WORDPRESS_DB_PASSWORD: wordpress
3、例三 - docker-compose.yml
?