『中级篇』多容器复杂应用的部署(30)

原创文章,欢迎转载。转载请注明:转载自IT人故事会,谢谢!
原文链接地址:『中级篇』多容器复杂应用的部署(30)

通过前几次学习,对于docker的网络特别是单机,今天这次主要一起来看比较复杂的,会用到前面学到的docker的网络知识。今天创建一个application。这篇的源码在:https://github.com/limingios/docker.git 中的docke/No.2/labs/flask-redis/

源码分析
  • application的app.py

程序解释:启动一个应用程序web端,访问一个redis,用户每次访问redis对应的key就会增加1,app的主机,端口是5000

《『中级篇』多容器复杂应用的部署(30)》

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)
  • docker的Dockerfile

引用pyhon2.7的image,主机目录的app,拷贝到app目录下,运行pip按照python的插件,暴露5000端口,运行 python app.py

《『中级篇』多容器复杂应用的部署(30)》
《『中级篇』多容器复杂应用的部署(30)》

FROM python:2.7
LABEL maintaner="¹«Öںţº±à³Ì¿ÓÌ«¶à 394498036@qq.com"
COPY . /app
WORKDIR /app
RUN pip install flask redis
EXPOSE 5000
CMD [ "python", "app.py" ]
  • 开始构建
ls 
cd labs
cd flask-redis
ls

《『中级篇』多容器复杂应用的部署(30)》

sudo service docker restart
sudo docker run -d --name redis redis
sudo docker ps

有老铁会问,为啥不用上几节说的-p啊 -p 6379:6379 我这是为了内部访问啊,不需要暴露出来。.

《『中级篇』多容器复杂应用的部署(30)》

#怼上加速器
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://b81aace9.m.daocloud.io
sudo service docker restart
#创建对应的镜像image
sudo docker build -t liming/flask-redis .

《『中级篇』多容器复杂应用的部署(30)》
《『中级篇』多容器复杂应用的部署(30)》

  • 创建容器
sudo docker container start redis
#通过-e 命令,把环境变量REDIS_HOST=redis 放入容器的环境变量中
sudo docker run -d --link redis --name flask-redis2 -e REDIS_HOST=redis liming/flask-redis
sudo docker exec -it flask-redis2 /bin/sh
env
#效果就出来了
curl 127.0.0.1:5000

《『中级篇』多容器复杂应用的部署(30)》
《『中级篇』多容器复杂应用的部署(30)》 image.png

  • 我们把容器删除,然后把容器的端口映射到端口宿主机上
sudo docker stop flask-redis2
sudo docker rm flask-redis2
sudo docker run -d -p 5000:5000 --link redis --name flask-redis2 -e REDIS_HOST=redis liming/flask-redis

《『中级篇』多容器复杂应用的部署(30)》

图例解释今天的部署

《『中级篇』多容器复杂应用的部署(30)》

PS:有2个容器,他们有访问的关系。通过这个例子大家可以想到现实的例子很多项目有前后台之分的,有数据库,有前端,有后端,对于分模块的项目中,我们推荐使用容器的方式,可以给每个模块放入不同的容器。还讲了-e的方式给容器内设置环境变量的方式,方便应用的访问。

往期精彩
  1. docker导学(一)
  2. 容器的技术概述(二)
  3. docker的魅力初体验-5分钟安装wordpress不走弯路(三)
  4. docker官网介绍(四)
  5. 如何在mac上安装docker(五)
  6. 如何在window上安装docker(六)
  7. 如何在mac上通过vagrant安装虚拟机(七)
  8. 如何在window上通过vagrant安装虚拟机(八)
  9. docker-Machine的本地使用(九)
  10. docker-Machine的本地使用(十)
  11. 在linux/mac下通过Docker-Machine在阿里云上的使用(11)
  12. docker架构和底层技术(12)
  13. docker Image概述(13)
  14. 手动建立一个base Image(14)
  15. 什么是Container(15)
  16. 构建自己的Docker镜像(16)
  17. Dockerfile详解(17)
  18. 镜像的发布(18)
  19. Dockerfile实战(19)
  20. 容器的操作(20)
  21. Dockerfile实战CMD和ENTRTYPOINT的配合(21)
  22. 容器的资源限制(22)
  23. docker网络(23)
  24. docker学习必会网络基础(24)
  25. Linux网络命名空间(25)
  26. Docker Bridge详解(26)
  27. 容器之间的Link(27)
  28. 容器的端口映射(28)
  29. 容器网络之host和none(29)

《『中级篇』多容器复杂应用的部署(30)》 image

    原文作者:IT人故事会
    原文地址: https://www.jianshu.com/p/7eabc9beb9e7
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞