一、实验概述
将一个Python程序打包成一个docker image,然后运行成一个Container容器
二、实验步骤
1、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('hits'),socket.gethostname())
if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000, debug=True)
2、上传app.py文件到宿主机指定目录
3、创建Dockerfile文件
首先,建立运行环境
然后,原码复制到image里面
然后,做些相关配置
最后,执行CMD相关命令
FROM python:2.7
LABEL "maintainer=xxxxx"
RUN pip install flask
COPY app.py /app
WORKDIR /app
EXPOSE 5000
CMD ["python","app.py"]
4、build
docker build -t zheng007/python-helloworld .
会报如下错误:
Step 4/7 : COPY app.py /app
---> a302573ed2e5
Step 5/7 : WORKDIR /app
Cannot mkdir: /app is not a directory
5、排错
docker run -it a302573ed2e5 /bin/bash
会发现/app是一个文件不是目录,而 a302573ed2e5是build过程中生成的一个中间形态的容器
因此,需修改Dockerfile文件
FROM python:2.7
LABEL "maintainer=xxxxx"
RUN pip install flask
COPY app.py /app/ #加一个/
WORKDIR /app
EXPOSE 5000
CMD ["python","app.py"]
6、执行容器
docker run -d zheng007/python-helloworld #-d后台运行容器