docker部署fastapi
使用 Docker 部署 FastAPI 应用程序可以提供更好的可移植性和隔离性。以下是使用 Docker 部署 FastAPI 应用程序的一般步骤:
- 创建 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"]
- 构建 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
- 运行 Docker 容器: 使用构建的镜像来运行一个 Docker 容器。
docker run -d -p 8000:8000 my-fastapi-app
这将在后台运行一个名为 my-fastapi-app
的容器,并将容器的端口 8000 映射到主机的端口 8000。
- 测试应用程序: 打开浏览器,并访问
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"]