美文网首页
docker网络之多容器复杂应用的部署演示

docker网络之多容器复杂应用的部署演示

作者: 谜00016 | 来源:发表于2018-10-23 10:25 被阅读3次

今天我们来使用docker来部署一个工作中可能会碰到的场景服务。

需求:

     分别将业务服务和redis服务运行在不同的容器中,已知业务服务需要使用redis服务

准备工作

  • 拉取python:2.7镜像
  • 拉取redis镜像
  • 编写业务服务代码app.py
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)

步骤

  • 运行redis服务(此时一般不需要做端口映射,不对外提供服务)
docker run -d --name redis redis
  • 编写Dockerfile
FROM python:2.7
LABEL maintaner="xxxxx@qq.com"
COPY . /app
WORKDIR /app
RUN pip install flask redis
EXPOSE 5000
CMD ["python","app.py"]
  • 构建镜像
docker build -t  xxxx/flask-redis .
  • 运行刚刚构建的镜像(docker run命令)
docker run -d -p 5000:5000 --link redis --name flask-redis -e REDIS_HOST=redis xxxx/flask-redis

对上述命令简要说明一下,--link是允许另一个容器在不知道一个容器ip的情况下,可以使用其容器的name来进行连接访问。比如此处redis指的是之前运行的redis容器。-e REDIS_HOST=redis表示的是在生成容器的时候可以生成一个环境变量,此时生成的环境变量为REDIS_HOST=redis。我们进入容器运行env命令,查看一下:

此时生成了我们所需要的环境变量,结合前面的--link redis,我们再看app.py代码中的redis连接部分: 就实现了无需知道redis所在容器的ip地址就可以连接到redis服务了。
  • 运行结果

相关文章

网友评论

      本文标题:docker网络之多容器复杂应用的部署演示

      本文链接:https://www.haomeiwen.com/subject/deygzftx.html