这里使用两个容器,分别是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端口