docker部署fastapi

使用 Docker 部署 FastAPI 应用程序可以提供更好的可移植性和隔离性。以下是使用 Docker 部署 FastAPI 应用程序的一般步骤:

  1. 创建 Dockerfile: 在项目的根目录下创建一个名为 Dockerfile 的文件,用于定义 Docker 镜像的构建过程。在 Dockerfile 中,你需要指定基础镜像、复制应用程序代码、安装依赖项和设置运行命令等。
# 使用 Python 作为基础镜像
FROM python:3.11

# 设置工作目录
WORKDIR /app

# 复制应用程序代码到容器中
COPY . /app

RUN ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo Asia/Shanghai > /etc/timezone

RUN sed -i 's#deb.debian.org#mirrors.aliyun.com#g' /etc/apt/sources.list

# 安装依赖项
RUN apt-get update && apt-get install -y netcat
RUN pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple


# 暴露应用程序的端口
EXPOSE 8000

# 运行 FastAPI 应用程序
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
  1. 构建 Docker 镜像: 在终端中导航到包含 Dockerfile 的项目目录,并执行以下命令来构建 Docker 镜像。
docker build -t my-fastapi-app .

这将根据 Dockerfile 中的定义构建一个名为 my-fastapi-app 的镜像。

我们也可以把本地镜像导出出来。

docker save -o ar-service.tar my-fastapi-app

然后我们在要去部署的机器执行

导入镜像

docker load -i ar-service.tar

删除镜像

docker rmi my-fastapi-app:v1
docker rmi --force my-fastapi-app:v1
  1. 运行 Docker 容器: 使用构建的镜像来运行一个 Docker 容器。
docker run -d -p 8000:8000 my-fastapi-app

这将在后台运行一个名为 my-fastapi-app 的容器,并将容器的端口 8000 映射到主机的端口 8000。

  1. 测试应用程序: 打开浏览器,并访问 http://localhost:8000/,你应该能够看到 FastAPI 应用程序的响应。

这些步骤涵盖了基本的 Docker 部署流程。你可以根据需要进行更多的配置,例如将容器连接到其他服务、设置环境变量等。此外,还可以使用 Docker Compose 等工具来更方便地管理多个容器的部署。

对于docker build 时环境问题

root@jenkins-srv:/opt/pkg_prjs/ecpdeploy/backend# cat /etc/apt/sources.list
## 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
#deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
## deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
#deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
## deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
#deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
## deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
#deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
## deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse

# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
FROM python:3.11
WORKDIR /opt/oa-service
COPY . .
EXPOSE 9902
RUN ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo Asia/Shanghai > /etc/timezone
RUN cp /etc/apt/sources.list /etc/apt/sources.list.bak && \
    sed -i 's/deb.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list && \
    apt update && apt install -y netcat vim
RUN pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple
#CMD ["python","main.py"]
CMD ["uvicorn","main:app","--host","0.0.0.0","--port","9902"]
posted @ 2023-12-27 10:34  hanfe1  阅读(613)  评论(0编辑  收藏  举报