前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >构建Python Dockerfile的奇淫巧技

构建Python Dockerfile的奇淫巧技

作者头像
Ewdager
发布2020-07-14 14:38:14
8930
发布2020-07-14 14:38:14
举报
文章被收录于专栏:Gvoidy备份小站

镜像构建

前言

最简单的情况下,如果我们使用官方python镜像,构建我们的容器会无敌庞大。因为他帮我们预置了许许多多类库。同时我们直接使用RUN pip install /xxx/requirements.txt安装环境时,每次构建镜像都会从pip仓库里面拉包,也会非常慢。

代码语言:javascript
复制
FROM python:3.7
COPY . /app
WORKDIR /app
RUN pip install -r requirements.txt
CMD ["uwsgi", "--ini", "/xxx/uwsgi.ini"]

构建requirements缓存(使用空间换时间)

代码语言:javascript
复制
FROM python:3.7
COPY requirements.txt /
RUN pip install -r /requirements.txt
COPY src/ /app
WORKDIR /app
CMD ["uwsgi", "--ini", "/xxx/uwsgi.ini"]

用这种方式重写我们的 Dockerfile,可以利用 Docker 的层缓存,如果 requirements.txt 文件不变,则跳过安装 pip 包。

使用alpine镜像(使用时间换空间)

代码语言:javascript
复制
FROM python:3.6-alpine

COPY requirements.txt /

RUN pip install --upgrade pip -i https://pypi.douban.com/simple \
    && pip install -r /requirements.txt -i https://pypi.douban.com/simple

RUN mkdir /mailAlarm

WORKDIR /mailAlarm

COPY . /mailAlarm

VOLUME /mailAlarm/config

RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories \
    && apk add --no-cache tzdata \
    && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
    && echo 'Asia/Shanghai' >/etc/timezone

CMD ["python", "-u", "/mailAlarm/run.py"]

这种方式构建镜像就能得到很小的镜像,但是需要额外安装部分pip包所依赖的类库。因为alpine版本镜像默认是只安装python环境所需要的基础类库。

特别注意,某些工具类的包编译安装完pip包后可以使用apk del删除 ※ 常用包: .build-deps gcc musl-dev

其他神奇的方法

链接log文件到docker日志流

代码语言:javascript
复制
ln -sfT /dev/stdout "/mfa/servers.log"

设置时区

如果使用的是alpine镜像,需要安装tzdata,且不能删除

代码语言:javascript
复制
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
    && echo 'Asia/Shanghai' >/etc/timezone
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 镜像构建
    • 前言
      • 构建requirements缓存(使用空间换时间)
        • 使用alpine镜像(使用时间换空间)
        • 其他神奇的方法
          • 链接log文件到docker日志流
            • 设置时区
            相关产品与服务
            容器服务
            腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档