使用Docker Compose来管理IBM容器
首先
Docker Compose 是一种工具,用于集中管理由多个容器构成的服务。通过一个 yml 文件定义多个不同角色的容器,并可以使用 docker-compose 命令构建、启动、停止和查看它们的日志等操作。自2016年4月6日起,使用 Docker Compose 可以管理 IBM Container,这是由 IBM 的 Bluemix 提供的服务。本文将解释如何使用 Docker Compose 来管理 IBM Container。
检验环境
– Windows7
– Docker Toolbox 1.10.0
– Cloud Foundry 命令行接口 6.18.0
– IBM 容器插件 0.8.889
– Docker Compose 1.6.0
请参考其他文献了解有关上述软件的安装和设置方法。
事前准备
在本次解说中,我们将把docker.com上的这个应用程序部署到IBM容器上。首先,我们将把链接中的Dockerfile、app.py和requirements.txt复制到工作目录中。
FROM python:2.7
ADD . /code
WORKDIR /code
RUN pip install -r requirements.txt
CMD python 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
redis
当准备完以上步骤后,我们会先构建容器。
$ docker build -t web .
Sending build context to Docker daemon 5.12 kB
Step 1 : FROM python:2.7
---> 11a8b7c7f0ca
Step 2 : ADD . /code
---> 7ae083e86c6e
...
Successfully built 47f64f2b592e
然后,本地将创建一个名为web的容器映像。
$ docker images | grep ^web
web latest 47f64f2b592e About a minute ago 671.9 MB
以上是预先准备工作完成了。
使用Docker Compose在Bluemix上部署容器。
让我们立即将容器部署到Bluemix上吧。为了使用IBM Container,首先我们需要执行cf login和cf ic login命令来进行登录。接下来,在初次使用IBM Container时,我们需要定义命名空间,因此需要执行cf ic namespace set 命令。请注意,一旦创建了命名空间,就无法更改名称。
$ cf ic namespace set smatsui
现在,在Bluemix上的注册表中已经创建了个人的命名空间。我们将把之前创建的名为web的容器和redis容器的镜像注册到该命名空间中。对于自己创建的web容器,我们将在本地环境中将容器镜像与Bluemix上的命名空间进行关联,并将容器镜像推送到Bluemix,这是一个流程。
$ docker tag web registry.ng.bluemix.net/smatsui/web
$ docker push registry.ng.bluemix.net/smatsui/web
The push refers to a repository [registry.ng.bluemix.net/smatsui/web]
621f0324fb5f: Pushed
2198ea4f3d49: Pushed
...
将在Docker Hub上提供的Redis容器镜像从Docker Hub复制到Bluemix上。
$ cf ic cpi redis registry.ng.bluemix.net/smatsui/redis
Sending build context to Docker daemon 2.048 kB
Step 1 : FROM redis
---> 182085c5730c
...
创建Docker Compose的yml文件。
web:
image: registry.ng.bluemix.net/smatsui/web
ports:
- "5000:5000"
links:
- redis
redis:
image: registry.ng.bluemix.net/smatsui/redis
现在,终于要创建docker-compose命令,一次性启动web容器和redis容器!但在此之前,请再次执行cf ic login命令,并完成显示在标准输出中的选项2的设置(设置环境变量DOCKER_HOST和DOCKER_CERT_PATH)。现在,让我们来执行docker-compose命令吧!
$ docker-compose -f docker-compose-bluemix.yml up -d
Creating dockercompose_redis_1
Creating dockercompose_web_1
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
644eebc1-85e registry.ng.bluemix.net/smatsui/web:latest "" 37 minutes ago Running 7 seconds ago 5000/tcp dockercompose_web_1
ce869200-b3e registry.ng.bluemix.net/smatsui/redis:latest "" 38 minutes ago Running 9 seconds ago dockercompose_redis_1
现有两个容器处于运行状态。要从浏览器访问在此处启动的服务,需要获取IP地址并分配给Web容器。首先获取IP地址。
$ cf ic ip request
OK
The IP address "169.44.113.146" was obtained.
将获得的IP地址分配给Web容器。
$ cf ic ip bind 169.44.113.146 dockercompose_web_1
OK
The IP address was bound successfully.
Docker Composeを使ってコンテナの停止と削除を行う
先ほど取得したIPアドレスは、誰でも自由にアクセスできるアドレスです。サンプルアプリを誰でもアクセスできる環境に放置するのは気持ち悪いので、最後にコンテナを停止して削除します。
$ docker-compose stop
Stopping dockercompose_web_1 ...
Stopping dockercompose_redis_1 ...
Stopping dockercompose_redis_1 ... done
$ docker-compose rm
Going to remove dockercompose_web_1, dockercompose_redis_1
Are you sure? [yN] y
Removing dockercompose_web_1 ...
Removing dockercompose_redis_1 ...
Removing dockercompose_redis_1 ... done
以上完成了对Bluemix上容器的删除。
结束了
这次我们选择了非常简单的示例应用,通过使用Docker Compose来创建、启动、停止和删除IBM容器,并进行了尝试。然而,既然我们在云端部署容器,那么我也想尝试一下Docker Compose提供的scale功能。因此,下一次我打算执行docker-compose scale命令,以确认IBM容器的数量是否会增加或减少。