尝试使用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:设置

    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镜像

    1. 创建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构建和运行您的应用程序

    1. 使用docker-compose.yml文件启动定义的服务集合

$ docker-compose up

哇啊~看起来没有任何问题。
Redis成功启动,紧接着是web服务。

访问http://xxx:5000

因为在docker machine上执行,所以首先要查找docker machine的ip地址。

   $ docker-machine ip
   192.168.99.100
image

哇!每次正確訪問時似乎都在增加。

在第五步中

docker-compose up -d
docker-compose run

这次我们省略了诸如此类的说明

印象

当运行多个容器时,似乎能够极为轻松地进行操作。
因为docker-compose.yml文件很易于理解,非常容易上手。

我希望将其用于各种试验时的环境建设。

广告
将在 10 秒后关闭
bannerAds