使用 Dockerfile 部署 Python 服务的几种方式,同时也支持通过 Docker Compose 进行构建和运行,配置可参考:dockerfile.yml。 Poetry 通过 Poetry 构建和运行: 1FROM python:3.122 3# 将当前工作目录设置为 /code4WORKDIR /code5 6# 拷贝依赖文件7COPY pyproject.toml poetry.lock /code/8RUN pip install -i https://pypi.douban.com/simple/ poetry9RUN poetry install --no-root --no-directory10 11# 拷贝项目数据到 code 目录12COPY . /code/13RUN poetry install --no-dev14 15# 声明要监听的端口16EXPOSE 500017 18# 使用配置文件19CMD [ "poetry", "run", "gunicorn", "app.main:app", "--config", "config/gunicorn.py" ]20 21# 直接在参数中传递配置22# CMD [ "poetry", "run", "gunicorn", "app.main:app", "--workers", "2", "--worker-class", \23 # "uvicorn.workers.UvicornWorker", "-b", "0.0.0.0:5000" ] 分阶段构建: 第一阶段先安装 poetry 导出依赖到 requirements.txt; 第二阶段通过导出的 requirements 文件使用 pip 进行安装依赖; 最后拷贝代码到 Docker 中。 1FROM python:3.9-slim as export-reqs2 3WORKDIR /tmp4 5# 拷贝依赖文件6COPY pyproject.toml poetry.lock /tmp/7RUN pip install -i https://pypi.douban.com/simple/ poetry8 9# 从 Poetry 导出依赖到 requirements.txt10RUN poetry export -f requirements.txt --output requirements.txt --without-hashes11 12 13FROM python:3.12-slim-bookworm14 15# 将当前工作目录设置为 /code16WORKDIR /code17 18# 从 export-reqs 拷贝文件到工作目录19COPY --from=export-reqs /tmp/requirements.txt /code/20 21# 通过 pip 安装依赖22RUN pip install -i http://pypi.douban.com/simple/ --no-cache-dir --upgrade -r requirements.txt && rm requirements.txt23 24# 拷贝项目数据到 code 目录25COPY . /code/26 27# 创建保存数据的目录28RUN mkdir /data29 30# 声明要监听的端口31EXPOSE 500032 33ENTRYPOINT [ "gunicorn", "app.main:app", "--config", "app/config/gunicorn.py" ]