Alpine Linux 是一个社区开发的面向安全应用的轻量级 Linux 发行版,适合用来做路由器、防火墙、VPNs、VoIP 盒子以及服务器的操作系统,基于 uClibc 和 Busybox。由于镜像大小一般只有5MB左右,在Docker容器化的应用中得到了广泛的应用。本文主要介绍 Docker Alpine Linux 安装 Python3 的Dockerfile。

1、Dockerfile

Dockerfile 文件一般包含基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令,’#’ 为 Dockerfile 中的注释。

参考文件:Docker 构建自定义镜像和Dockerfile文件

2、直接安装 

通过Dockerfile文件构建镜像时,直接通过命令进行进行安装软件包,创建一个轻量级的Python 3运行环境,适用于需要Python 3作为运行环境的应用程序。优化了容器的大小,并确保了日志输出的即时性。

FROM alpine:latest
ENV PYTHONUNBUFFERED=1
RUN apk add --update --no-cache python3 && ln -sf python3 /usr/bin/python
RUN python3 -m ensurepip
RUN pip3 install --no-cache --upgrade pip setuptools

说明:

指令作用
FROM alpine:latest使用最新版本的Alpine Linux作为基础镜像。
ENV PYTHONUNBUFFERED=1设置环境变量以确保Python输出实时打印,而不是被缓冲。
RUN apk add --update --no-cache python3 && ln -sf python3 /usr/bin/python安装Python 3并更新包索引,不缓存任何包,创建pythonpython3的符号链接。
RUN python3 -m ensurepip确保pip安装器被安装。
RUN pip3 install --no-cache --upgrade pip setuptools使用pip升级pip本身和setuptools包,不缓存任何安装过程中的文件。

3、编译安装

通过Dockerfile文件构建镜像时,安装依赖环境后,在下载Python源代码,然后在通过编译安装,如下,

FROM alpine:latest
# 指定Python的版本
ARG PYTHON_VERSION=3.9.9
# install build dependencies and needed tools
RUN apk add \
    wget \
    gcc \
    make \
    zlib-dev \
    libffi-dev \
    openssl-dev \
    musl-dev
# download and extract python sources
RUN cd /opt \
    && wget https://www.python.org/ftp/python/${PYTHON_VERSION}/Python-${PYTHON_VERSION}.tgz \                                              
    && tar xzf Python-${PYTHON_VERSION}.tgz
# build python and remove left-over sources
RUN cd /opt/Python-${PYTHON_VERSION} \ 
    && ./configure --prefix=/usr --enable-optimizations --with-ensurepip=install \
    && make install \
    && rm /opt/Python-${PYTHON_VERSION}.tgz /opt/Python-${PYTHON_VERSION} -rf

说明:

指令

解释

FROM alpine:latest

设置基础镜像为最新版的Alpine Linux。

ARG PYTHON_VERSION=3.9.9

定义构建参数

PYTHON_VERSION

,默认设置Python版本为3.9.9。

RUN apk add \

wget \

gcc \

make \

zlib-dev \

libffi-dev \

openssl-dev \

musl-dev

安装编译Python所需的依赖,包括编译器、下载工具和必要的开发库。

推荐文档