• Docker 多容器, 复杂应用的部署!


    这次启动两个容器

    一个容器用于运行   redis。  另一个运行 python的 flask web应用。 
    在这个 web app 里面, 访问redis。

    
    

    [miller@docker4 py-flask-redis]$ ls
    app.py Dockerfile

    [miller@docker4 py-flask-redis]$ cat app.py
    from flask import Flask
    import redis
    import os

    host = os.environ.get("REDIS_HOST", "redis")

    redis_conn = redis.Redis(host=host, port="6379")

    app = Flask(__name__)

    @app.route("/")
    def web_test():
        res = redis_conn.incr("range_key")
        return "这是我第 %s 次调用, incr 方法。" % res

    
    

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


    [miller@docker4 py-flask-redis]$ cat Dockerfile
    FROM python:3.7.7
    LABEL maintainer="5913114@qq.com"
    COPY app.py /app/
    RUN pip install flask redis
    WORKDIR /app
    EXPOSE 5000  
    CMD ["python3", "app.py"]

    然后进行 docker build 

    [miller@docker4 py-flask-redis]$  docker build -t caijiwandocker/flask-redis

    [miller@docker4 py-flask-redis]$ docker images
     REPOSITORY                  TAG         IMAGE ID       CREATED         SIZE
     caijiwandocker/flask-redis  latest      557535394ca7   8 minutes ago   929MB
     python                      3.7.7       859d8ec7db6a   10 days ago     919MB
     redis                       latest      4cdbec704e47   11 days ago     98.2MB

    构建完成之后, 执行docker run

    先将redis 容器 启动起来,
    [miller@docker4 py-flask-redis]$ docker run -d --name=redis redis
    然后启动刚刚构建好的 flask的应用。
    [miller@docker4 py-flask-redis]$ docker run -d --link=redis -p 5000:5000 -e REDOS_HOST=reids caijiwandocker/flask-redis

    解释一下:

    --link=redis  link到 redis。 这个redis仅仅只是个名字, 用代替 redis 这个容器的 ip地址使用的。(因为ip地址是多变的。但是只要name不变 就可以访问)
    -p 5000:5000   将主机的 5000端口 映射到 这个flask 容器,抛出的5000端口上。
    -e REDOS_HOST=reids  为这个flask容器 添加一个环境变量。 (app.py 中 os.environ.get("REDOS_HOST")) 其实就是获取的这个环境变量。

    这样如果某一天, redis这个容器要换一个名字,换成  redis-v1 , 那再运行flask这个容器时就可以这样:

    [miller@docker4 py-flask-redis]$ docker run -d --link=redis-v1 -p 5000:5000 -e REDOS_HOST=reids-v1 caijiwandocker/flask-redis

    完全不需要去理会, ip地址到底是多少。 很是方便。

    ##################################################################################################

    在这个例子中  redis 服务器。仅仅只是 内部的 app 进行访问。 而由于docker的  bridge 存在. 容器和容器之间就可以相互的通信访问。
    所以redis服务器, 完全没必要去做映射。 这样反而会让外部也能访问到 redis。 反而不安全。

    仅仅只需要 为 flask 容器。 做一个映射  让外部可以访问到flask就可以了。

  • 相关阅读:
    【(高职专科组)第十一届蓝桥杯省模拟赛答案】给定一个数列,请问找出元素之间最大的元素距离。
    【(高职专科组)第十一届蓝桥杯省模拟赛答案】给定一个数列,请问数列中最长的递增序列有多长。
    POJ 2391 二分+最大流
    HDU 4529 状压dp
    NYOJ 747贪心+dp
    NYOJ 745 dp
    HDU 2686 / NYOJ 61 DP
    HDU 4313树形DP
    HDU 4303 树形DP
    POJ 2342 树形DP
  • 原文地址:https://www.cnblogs.com/chengege/p/12681273.html
Copyright © 2020-2023  润新知