如何在Apache+PHP的Docker镜像中添加Python及依赖包?
嘿,完全没问题!新手刚接触Docker的时候,很容易在镜像选择和环境配置上犯迷糊,这太正常啦😉
首先得跟你说清楚:你当前用的php:7.0-apache镜像确实可以添加Python环境并安装那些依赖,但这里可能存在一个小误区——如果你的脚本只是纯Python脚本,根本不需要PHP或Apache服务,那用PHP镜像作为基础就有点“大材小用”了,反而会让镜像体积变大、环境变复杂。Docker的最佳实践里很重要的一条就是单一容器单一职责,所以我们分两种情况来解决:
情况1:不需要PHP,只跑Python脚本(推荐)
直接用官方的Python基础镜像来构建,这样环境更纯净,也更适配Python应用。比如选一个和你脚本兼容的Python版本(比如3.9,你可以根据实际情况调整),Dockerfile可以这么写:
# 选择轻量的Python基础镜像,slim版本去掉了很多不必要的组件 FROM python:3.9-slim # 设置容器内的工作目录 WORKDIR /app # 把本地的Python脚本复制到容器里 COPY src/ /app # 安装依赖:dlib是C扩展库,需要先装编译工具和系统依赖 RUN apt-get update && apt-get install -y --no-install-recommends \ build-essential \ cmake \ libopenblas-dev \ liblapack-dev \ libx11-dev \ libgtk-3-dev \ # 安装Python依赖 && pip install --no-cache-dir numpy opencv-python dlib imutils \ # 清理编译工具和apt缓存,减小镜像体积 && apt-get purge -y --auto-remove build-essential cmake \ && rm -rf /var/lib/apt/lists/* # 如果你的Python脚本需要对外提供服务(比如web接口),再暴露端口,否则可以去掉 # EXPOSE 80 # 启动你的Python脚本,替换成你实际的脚本文件名 CMD ["python", "main.py"]
情况2:必须保留PHP/Apache环境(比如要同时跑PHP服务和Python脚本)
如果确实需要在PHP镜像里加Python,那也可以修改你的Dockerfile,因为php:7.0-apache基于Debian Jessie,我们可以直接在里面安装Python3和依赖:
FROM php:7.0-apache # 安装Python3、pip以及dlib需要的编译依赖 RUN apt-get update && apt-get install -y --no-install-recommends \ python3 \ python3-pip \ build-essential \ cmake \ libopenblas-dev \ liblapack-dev \ libx11-dev \ libgtk-3-dev \ # 安装Python依赖 && pip3 install --no-cache-dir numpy opencv-python dlib imutils \ # 清理冗余文件,减小镜像体积 && apt-get purge -y --auto-remove build-essential cmake \ && rm -rf /var/lib/apt/lists/* # 复制Python脚本到容器,路径可以根据你的需求调整,不一定放/var/www/html COPY src/ /app # 保留Apache的默认端口暴露 EXPOSE 80 # 如果需要启动Python脚本,你可能需要用supervisor之类的工具来同时管理Apache和Python进程,新手阶段建议先分开容器运行
最后再提醒一句:dlib的安装需要编译,所以必须装那些编译工具,安装完成后一定要清理掉,不然镜像会变得非常大哦!
内容的提问来源于stack exchange,提问作者fightstarr20
相关产品推荐
相关产品推荐

