docker初学:虚拟机中部署fastapi尝试

1、安装vmware workstation

安装VMware Workstation 16.1.2 Pro for Windows

ps:见参考

2、安装VMware Tools

安装VMware Tools以支持虚拟机和主机之间复制、粘贴内容、拖拽文件

ps:见参考

3、安装Ubuntu

安装Ubuntu 22.04

ps:见参考

4、安装docker

安装docker

ps:见参考

5、配置docker 镜像源

编辑 sudo vim /etc/docker/daemon.json

写入:

{
    "registry-mirrors": [
        "https://ustc-edu-cn.mirror.aliyuncs.com/",
        "https://ccr.ccs.tencentyun.com/",
        "https://docker.m.daocloud.io/"
    ]
}

重启 docker sudo service docker restart

6、安装python环境(非必要)

Ubuntu20.04默认安装python3.10

  • 查看版本:python3 --version

安装pip:

  1. sudo apt-get install python3-pip
  2. sudo pip3 install --upgrade pip

7、创建fastapi项目

  1. 进入主目录,创建项目文件:

  2. mkdir fastapi_project

  3. cd fastapi_project

  4. 创建main.py,我用的vi,或者在win下写好复制过去。

    from fastapi import FastAPI

    app = FastAPI()

    @app.get("/") def read_root(): return {"Hello": "World"}

  5. 创建requirements.txt

    fastapi==0.111.0 uvicorn==0.29.0

8、编写dockerfile

# 使用官方的 Python 镜像作为基础镜像
FROM python:3.12

# 设置工作目录
WORKDIR /app

# 复制 requirements.txt 文件
COPY requirements.txt .

# 安装 Python 依赖并设置时区
RUN apt-get update && apt-get install -y tzdata \
    && cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
    && echo "Asia/Shanghai" > /etc/timezone \
    && pip install --upgrade pip \
    && pip install -r requirements.txt -i https://pypi.mirrors.ustc.edu.cn/simple \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*

# 复制项目的其余内容
COPY . /app

# 设置环境变量
ENV PYTHONUNBUFFERED=1
ENV PYTHONDONTWRITEBYTECODE=1

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

# 启动 FastAPI 应用程序
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000", "--reload"]

9、构建镜像

在项目的根目录下运行以下命令来构建 Docker 镜像:

docker build -t my_fastapi_app .
  • -t my_fastapi_app 是为镜像指定一个标签(my_fastapi_app 是镜像名称)。
  • . 表示当前目录,Docker 将根据当前目录下的 Dockerfile 构建镜像。

10、运行docker容器

构建成功后,运行以下命令启动容器:

docker run -d -p 8000:8000 my_fastapi_app
  • -d:在后台运行容器(分离模式)。
  • -p 8000:8000:将主机的端口 8000 映射到容器的端口 8000
  • my_fastapi_app:这是之前构建的镜像名称。

11、 验证 FastAPI 应用是否运行

容器运行成功后,你可以打开浏览器并访问:

  • 主页http://localhost:8000
  • 自动生成的交互式文档 (Swagger UI):http://localhost:8000/docs
  • ReDoc 文档http://localhost:8000/redoc

你应该能够看到 FastAPI 应用程序的响应。

12、查看日志

查看容器日志,确保应用程序正确运行:

docker logs <container_id>
  • container_id:容器ID

13、修改代码后的步骤

  1. 停止正在运行的容器:docker stop <container_id>
  2. 修改你的 代码。
  3. 重新构建镜像(没测试,自己测试是否需要这一步)
  4. 运行新容器:docker run -d -p 8000:8000 my_fastapi_app

14、查看虚拟机IP地址

  1. 安装net-toolssudo apt install net-tools
  2. 查看IP:ifconfig

虚拟机 IP 地址会显示在 eth0enp0s3ens33 或者 wlan0 接口下

15、从主机中访问

根据14查到的IP访问即可。

  • http://ip:8000

16、用到的命令

  1. 构建 Docker 镜像docker build -t image_name.

    • -t image_name 是为镜像指定一个标签(image_name 是镜像名称)。
    • . 表示当前目录,Docker 将根据当前目录下的 Dockerfile 构建镜像。
  2. 运行 Docker 容器docker run -d -p 8000:8000 image_name

    • -d:以守护进程的方式在后台运行容器(分离模式)。
    • -p 8000:8000:将主机的端口 8000 映射到容器的端口 8000
    • image_name:镜像名称。
  3. 查看运行中的docker进程:docker ps,可以从这里看到容器的ID
  4. 查看所有docker进程:docker ps -a
  5. 查看docker 镜像:docker images
  6. 删除docker容器:docker container rm container_id
    • container_id:容器ID
  7. 删除docker镜像:docker image rm image_id
    • image_id:镜像ID
  8. 查看日志:docker logs container_id
    • container_id:容器ID
  9. 进入容器(base):docker exec -it container_id /bin/bash

17、参考

  1. VMware Workstation Pro各版本下载(2024.5.5之后)
  2. Vmware虚拟机和主机之间复制、粘贴内容、拖拽文件的详细方法
  3. 在VMware16虚拟机安装Ubuntu详细教程
  4. 如何在 Ubuntu 22.04 LTS 中安装 Docker 和 Docker Compose
  5. docker镜像仓库地址

18、书籍推荐

我最先看的是《第一本docker书》,但我看了没几章,因为我觉得看得很费劲,可能我比较笨。

然后我换成了 《Docker技术入门与实战 第3版》 ,用了大半天时间看完了第一部分,即1-8章。我觉得看起来很轻松,好理解,于是我就借助chatgpt尝试用docker部署了一个简单的fastapi服务。


发表评论

评论列表,共 0 条评论

    暂无评论