最近项目需要,将一个轻量级的flask (配合gunicorn)应用放在docker 上,于是记录一下流程:
从一穷二白开始, 拉一个centos 7 镜像
$docker pull centos:7
启动一个容器,
$docker run -itd centos:7 /bin/bash
然后 docker ps 看一下 container id, 由于要安装一些其他的c++ 库,并且更新python3的 版本,所以进入到容器内部,
这里记录 两个小坑,1. centos7 gcc 的版本 太低,4.5,由于要支持c++17需要升级到 7.0以上,参考以下帖子:
https://blog.csdn.net/z736248591/article/details/106844901
确认容器的库和python版本和我本地测试相同后,开始复制文件到容器:
作为测试 我复制一个 flask_hello_world.py 到容器的 /project/ 下
代码:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
print('This is the root!')
return 'Hello World'
if __name__ == '__main__':
app.run(debug=False, port=8001)
gunicorn.conf.py 文件也很简单只要配置绑定端口 和 协程个数:
workers = 5
bind = "0.0.0.0:8001"
然后导出这个跨了各种坑的容器(来之不易啊)到一个镜像作为修改后的基础镜像
docker commit -a "作者信息" -m "导出信息" 容器id 导出镜像名称:tag
比如:$docker commit -a "thanos" -m "a test image" xxxxxxxx test_image:v0.0
之后 docker image 一下 可以看到对应名称的镜像
接下来做一个测试用的 dockerfile 内容如下, 从我们导出的基础镜像作为基础, 工作目录为 /project, 容器启动命令为 python3 ./flask_hello_world.py
FROM test_image:v0.0
workdir /project
copY flask_hello_world.py ./flask_hello_world.py
copY gunicorn.conf.py ./gunicorn.conf.py
CMD ["gunicorn","flask_hello_world:app","-c","gunicorn.conf.py"]
之后build 这个应用的镜像(在当前dockerfile 所在的文件夹)
$docker build -t test_test_image . (最后点代表当前文件夹位置)
可以看到做出了一个新的 镜像叫 test_test_image
终于可已启动容器了!!docker run的参数不多说了。绑定容器内gunicorn(flask)端口8001 到 服务器端口8002
$docker run -itd -p 8002:8001 test_test_image
之后docker ps 看下容器已经起来了。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。