首页 > 其他分享 >笔记-速通Docker

笔记-速通Docker

时间:2024-11-24 22:22:51浏览次数:4  
标签:速通 -- FastAPI 笔记 3000 fastapi pip docker Docker

Intro

最近得学FastAPI了,为了不弄乱环境,于是决定用Docker。

Docker容器安装FastAPI

Docker自己想办法装(

首先拉取pyhton的镜像。
为什么不拉FastAPI的镜像?
因为后面可能会有别的需求。

docker pull python:alpine

然后,建一个工作目录方便后续工作。

先简单的写一个FastAPI的应用。
在工作目录下新建一个main.py

// ./main.py
from fastapi import FastAPI

app = FastAPI()

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

这段代码来自runboob,它的作用是在用户使用GET方法访问根URL时,返回这个JSON

好了,接下来应该测试这段代码了,这时我们发现,我没有FastAPI环境。

先用docker run创建一个容器

docker run -it -v {这里是你的工作文件夹的绝对路径}:/FastAPI -p 3000:3000--name pyt python:alpine /bin/sh
  • -i 打开容器的标准输入
  • -t 为容器分配一个伪终端
  • -v 绑定工作目录,冒号前的目录(本地目录)与冒号后的目录(容器目录)会被同步,注意这里得写绝对路径。
  • -p 将容器端口3000映射到本地3000端口
  • --name 指定容器名字
  • /bin/sh 是alpine的shell

然后我们来安装FastAPI

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple\
&& pip install --upgrade pip\
&& pip install fastapi\
&& pip install "uvicorn[standard]"

这里为了提高下载速度,我把pip源换成了清华的,并且顺带安装了FastAPI所需要的ASGI服务器。

然后我们就能开始测试了。这里要用到刚刚装的ASGI uvicorn

uvicorn main:app --port 3000 --host 0.0.0.0 --reload

看到启动成功的提示,我们新开一个终端用curl测试一下。

curl 0.0.0.0:3000
{"Hello":"Docker"}

太好了owo!

Dockerfile

虽然刚刚已经成功了,但是据我所知,Docker不是这么用的。
所以我们在根目录下新建一个文件Dockerfile

# ./Dockerfile
FROM python:alpine		#指定初始镜像
WORKDIR /FastAPI		#设定工作目录
EXPOSE 3000				#指定暴露端口

# 安装fastapi与uvicorn
RUN pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple\
&& pip install --upgrade pip\
&& pip install fastapi\
&& pip install "uvicorn[standard]"

# 将当前目录文件复制到工作目录
COPY . . 

# 运行程序
CMD ["uvicorn","main:app","--port","3000","--host","0.0.0.0","--reload"]

然后我们再建一个.dockerignore文件,用来指定不用复制进去的文件。

# ./.dockerigonre

.dockerigonre
Dockerfile

然后我们用Dockerfile来创建这个镜像

docker build -t fastapi:v0 .

接下来创建容器

docker run -d --name fat fastapi:v0

这时,用curl测试发现没有正常返回,这是怎么一回事呢?
原来Dockerfile里的EXPOSE是没有作用的。
所以我们还是得这么写:

docker run -d -p 3000:3000 --name fat fastapi:v0

这里的-d是让容器后台运行。
这时候再curl发现又可以正常返回了。

Docker compose

虽然刚刚已经完成了,但现在开启容器的命令也太长了,这时候我想到,可以用docker-compose来简化。
所以我们再创建一个docker-compose.yml

services:
  fastapi:
    build: .
    ports:
      - "3000:3000"

然后记得把这个文件也加进.dockerignore

# ./.dockerigonre

.dockerigonre
Dockerfile
docker-compose.yml

好,接下来让我们来启动docker-compose

docker-compose up -d --build

这里注意加入--build可以确保使用的是新的docker镜像。

好了,最后测试一下

curl 0.0.0.0:3000
{"Hello":"Docker"}

(*´∀`)

Reference

https://www.runoob.com/fastapi/fastapi-install.html
https://docker-practice.github.io/zh-cn/

标签:速通,--,FastAPI,笔记,3000,fastapi,pip,docker,Docker
From: https://www.cnblogs.com/TashiKani/p/18566522

相关文章

  • 【C++笔记】数据结构进阶之二叉搜索树(BSTree)
    【C++笔记】数据结构进阶之二叉搜索树(BSTree)......
  • ESP32学习笔记_Bluetooth(1)——蓝牙技术与 BLE 通信机制简介
    摘要(FromAI):这篇笔记详细讲解了蓝牙技术的分类、核心架构和通信流程,重点介绍了低功耗蓝牙(BLE)的协议栈、角色划分及连接机制,结合拓扑示例清晰阐述了蓝牙网络配置和操作过程前言:本文档是本人在《ESP32-C3物联网工程开发实战(乐鑫科技著)》进行学习时所做的学习笔记,可能存......
  • KuonjiCat的算法学习笔记:反悔贪心
    反悔贪心本蒟蒻在做题时被卡,看题解发现用反悔贪心,遂搜罗资料,得有此篇part.1什么是反悔贪心?简单的例子,我有一个只能装3个物品的背包,我要从n个价值由小到大的物品中选出3个最大的装进包里,但只能从头往后选,假如我此刻的包内物品价值为123,而我要面对的下一个物品的价值为4,那么......
  • 【论文笔记】LLaVA-o1: Let Vision Language Models Reason Step-by-Step
    ......
  • 计算机网络-做题笔记-报文交换
    笔者在完成作业时遇到了这个题目,在计算过程中发现对于存储-转发,报文交换,分组交换的知识理解不够透彻。接下来我们通过这个例题来加深一下理解首先我们明确一下什么是存储-转发简单来说就是把数据分组接受过来,存储一下,再决定从哪个链路发出去。具体来讲就是要接受完整的帧......
  • CS61B 渐进分析笔记 2
    CS61B渐进分析笔记2笔记的来源:CS61B-2024春季的课程课程主要内容:数据结构与算法分析课程运用语言:Java你可以在我的笔记网站里获得更多有用的资源。这个课有6个Homework,10个Lab,9个Project。其中第一个project是一个完整的2024游戏的实现,很有意思。此文......
  • CS61B不相交集笔记
    CS61B不相交集笔记笔记的来源:CS61B-2024春季的课程课程主要内容:数据结构与算法分析课程运用语言:Java你可以在我的笔记网站里获得更多有用的资源。这个课有6个Homework,10个Lab,9个Project。其中第一个project是一个完整的2024游戏的实现,很有意思。此文章......
  • Java学习笔记--对象数组,方法参数,命令行参数,快速生成方法
    目录一,对象数组Personp=newPerson();二,方法参数1.基本数据类型做方法参数传递2.引用数据类型做方法参数传递三,命令行参数四,快速生成方法1.快速生成方法2.快速将一段代码抽取到一个方法中 一,对象数组Person[]arr=newPerson[3];Personp=newPerson();......
  • 【跟着阿舜学音乐-笔记】几个实用的和弦公式
    Ⅱ->Ⅴ->Ⅰ连接以目标和弦为主和弦,寻找其对应的Ⅱ级小三和弦与Ⅴ级七和弦构成的Ⅱ->Ⅴ->Ⅰ和弦连接(即Dm-G7-C)。其中,Ⅱ级和弦是下属功能最强的下属和弦,具有最强的倾向属音的属性。而G7和弦是一个调内唯一一个属七和弦(大小七和弦),是一个调的标志,可以根据该和弦找到他属于的调式。......
  • 从零开始:NetBox 4.1 Docker 部署和升级Pd
    前言由于Netbox官方的中文语言日渐完善,所以新出一个使用官方Docker源部署和升级的教程。Netbox系列文章:https://songxwn.com/categories/NetBox/环境介绍RockyLinux9.5(理论上也适用于RHEL系列的7-9版本)南京大学镜像源ISO镜像下载:https://mirror.nju.edu.cn/rocky/9/isos......