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-slim
WORKDIR /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 py_base:0.1
# 设置工作目录
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"]


被折叠的 条评论
为什么被折叠?



