美文网首页
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