可以使用多阶段构建的方法,在第一个阶段构建mysqlclient
的wheel文件,然后将其复制到运行时阶段。这样,gcc
及其相关依赖就只会保留在构建阶段而不影响最终镜像。
当然,你也可以对整个requirements.txt
文件采取同样的做法——使用pip wheel -w /deps -r requirements.txt
命令或者其他类似方法。
# 第一阶段:用于构建mysqlclient的环境
FROM python:3.12 as mysqlclient-build
RUN curl -LsS https://r.mariadb.com/downloads/mariadb_repo_setup | bash
RUN apt-get update
RUN apt-get install -y mariadb-client libmariadb-dev-compat libmariadb-dev
RUN pip wheel -w /deps mysqlclient
# 第二阶段:实际应用运行环境
FROM python:3.12
COPY --from=mysqlclient-build /deps/*.whl /deps
RUN pip install /deps/*.whl && rm -rf /deps
# ... 接下来是你的应用程序其他部分配置
# 根据mysqlclient的wheel文件是否静态链接了libmariadb运行时库,
# 你可能需要也可能不需要在这个运行时阶段通过apt-get install来安装libmariadb。
这样构建后,根据mysqlclient的wheel包是否已经静态链接了libmariadb运行时库,你可能还需要(如果未静态链接)或不需要(如果已静态链接)在运行时阶段也通过apt-get install
来安装libmariadb库。