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

作者: IT人故事会 | 来源:发表于2018-07-11 23:02 被阅读22次

通过前几次学习,对于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


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

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
sudo service docker restart
sudo docker run -d --name redis redis
sudo docker ps

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

#怼上加速器
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 .
  • 创建容器
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
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
图例解释今天的部署

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)

    通过前几次学习,对于docker的网络特别是单机,今天这次主要一起来看比较复杂的,会用到前面学到的docker的网...

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

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

  • 2022-08-29 kubernetes介绍

    应用部署方式演变 传统部署---->虚拟化部署---->容器化部署 容器化部署出现的问题 1、一个容器故障停机了,...

  • DaoCloud坑系列

    1. 应用重新部署异常 点击重新部署报错如下图: 查看应用容器发现很多异常的容器: 推测是Daocloud容器状态...

  • Dockerfile应用容器化

    应用容器化 容器是为应用而生!具体来说,容器能够简化应用的构建、部署和运行过程。 容器化步骤 完整的应用容器化过程...

  • docker

    容器的概念 优势 灵活: 即使是最复杂的应用也能被容器化 轻量: 你能即时的部署更新,升级 你能本地build, ...

  • Docker 容器化多应用部署

    对于云上部署一直没有找到一个比较简单舒服的方式,花了点时间终于把 Docker 常用的一个基本套路跑通了,本文结合...

  • k8s和service mesh关系

    Kubernetes是什么? 互联网应用部署经历了传统部署时代、虚拟化部署时代、容器化部署时代三个阶段,容器化部署...

  • 简介

    Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署...

  • 『中级篇』Docker compose 部署一个复杂的应用(41

    今天部署一个复杂的application。源码地址:https://github.com/limingios/do...

网友评论

    本文标题:『中级篇』多容器复杂应用的部署(30)

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