python(44) : docker compose基于基础镜像部署python服务
1.前言
docker compose基于python镜像启动容器, 支持多实例
2.环境信息
系统: Alibaba Cloud Linux release 3 (OpenAnolis Edition)
架构: x86_64
docker版本: Docker version 26.1.3, build b72abbb
3.构建基础镜像
3.1.Dockerfile
# 使用Python 3.11官方镜像作为基础镜像
FROM python:3.10-slimWORKDIR /app# 复制requirements.txt文件
COPY requirements.txt .# 更新pip
RUN python -m pip install --upgrade pip -i https://mirrors.aliyun.com/pypi/simple/ requests# 根据requirements.txt文件安装依赖
RUN pip install --no-cache-dir -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/ requests# 安装其他依赖(可选)
#RUN pip install --upgrade Flask -i https://mirrors.aliyun.com/pypi/simple/ requests# 设置时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone# 创建日志目录
RUN mkdir -p /app/logs
3.2.build.sh
# 删除名为 py_base:0.1 的本地 Docker 镜像(如果存在)
docker rmi py_base:0.1# 使用当前目录下的 Dockerfile 构建新的 py_base:0.1 镜像
docker build -t py_base:0.1 . --no-cache
4.基于基础镜像启动容器运行python
4.1.Dockerfile
FROM python:3.10-slim# 设置工作目录
WORKDIR /app# 设置环境变量
ENV PYTHONPATH=/app
ENV PYTHONUNBUFFERED=1# 复制应用代码(从项目根目录复制)
COPY . .# 防止.env.prod不存在报错
RUN touch /app/.env.prod
# 删除原有.env文件(如果存在),并将.env.prod重命名为.env
RUN rm -f /app/.env && \if [ -f /app/.env.prod ]; then mv /app/.env.prod /app/.env; fi# 更新pip
RUN python -m pip install --upgrade pip -i https://mirrors.aliyun.com/pypi/simple/ requests# 安装其他依赖(可选)
#RUN pip install --upgrade Flask -i https://mirrors.aliyun.com/pypi/simple/ requests# 创建日志目录
RUN mkdir -p /app/logs# 设置非root用户
RUN useradd --create-home --shell /bin/bash app && \chown -R app:app /app
USER app# 暴露端口(如果需要的话)
#EXPOSE 8888# 启动命令
CMD ["python", "main.py"]
4.2.docker-compose.yml和deploy.sh参考如下文档
参考: python(43) : docker compose部署python服务-CSDN博客