欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > Docker制作Python项目镜像

Docker制作Python项目镜像

2024/10/25 20:20:00 来源:https://blog.csdn.net/qq_41885819/article/details/139904728  浏览:    关键词:Docker制作Python项目镜像

Docker制作Python项目镜像

  • 背景
  • Dockerfile
    • Dockerfile内容阐释
  • 制作镜像
  • 迁移镜像
  • 启动容器

背景

在离线环境部署Python项目,出了需要安装对应版本的Python环境,还需要在项目启动前下载项目所需要的依赖。如果后面的迭代依赖有所更新,在离线环境去更新这些就特别麻烦。比较好的选择是使用镜像的方式来进行部署,在本地或公有云环境中制作docker镜像,在迁移到离线环境直接部署就行了。镜像本身会包含项目运行所需要的环境和依赖,避免了离线更新的尴尬。

Dockerfile

制造docker镜像肯定少不了Dockerfile,假如当前项目入口为根目录下的app.py文件,端口为8080,我的Dockerfile可能长下面这样。

FROM python:3.9WORKDIR /appCOPY . /appRUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade pip
RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txtEXPOSE 8080CMD ["python", "app.py"]

Dockerfile内容阐释

# 首先需要指定基础镜像,这里使用的是python:3.9,这个根据不同项目开发使用的版本来就行。
FROM python:3.9
# 指定容器内部的工作目录,默认会自动切换到工作目录下
WORKDIR /app
# 将当前位置的文件都复制到容器内部工作目录下,所以执行docker build命令的位置一般都是项目所在位置的根目录,切当前目录下有Dockerfile
COPY . /app
# 更新pip和下载requirement.txt文件所指定的项目依赖
RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade pip
RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
# 对外暴露的端口,和服务的端口保持一致
EXPOSE 8080
# 执行python项目的启动命令
CMD ["python", "app.py"]

制作镜像

切换到项目根目录,执行docker build命令。
当然,在这之前你需要将你本地的项目打包,然后上传到装有docker环境的linux系统,再解压,切换到项目所在根目录,根目录下有Dockerfile文件(使用windows docker打包镜像的操作逻辑类似)。

docker build -t my_python_app:1.0.1 .

执行以上命令,即可自动完成Dockerfile里面给出的命令步骤,最后生成一个名为my_python_app的镜像,切tag为1.0.1,需要注意一下命令最后是有一个英文的句号的。

迁移镜像

docker镜像可以压缩成tar文件再复制到新的宿主机上,再解压为镜像,便于后续服务启动。

将镜像压缩成tar

docker save -o my_python_app_image.tar my_python_app:1.0.1

将tar还原为镜像

docker reload -i my_python_app_image.tar

启动容器

有了镜像之后,可以压缩迁移到对应的离线服务器上,在解压为镜像,使用docker run命令启动容器。

docker run -d -p 8080:8080 --name my_python_app my_python_app:1.0.1

或者是

docker run -d --net=host --name my_python_app my_python_app:1.0.1

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com