docker-多容器应用部署

本文介绍如何使用Docker容器化部署一个基于Flask的应用,并连接至Redis服务。通过编写Python代码、Dockerfile及配置环境变量实现应用与Redis的交互。文章详细记录了从创建Python应用到容器部署的全过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这里使用两个容器,分别是Python和redis的,通过相连两个容器来执行一个简单的应用。在其中有一些坑,我都用红色来标明字体了

1、准备一个简单的Python文件

vim 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('hi
 ts'),socket.gethostname())

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

2、使用Dockerfile制作一个base image为wensheng163/wensheng-pip-python,添加并设置了工作目录,安装了flask,redis库,端口号为5000,执行了app.py的image(注意,如果在FROM 写的是python,而且本地没有python的image,那么就会自动去hub.docker.com官网上获取python最新的image,但获取下的python image是最小化版image,没有IP,也不能访问公网,在执行pip install flask redis这一步的时候就会报错。这里建议先自己制作一个能访问公网的 python image,这样的话使用下面的Dockerfile创建新的镜像的时候才会成功。所以下面我就使用可以访问公网的wensheng163/wensheng-pip-python image(事先自己制作好的image),制作能访问公网的image方法小编这里也写了一篇博客,可以参考参考:https://blog.youkuaiyun.com/vincen123/article/details/89066798

vim Dockerfile 
 ###基于wensheng163/wensheng-pip-python image###
 FROM wensheng163/wensheng-pip-python
 
 ###给这个image添加说明###
 LABEL maintaner="wensheng"
 
 ###在根目录里添加app的目录###
 COPY . /app

 ###设置工作目录为/app###
 WORKDIR /app

 ###这个image运行pip install flask redis命令,安装flask和redis库###
 RUN pip install flask redis

 ###设置这个image的端口为5000###
 EXPOSE 5000

 ###这个容器执行python app.py命令###
 CMD [ "python", "app.py" ]

3、准备一个redis image并创建名为redis的container

###基于redis的image一个名为redis的container,并在后台运行###
docker run -d --name redis redis

###如果本地没有名为redis的image,那么执行这个命令后会自动在docker hub上获取官方的redis image###

现在可以看到redis的container正在运行着了

 4、创建使用Dockerfile创建Python image,名为vincen163/falsk-redis

docker build -t vincen163/falsk-redis .

6、创建并运行container

docker run -d --link redis --name python-redis -e REDIS_HOST=redis vincen163/falsk-redis

###基于vincen163/falsk-redis image创建一个名为python-redis的container,这个container在后台运行,并为这个container设置一个环境变量REDIS_HOST为redis,并且与redis container关联,并为这个container###

可以使用docker container ls确认一下这个container是否创建成功

7、交互式地运行container

docker exec -it python-redis /bin/sh
###交互式地运行python-redis这个container,进入的环境是/bin/sh###

 8、验证(在container环境下)

9、在本地运行这个应用

先将python-redis这个container关了并且删除

[root@svr3 4-apps]# docker stop python-redis
python-redis
[root@svr3 4-apps]# docker rm python-redis
python-redis

 然后重新创建一个container,将本地访问5000端口转发到容器里的5000端口

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值