Docker-compose多容器应用

docker compose 是为了定义和运行多容器的复杂docker应用,下面以官网列子演示,稍作修改

1、建立工程
# 创建工程根目录
$ mkdir dockercompose
$ cd dockercompose

# 创建我们应用的目录
$ mkdir count-web

# 创建应用镜像的 Dockerfile
$ touch count-web/Dockerfile

# 应用的源码目录
$ mkdir count-web/src

# 源码目录下存放源文件及python依赖包描述文件
$ touch count-web/src/app.py
$ touch count-web/src/requirements.txt

# 最后就是我们的 docker-compose.yml 文件
$ touch docker-compose.yml

# 目录结构
$ tree
.
├── count-web
│   ├── Dockerfile
│   └── src
│       ├── app.py
│       └── requirements.txt
└── docker-compose.yml

app.py 内容

import time

import redis
from flask import Flask


app = Flask(__name__)
cache = redis.Redis(host='redis', port=6379)


def get_hit_count():
    retries = 5
    while True:
        try:
            return cache.incr('hits')
        except redis.exceptions.ConnectionError as exc:
            if retries == 0:
                raise exc
            retries -= 1
            time.sleep(0.5)


@app.route('/')
def hello():
    count = get_hit_count()
    return 'Hi! I have been seen {} times.\n'.format(count)

if __name__ == "__main__":
    # 默认端口为5000
    app.run(host="0.0.0.0", debug=True)

requirements.txt 内容

flask
redis

Dockerfile 内容

# 应用基于python3.5作为基础镜像构建
FROM python:3.5

# 将源文件目录的内容添加到容器的/count-web下面
ADD ./src /count-web

# 应用的工作目录是 /count-web
WORKDIR /count-web

# 安装应用的依赖包
RUN pip install -r requirements.txt

# 运行应用
CMD ["python", "app.py"]

docker-compose.yml 的内容

version: '3'
services:
    # 构建的应用
    count-web:
        build: ./count-web

        # 端口映射,flask默认5000端口映射到宿主机
        # 的0.0.0.0:5000/tcp
        ports:
            - "5000:5000"
        # 卷映射,保证宿主机源码更改后能影响到容器中的应用
        volumes:
            - ./count-web/src:/count-web

    # 第二个容器,用来运行数据库
    redis:
        image: "redis"
2、构建

运行下面命令将按照yml文件描述构建容器,我们的应用通过Dockerfile 构建容器,redis 直接使用官方的镜像构建

$ docker-compose up 

浏览器测试

Docker-compose多容器应用_第1张图片

3、问题

Dockerfile 中使用 ADD 时,尽量ADD的内容和Dockerfile在同一个目录下面,比如刚开始我的src目录和Dockerfile不在同一个目录下,报了下面的错, 什么意思呢,说是build上下文中不对,我猜意思呢是:Dockerfile在build时所指上下文就是含有Dockerfile的文件夹

ERROR: Service ‘web’ failed to build: ADD failed: Forbidden path outside the build context: ../../count-web ()

你可能感兴趣的:(微服务)