Docker学习之:多容器复杂应用的部署

经过之前的学习我们已经基本掌握了docker的相关用法,这节课我们来讲一个稍微复杂点的app的部署方式。
首先我们把源码给大家贴出来

from flask import Flask
from redis import Redis
import os
import socket

app = Flask(__name__)
redis = Redis(host=os.environ.get('REDIS_HOST', '127.0.0.1'), port=6379)


@app.route('/')
def hello():
    redis.incr('hits')
    return 'Hello Container World! I have been seen %s times and my hostname is %s.\n' % (redis.get('hits'),socket.gethostname())


if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5000, debug=True)

Dockerfile文件如下:

FROM python:2.7
LABEL maintaner="apple [email protected]"
COPY . /app/
WORKDIR /app
RUN pip install flask redis
EXPOSE 5000
CMD [ "python", "app.py" ]

我们这里面并没有处理redis的部分,那么这个时候我们需要单独起一个container来处理redis,让它俩有个相互访问的关系就可以了。
我们首先创建一个redis的容器

 sudo docker run -d --name redis redis

接着我们运行这个容器

sudo docker run -d --link redis --name flask-redis -e REDIS_HOST=redis applego/flask-redis
  • -d 是后台运行
  • --link redis 代表可以通过redis直接连这个container
  • REDIS_HOST 设置环境变量 redis
    此时我们在container里面就可以直接访问了,不行你看
root@5df400fb6613:/app# curl 127.0.0.1:5000
Hello Container World! I have been seen 1 times and my hostname is 5df400fb6613.

但是我们如果想在想在外部访问应该怎么做呢?
我们首先把flask-redis 停掉,紧接着删除,然后再次启动,看下面

[vagrant@docker-node1 flask-redis]$ sudo docker stop flask-redis
flask-redis
[vagrant@docker-node1 flask-redis]$ sudo docker rm flask-redis
flask-redis
[vagrant@docker-node1 flask-redis]$ sudo docker run -d -p 5000:5000 --link redis --name flask-redis -e REDIS_HOST=redis applego/flask-redis
44533f7783e756e767a0e29a7c160b01b32e4cf9b83eff142e83794d5ebe72bd

最后建议大家对于不同的模块我们可以放到不同的容器里面,大家抓紧练习吧!抓紧吧!!!!!!

你可能感兴趣的:(Docker学习之:多容器复杂应用的部署)