当前位置: 首页 > news >正文

使用Docker快速部署FastAPI Web应用

Docker是基于 Linux 内核的cgroup、namespace以及 AUFS 类的Union FS 等技术,对进程进行封装隔离,一种操作系统层面的虚拟化技术。Docker中每个容器都基于镜像Image运行,镜像是容器的只读模板,容器是模板的一个实例。镜像是分层结构,一个镜像可以基于另一个镜像创建,最底层的镜像是基础镜像。

安装Docker

brew install --cask --appdir=/Applications docker

查看docker版本

% docker --version
Docker version 20.10.17, build 100c701

查看docker是否安装成功

% docker info     
Client:Context:    defaultDebug Mode: falsePlugins:buildx: Docker Buildx (Docker Inc., v0.9.1)compose: Docker Compose (Docker Inc., v2.10.2)extension: Manages Docker extensions (Docker Inc., v0.2.9)sbom: View the packaged-based Software Bill Of Materials (SBOM) for an image (Anchore Inc., 0.6.0)scan: Docker Scan (Docker Inc., v0.19.0)

创建FastAPI镜像

依赖

% cat requirements.txt 
fastapi[standard]>=0.113.0,<0.114.0
pydantic>=2.7.0,<3.0.0

Python代码

# main.py
from fastapi import FastAPIapp = FastAPI()@app.get("/")
def index():return "测试容器部署"

目录结构

% tree
.
├── Dockerfile
├── app
│   └── main.py
└── requirements.txt

Dockerfile

% cat Dockerfile 
FROM python:3.9
WORKDIR /code
COPY ./requirements.txt /code/requirements.txt
RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt
EXPOSE 5000
COPY ./app /code/app
CMD ["fastapi", "run", "app/main.py", "--port", "5000"]

Dockerfile常用指令

指令描述
FROM指定基础镜像,可以指定多个,指定多个基础镜像时,编译时也会生成对应的多个镜像
MAINTAINER指定镜像维护人信息,制作人根据自己情况指定
WORKDIR设置工作目录,后续的RUN、COPY、CMD等命令都将在工作目录下运行
RUN构建镜像时运行命令,可以用他安装软件等等
COPY拷贝文件或目录到镜像中
ADD拷贝文件或目录到镜像中,如果源文件是gizp等压缩文件,会被自动解压到目标目录
ENV设置环境变量
USER为RUN、CMD 和 ENTRYPOINT 执行命令指定运行用户
ARG由外部启动时必须传入的参数,在容器启动时用–build-arg传递参数
EXPOSE声明容器暴露给宿主机的端口,可以是一个或者多个以空格间隔
HEALTHCHECK容器中服务健康检查
VOLUME用于指定持久化目录

创建镜像

% docker build -t myimage .         
[+] Building 54.4s (10/10) FINISHED                                             => [internal] load build definition from Dockerfile                       0.0s=> => transferring dockerfile: 37B                                        0.0s=> [internal] load .dockerignore                                          0.0s=> => transferring context: 2B                                            0.0s=> [internal] load metadata for docker.io/library/python:3.9              4.4s=> [internal] load build context                                          0.0s=> => transferring context: 6.57kB                                        0.0s=> [1/5] FROM docker.io/library/python:3.9@sha256:ed8b9dd4e9f89c111f4bd  18.5s# 查看镜像
% docker images
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
myimage      latest    31030096287b   22 minutes ago   1.06GB

Docker build常用参数

参数说明
-t指定Repository以及Tag,例如helloworld:1.0
-f指定Dockerfile路径,Dockerfile不在当前目录时使用
—no-cache常见镜像的过程中不使用Build Cache构建镜像
—pull构建镜像时总是拉取Base Image的最新版本

运行

% docker run -d --name mycontainer -p 80:5000 myimage
f23deab780852268532e6f820da33df67d6b39ba007db01d6eca2660e345a224# 查看容器
% docker ps    
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS                  NAMES
f23deab78085   myimage   "fastapi run app/mai…"   14 minutes ago   Up 14 minutes   0.0.0.0:80->5000/tcp   mycontainer# 进入容器
% docker exec -it mycontainer bash

这里docker run从镜像myimage实例了一个容器,守护模式,命名为mycontainer,容器内部的端口是5000,宿主机的端口是80。
访问

停止和移除容器

# 关闭容器
% docker stop mycontainer
mycontainer# 启动容器
% docker start mycontainer
mycontainer# 移除容器
% docker rm mycontainer  
mycontainer

配置镜像加速器

{"registry-mirrors": ["https://docker.wanpeng.top"]
}

1


http://www.mrgr.cn/news/69392.html

相关文章:

  • 问:SQL优化,七条实践总结?
  • 【JavaEE初阶 — 多线程】wait() notify()
  • YOLO11 旋转目标检测 | OBB定向检测 | ONNX模型推理 | 旋转NMS
  • 嵌入式面试题练习 - 2024/11/15
  • AI 大模型应用:AI开发的捷径工作流模式
  • 第三十三篇——用变化的眼光看最大值和最小值
  • 中介者设计模式 软考
  • Chapter1:python数据结构与算法
  • 【STM32开发】-FreeRTOS开发入手学习
  • github高分项目 WGCLOUD - 运维实时管理工具
  • 通过代码复习回忆 DiffusionDet: DiffusionTracker——代码解析
  • 产品经理晋级-Axure中继器制作美观表格
  • 『VUE』22. 组件传递数据props(详细图文注释)
  • 从截图到代码:screenshot-to-code开源项目实践指南
  • 游戏开发--C#面试题
  • 找工作就上万码优才,海量技术岗位等你来
  • 二分答案-整型二分—愤怒的牛-P1676 [USACO05FEB] Aggressive cows G
  • 如何借助AI 来提高开发效率
  • 《操作系统 - 清华大学》2 -2:中断、异常和系统调用
  • C++20 概念与约束(2)—— 初识概念与约束
  • 记一次文件包含刷题(伪协议篇)
  • Python操作系统交互:subprocess库的基本应用
  • 【MySQL基础知识】内置的系统函数(5)
  • Python实现扩展卡尔曼滤波(EKF)
  • Scikit-learn:数据科学中的瑞士军刀
  • 详解overlay网络和underlay网络