微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从一穷二白开始,快速撸一遍配置docker的流程,最后启动一个 flask

最近项目需要,将一个轻量级的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/cocacola81/article/details/106086297?utm_medium=distribute.pc_relevant.none-task-blog-title-10&spm=1001.2101.3001.4242

之后要安装一个 python3.8.3 参考:

https://blog.csdn.net/z736248591/article/details/106844901 

确认容器的库和python版本和我本地测试相同后,开始复制文件到容器:

$docker cp  本地文件  容器名:文件路径

作为测试 我复制一个 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 举报,一经查实,本站将立刻删除。

相关推荐