镜像地址:https://hub.docker.com/r/tiangolo/uvicorn-gunicorn-fastapi/

在项目目录新建Dockerfile

Dockerfile

  1. FROM tiangolo/uvicorn-gunicorn-fastapi:python3.7
  2. COPY ./app /app

生成镜像

  1. docker build -t myimage .

建立如下目录和文件
.
├── app
│ ├── main.py

├── docker-compose.yml
├── Dockerfile
└── start-reload.sh

main.py

  1. from fastapi import FastAPI
  2. app = FastAPI()
  3. @app.get("/")
  4. def read_root():
  5. return {"Hello": "World"}
  6. @app.get("/items/{item_id}")
  7. def read_item(item_id: int, q: str = None):
  8. return {"item_id": item_id, "q": q}

start-reload.sh是个空文件,用来reload更改
docker-compose.yml

  1. version: '3'
  2. services:
  3. fastapi:
  4. image: myimage #这是上面生成的镜像
  5. container_name: myfast #这是容器的名称
  6. ports:
  7. - 80:80 #端口映射
  8. volumes:
  9. - /home/afei/code/mydocker/fastapi/app:/app #目录映射
  10. working_dir: /app #contain工作目录
  11. # 运行后执行的命令 就可以在修改文件时自动加载
  12. command: /start-reload.sh

开发调试的流程

用vscode打开目录,
打开vscode的终端,运行:docker-compose up
就可以看到docker反馈的信息,修改文件保存会重新加载
如果代码有错误,会打印出错误信息,docker会自动停止
修改代码错误后再运行:docker-compose up

如果docker已经运行,docker-compose up -d,可以使用docker-compose logs -f -t来实时显示log信息,不用关闭docker

使用vscode的rest client来调试api

因为fastapi主要是用来做api的,所以就可以在vscode中调试,不用切换到浏览器。