尝试使用Docker Compose
我现在才根据官方文件尝试使用docker-compose,所以记录一下。
先决条件
首先是安装部分。
这次我们将使用docker-machine(docker-toolbox)进行操作。
$docker-machine ssh
按照安装步骤进行安装。
$ sudo su
# curl -L https://github.com/docker/compose/releases/download/1.7.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
# chmod a+x /usr/local/bin/docker-compose
我之前所做的工作是通过root执行,后来才意识到官方文档中提到了可以使用sudo -i。
确认
$ docker-compose --version
docker-compose version 1.7.1, build 0a9ab35
步骤1:设置
-
- 创建一个用于测试的目录
$ mkdir composetest
$ cd composetest
创建app.py
$ vi app.py
app.py
from flask import Flask
from redis import Redis
app = 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)
当我搜索Flask时,它似乎是一个用于Python的轻量级框架。
参考:http://a2c.bitbucket.org/flask/
在app.py中,每次访问都会递增一个计数器,计数器使用redis进行存储。
创建requirements.txt
为了pip安装,创建requirements.txt文件
$ cat << EOF > requirements.txt
flask
redis
EOF
步骤2:创建一个Docker镜像。
创建Docker镜像
-
- 创建Dockerfile
Dockerfile
从python:2.7开始
添加代码至/code目录
设置工作目录为/code
运行pip install -r requirements.txt
执行python app.py命令
构建
$ docker build -t web .
通过-t选项指定名称和标签
步骤三:定义服务
终于到了正儿八经的 docker-compose.yml!
version: '2'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
depends_on:
- redis
redis:
image: redis
build: Dockerfileのビルド。Dockerfileのディレクトリを指定
ports: ホストマシンとコンテナのポートマッピングを指定
volumes: ホストマシンのディレクトリをコンテナにマウント。host:container
depends_on:サービスの依存関係を指定。この場合 redis → web の順番で起動する
image: コンテナイメージを指定
由于可以使用yaml进行编写,因此非常简洁方便啊~
十分易于理解。
步骤四:使用Compose构建和运行您的应用程序
-
- 使用docker-compose.yml文件启动定义的服务集合
$ docker-compose up
哇啊~看起来没有任何问题。
Redis成功启动,紧接着是web服务。
访问http://xxx:5000
因为在docker machine上执行,所以首先要查找docker machine的ip地址。
$ docker-machine ip
192.168.99.100

哇!每次正確訪問時似乎都在增加。
在第五步中
docker-compose up -d
docker-compose run
这次我们省略了诸如此类的说明
印象
当运行多个容器时,似乎能够极为轻松地进行操作。
因为docker-compose.yml文件很易于理解,非常容易上手。
我希望将其用于各种试验时的环境建设。