前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >利用 docker 构建 Python3 镜像

利用 docker 构建 Python3 镜像

作者头像
用户1278550
发布2022-05-17 14:38:06
3.9K0
发布2022-05-17 14:38:06
举报
文章被收录于专栏:idba

问题背景

假期处理某些技术的事情,花费2天,其中一半时间是处理 Python 安装环境的问题。

客户侧的机器上默认是 Python 2.7.5 ,没有标准的 Python3 环境,而且不能联网,也就不能方便的使用 yum 工具安装 Python3 和其他相关依赖的包 和相关模块。

解决

其实最开始是 惯性思维 逐步通过找包的方式 初始化 Python3 的环境,经过一番尝试,依赖太多解决 ,yum 源又不完整,故想到使用 docker打包 Python 项目成镜像文件的方式。其实有2种方式。

方法一 dockerfile

1 编写dockerfile

代码语言:javascript
复制
FROM python:3.6
WORKDIR /app
ADD . .
RUN pip  install -r requirements.txt --index-url http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
RUN yum install kde-l10n-Chinese -y
RUN localedef -c -f UTF-8 -i zh_CN zh_CN.utf8
CMD ["python", "./src/test.py"]

2 生成Docker镜像 在dockerfile所在的目录下运行

docker build -t my_python:3.6 .

3 启动容器

docker run -itd --name python_docker my_python:3.6 bash

检查容器里面的python 环境是否符合预期

4 导出镜像 上传到客户机器

docker save c58af804d4c5 > my_python_3.6.tar

docker import /root/my_python_3.6.tar my_python_3.6

docker run -itd my_python_3.6 bash 该方法的缺点是 镜像文件比较大 接近1G

方法二 直接利用官方的 python 镜像

1 docker search python3.8 开源找个镜像

2 下载下来,运行容器,进入容器安装依赖包

docker pull docker.io/digglerz/python3.8

3 把安装好依赖运行的容器docker commit 重新提交镜像

docker run -itd f1f9f4c5559e bash

把 requirements.txt 拷贝到新的 容器里面

docker cp requirements.txt 容器id:

进入到容器里面 执行

pip install -r requirements.txt --index-url http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com

然后退出容器

docker commit 36eaae471282 python_docker:3.8

4 docker save -o 重新到处新的镜像 > docker save 8178dfdac83e -o my_python_docker.tar 5 打包上传镜像到客户环境,加载镜像。

最后对比两个方法的 docker 镜像的文件大小,方法一 的镜像文件大小为 970MB,方法二的镜像文件大小为230MB

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-05-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 yangyidba 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题背景
  • 解决
    • 方法一 dockerfile
      • 方法二 直接利用官方的 python 镜像
      相关产品与服务
      容器服务
      腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档