Damon小站

docker compose start

Jul 7, 2016 - 1 minute read - Comments

docker启动时不同镜像之间的链接的处理是比较麻烦的,所以官方目前有一个docker-compose用来做这些事情,官方给的例子是这样的。

构建一个Web应用

官方使用Python下的Flask框架构建的应用,创建了一个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)

创建一个requirements.txt的文件(给pip安装程序用)

flask
redis

创建一个Docker镜像

  • 首先构建一个Dockerfile文件
FROM Python:2.7
ADD . /code
WORKDIR /code
RUN pip install -r requirements.txt
CMD python app.py
  • 然后构建镜像
docker build -t web .

定义服务

通过docker-compose.yml定义服务:


version: '2'
services:
    web:
        build: .
        ports:
        - "5000:5000"
        volumes:
        - .:/code
        depends_on:
        - redis
    redis:
        image: redis

关于depends_onlinks之间的差异见: http://stackoverflow.com/questions/35832095/difference-between-links-and-depends-on-in-docker-compose-yml

运行

docker-compose up

compose会拉取redis的镜像,构建代码,然后启动服务,在浏览器中输入http://0.0.0.0:5000,就可以看到应用已经在运行了。

一些实验

想要后台运行compose,给个-d(detach)参数,用docker-compose ps查看运行的容器。

docker-compose run命令允许在一个容器中运行指令,如

    docker-compose run web env

获取web服务的env信息。

docker-compose stop可以停止-d启动的服务。

后记

我在ubuntu-14.04上跑docker的时候,出现了 ERROR: Couldn't connect to Docker daemon at http+docker://localunixsocket - is it running? 错误 需要修改/etc/default/docker中的DOCKER_OPTS,添加 "-H tcp://127.0.0.1:4243 -H unix:///var/run/docker.sock",重启docker,设置环境变量DOCKER_HOST

export DOCKER_HOST=tcp://localhost:4243

再执行docker-compose up即可。 也可以试试 https://github.com/docker/compose/issues/1214 中说的方法:

我使用的环境如下:

$ uname -a
Linux ubuntu-14 4.2.0-27-generic #32~14.04.1-Ubuntu SMP Fri Jan 22 15:32:26 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

$ docker version
Client:
 Version:      1.11.2
 API version:  1.23
 Go version:   go1.5.4
 Git commit:   b9f10c9
 Built:        Wed Jun  1 21:47:50 2016
 OS/Arch:      linux/amd64

$ docker-compose --version
docker-compose version 1.6.2, build 4d72027