一、问题
你有一个基于Python框架Flask(http://flask.pocoo.org)编写的web应用程序,该程序运行于Ubuntu上。你希望在容器中运行这个应用。
二、解决方案
这里我使用很简单的Hello world!应用例子作为说明,起Python代码如下
#!/usr/bin/env pythonform flask import Flaskapp = Flask(__name__)@app.route('/hi')def hello_world():return 'Hello World!'if __name__=='__main__':app.run(host='0.0.0.0',port=5000)
为了让这个程序能跑起来,需要编写一个Dockerfile文件,在Docekrfile文件使用
- RUN指令来安装运行该程序需要的软件依赖。
- EXPOSE指令将程序监听的端口暴露给外部
- ADD指令将应用程序复制到镜像内的文件系统上
这个应用程序的Dockerfile如下所示。
FROM ubuntu:update_vimRUN apt-get updateRUN apt-get install -y pythonRUN apt-get install -y python pipRUN apt-get clean allRUN pip install flaskADD hello.py /tmp/hello.pyEXPOSE 5000CMD ["python","/tmp/hello.py"]
这里我们没有对Dockerfile进行语法优化,这个Dockerfile语句RUN命令执行了更新缓存仓库,安装了Python和Pip然后安装了Flask微框架
ADD命令将hello.py文件复制到镜像的/tmp/下。这个应用程序(hello.py)使用了5000端口,并将端口暴露给Docker主机。最后通过CMD命令执行python /tmp/hello.py
剩下的工作就是构建镜像了,如下所示:
$ docker build .Sending build context to Docker daemon 3.072kBStep 1/8 : FROM ubuntu:update_vim---> 2719f7931237Step 2/8 : RUN apt-get update---> Using cache---> 534f0bb9bef2Step 3/8 : RUN apt-get install -y python---> Using cache---> 3d0e5dfe624aStep 4/8 : RUN apt-get install -y python3-pip---> Using cache---> 6c65fc0eb7c0Step 5/8 : RUN pip3 install flask---> Running in fe58fbf09a8eCollecting flaskDownloading Flask-1.1.2-py2.py3-none-any.whl (94 kB)|████████████████████████████████| 94 kB 118 kB/sERROR: Could not find a version that satisfies the requirement itsdangerous>=0.24 (from flask) (from versions: none)ERROR: No matching distribution found for itsdangerous>=0.24 (from flask)
出现报错!待解决
