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


- 我们把容器删除,然后把容器的端口映射到端口宿主机上
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的方式给容器内设置环境变量的方式,方便应用的访问。
往期精彩
- docker导学(一)
- 容器的技术概述(二)
- docker的魅力初体验-5分钟安装wordpress不走弯路(三)
- docker官网介绍(四)
- 如何在mac上安装docker(五)
- 如何在window上安装docker(六)
- 如何在mac上通过vagrant安装虚拟机(七)
- 如何在window上通过vagrant安装虚拟机(八)
- docker-Machine的本地使用(九)
- docker-Machine的本地使用(十)
- 在linux/mac下通过Docker-Machine在阿里云上的使用(11)
- docker架构和底层技术(12)
- docker Image概述(13)
- 手动建立一个base Image(14)
- 什么是Container(15)
- 构建自己的Docker镜像(16)
- Dockerfile详解(17)
- 镜像的发布(18)
- Dockerfile实战(19)
- 容器的操作(20)
- Dockerfile实战CMD和ENTRTYPOINT的配合(21)
- 容器的资源限制(22)
- docker网络(23)
- docker学习必会网络基础(24)
- Linux网络命名空间(25)
- Docker Bridge详解(26)
- 容器之间的Link(27)
- 容器的端口映射(28)
- 容器网络之host和none(29)
网友评论