如何将一个python应用以docker镜像的方式来运行?

Posted Python 集中营

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将一个python应用以docker镜像的方式来运行?相关的知识,希望对你有一定的参考价值。

docker 作为应用容器的大魔王,特别是在做java分布式的时候运用很是广泛。因为每一个docker的容器都是独立的,这跟分布式的独立节点思想是如出一辙。既然docker是一个应用容器,那就意味着只要是应用就能运行在它上面了......

【阅读全文】

环境条件

\'\'\'
python 环境、pip软件工具
docker 环境
第一步:创建测试项目
第二步:导出测试项目中的依赖包
第三步:编写 Dockfile(docker打包时的参数配置)
第四步:生成docker镜像
第五步:运行docker容器
\'\'\'

生成镜像并运行

创建项目

\'\'\'
创建项目
\'\'\'
# 项目路径
# /usr/docker/hello_image.py

# hello_image.py 文件内容

print("docker test hello image !")

导出python的依赖包

\'\'\'
导出python的依赖包
\'\'\'
# 直接将需要的依赖包列表导入到/usr/docker/文件夹下面
# pip freeze > /usr/docker/requirements.txt

编写Dockfile文件

\'\'\'
在/usr/docker/ 的目录下创建Dockfile文件
编写Dockfile文件
\'\'\'

# 添加python基础镜像
#
# FROM python
#
# 添加维护人员的信息
#
# MAINTAINER Python集中营
#
# 将代码添加到固定文件夹
#
# ADD ./docker/work_code
#
# 设置/work_code文件夹是工作目录
#
# WORKDIR /work_code
#
# 安装python的依赖插件支持
#
# RUN pip install -r requirements.txt
#
# CMD ["python", "/work_code/hello_image.py"]

构建镜像

\'\'\'
构建镜像
\'\'\'

# docker镜像构建命令
# docker build -t \'镜像名称\' \'Dockerfile文件路径\'

# docker build -t hello_image /usr/docker/Dockerfile

运行容器

\'\'\'
运行容器
\'\'\'
# docker容器运行命令
# docker run -d --name c_name \'镜像名称\'

# docker run -d --name c_name hello_image
欢迎关注作者公众号【Python 集中营】,专注于后端编程,每天更新技术干货,不定时分享各类资料!

Python Flask项目在Gitlab CI中自动打包Docker镜像

参考技术A 第一步,在Gitlab中新建一个项目

第二步,克隆支本地

第三步,本地调通Python Flask项目

用VSCode打开该项目,先用flask在app.py下写了一个hello world:

然后在index.html中写下hello world,放在templates目录下:

安装flask依赖

用以下命令进行本地运行

打开浏览器进入localhost:5000即可看到Hello World

本地调试成功

第四步,本地调通Docker打包与容器运行

于是尝试利用docker打包成镜像,由于该项目依赖flask库,所以在根目录添加了requirements.txt文件,里面标明了依赖库以及相应的版本

然后编写好了Dockerfile

运行命令开始打包:

打包成功,运行容器:

在浏览器浏览localhost没有响应

查看日志发现没有报错

再尝试用浏览器打开127.0.0.1,也不行

网上搜索发现python flask在服务器不能直接运行,需要借助gunicorn

于是编写了配置文件gunicorn.conf.py:

同时修改了Dockerfile:

以及修改了依赖包requirements.txt:

再打包镜像、运行容器,发现可以正常运作了:

第五步,Gitlab CI设置脚本自动打包Docker镜像

由于自建Docker镜像仓库和账号是隐私信息,因此使用Gitlab CI变量代替,再在项目CI/CD设置内赋值

以上是关于如何将一个python应用以docker镜像的方式来运行?的主要内容,如果未能解决你的问题,请参考以下文章

Docker

搭建docker私有镜像仓库

如何合并两个Docker 镜像

如何删除运行的docker镜像

Python项目打包为docker镜像并迁移

如何删除docker images下的镜像