亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

FastAPI 部署在Docker的詳細(xì)過(guò)程

 更新時(shí)間:2021年10月09日 08:38:24   作者:小菠蘿測(cè)試筆記  
這篇文章主要介紹了FastAPI 部署在 Docker的詳細(xì)過(guò)程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

Docker 學(xué)習(xí)

https://www.cnblogs.com/poloyy/p/15257059.html

項(xiàng)目結(jié)構(gòu)

.
├── app
│   ├── __init__.py
│   └── main.py
├── Dockerfile
└── requirements.txt

FastAPI 應(yīng)用程序 main.py 代碼

from typing import Optional

from fastapi import FastAPI

app = FastAPI()

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

@app.get("/items/{item_id}")
def read_item(item_id: int, q: Optional[str] = None):
    return {"item_id": item_id, "q": q}

Dockerfile

# 1、從官方 Python 基礎(chǔ)鏡像開(kāi)始
FROM python:3.9

# 2、將當(dāng)前工作目錄設(shè)置為 /code
# 這是放置 requirements.txt 文件和應(yīng)用程序目錄的地方
WORKDIR /code

# 3、先復(fù)制 requirements.txt 文件
# 由于這個(gè)文件不經(jīng)常更改,Docker 會(huì)檢測(cè)它并在這一步使用緩存,也為下一步啟用緩存
COPY ./requirements.txt /code/requirements.txt

# 4、運(yùn)行 pip 命令安裝依賴項(xiàng)
RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt

# 5、復(fù)制 FastAPI 項(xiàng)目代碼
COPY ./app /code/app

# 6、運(yùn)行服務(wù)
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "80"]

第四步:運(yùn)行 pip 命令解析

RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt

  • --no-cache-dir 選項(xiàng)告訴pip不要將下載的包保存在本地,因?yàn)橹挥挟?dāng)pip 將再次運(yùn)行以安裝相同的包時(shí)才會(huì)這樣,但在使用容器時(shí)情況并非如此
  • --no-cache-dir只與pip有關(guān),與 Docker或容器無(wú)關(guān)
  • --upgrade選項(xiàng)告訴 pip升級(jí)已經(jīng)安裝的軟件包
  • 因?yàn)樯弦徊綇?fù)制文件可能會(huì)被Docker 緩存檢測(cè)到,所以這一步也會(huì)在Docker 緩存可用時(shí)使用
  • 在這一步中使用緩存會(huì)在開(kāi)發(fā)過(guò)程中一次又一次地構(gòu)建鏡像時(shí)節(jié)省大量時(shí)間,而不是每次都下載并安裝所有依賴項(xiàng)

Docker 緩存 

這里有一個(gè)重要的技巧Dockerfile,首先只復(fù)制依賴項(xiàng)的文件,而不是 FastAPI 應(yīng)用程序代碼

 ./requirements.txt /code/requirements.txt
  • Docker 和其他工具以增量方式構(gòu)建這些容器映像,在另一層之上添加一層
  • 從 Dockerfile 的頂部(首行)開(kāi)始,由 Dockerfile 的每個(gè)指令來(lái)創(chuàng)建任何文件
  • Docker 和其他工具在構(gòu)建鏡像時(shí)也是用內(nèi)部緩存
  • 如果文件自上次構(gòu)建容器鏡像后沒(méi)有更改,則它將重用上次創(chuàng)建的同一層,而不是再次復(fù)制文件并從頭開(kāi)始創(chuàng)建一個(gè)新的層
  • 僅僅避免文件副本并不一定會(huì)改善太多,但是因?yàn)樗谠摬襟E中使用了緩存,所以它可以在下一步中使用緩存
  • 例如,它可以將緩存用于安裝依賴項(xiàng)的指令

RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt

  • requirements.txt 不會(huì)經(jīng)常改變,所以通過(guò)復(fù)制該文件,Docker 可以在該步驟中使用緩存
  • Docker 將能夠使用緩存進(jìn)行下一步下載和安裝這些依賴項(xiàng),這就是節(jié)省大量時(shí)間的地方
  • 下載并安裝該軟件包的依賴關(guān)系可能需要幾分鐘,但使用的緩存將只需要幾秒
  • 由于在開(kāi)發(fā)過(guò)程中一次又一次地構(gòu)建容器鏡像以檢查代碼更改是否有效,因此可以節(jié)省大量累積時(shí)間

./app /code/app

  • 在 Dockerfile 尾部,復(fù)制 FastAPI 應(yīng)用程序代碼
  • 由于這是最常更改的內(nèi)容,因此將其放在最后,在此步驟之后的任何內(nèi)容都將無(wú)法使用緩存

構(gòu)建 Docker Image

在 Dockerfile 打開(kāi)命令行

docker build -t myimage .

查看鏡像

docker images

啟動(dòng) docker 容器

docker run -d --name mycontainer -p 80:80 myimage

查看容器

docker ps

訪問(wèn) 127.0.0.1/

訪問(wèn) 127.0.0.1/docs

帶有 Gunicorn 的官方 Docker 鏡像 - Uvicorn

  • 此鏡像包含一個(gè)自動(dòng)調(diào)整機(jī)制,可根據(jù)可用的 CPU 內(nèi)核設(shè)置工作進(jìn)程的數(shù)量
  • 它具有合理的默認(rèn)值,但仍然可以使用環(huán)境變量或配置文件更新所有配置
  • 此鏡像上的進(jìn)程數(shù)是根據(jù)可用的 CPU 內(nèi)核自動(dòng)計(jì)算的,它將嘗試從 CPU 中榨取盡可能多的性能
  • 但這也意味著,由于進(jìn)程數(shù)取決于容器運(yùn)行的 CPU,消耗的內(nèi)存量也將取決于此
  • 因此,如果應(yīng)用程序消耗大量?jī)?nèi)存(例如使用機(jī)器學(xué)習(xí)模型),并且服務(wù)器有很多 CPU 內(nèi)核但內(nèi)存很少,容器最終可能會(huì)使用比可用內(nèi)存更多的內(nèi)存,這會(huì)大大降低性能(甚至崩潰)

官方栗子

FROM tiangolo/uvicorn-gunicorn-fastapi:python3.9
COPY ./requirements.txt /app/requirements.txt
RUN pip install --no-cache-dir --upgrade -r /app/requirements.txt
COPY ./app /app

應(yīng)用場(chǎng)景

  1. 如果正在使用Kubernetes,并且已經(jīng)設(shè)置了集群級(jí)別的復(fù)制,就不應(yīng)該使用此鏡像,最好從頭開(kāi)始構(gòu)建鏡像
  2. 如果應(yīng)用程序足夠簡(jiǎn)單,以至于根據(jù) CPU 設(shè)置默認(rèn)進(jìn)程數(shù)效果很好,不想費(fèi)心在集群級(jí)別手動(dòng)配置復(fù)制,并且運(yùn)行的容器不會(huì)超過(guò)一個(gè)應(yīng)用程序
  3. 或者如果使用Docker Compose進(jìn)行部署,在單個(gè)服務(wù)器上運(yùn)行等

使用 poetry 的 docker image

# 第一階段:將僅用于安裝 Poetry 并從 Poetry 的 pyproject.toml 文件生成帶有項(xiàng)目依賴項(xiàng)的 requirements.txt。
FROM tiangolo/uvicorn-gunicorn:python3.9 as requirements-stage

# 將 /tmp 設(shè)置為當(dāng)前工作目錄;這是我們將生成文件requirements.txt的地方
WORKDIR /tmp

# 安裝 poetry
RUN pip install poetry

# 復(fù)制
COPY ./pyproject.toml ./poetry.lock* /tmp/

# 生成 requirements.txt
RUN poetry export -f requirements.txt --output requirements.txt --without-hashes

# 這是最后階段,在這往后的任何內(nèi)容都將保留在最終容器映像中
FROM python:3.9

# 將當(dāng)前工作目錄設(shè)置為 /code
WORKDIR /code

# 復(fù)制 requirements.txt;這個(gè)文件只存在于前一個(gè) Docker 階段,這就是使用 --from-requirements-stage 復(fù)制它的原因
COPY --from=requirements-stage /tmp/requirements.txt /code/requirements.txt

# 運(yùn)行命令
RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt

# 復(fù)制
COPY ./app /code/app

# 運(yùn)行服務(wù)
CMD ["uvicorn", "app.1_快速入門:app", "--host", "0.0.0.0", "--port", "80"]
  • 第一階段 Docker 是 Dockerfile 的一部分,它作為一個(gè)臨時(shí)容器的鏡像是僅用于生成一些文件供后面階段使用
  • 使用 Poetry 時(shí),使用Docker 多階段構(gòu)建是有意義的
  • 因?yàn)閷?shí)際上并不需要在最終容器鏡像中安裝 Poetry 及其依賴項(xiàng),只需要生成的requirements.txt 文件來(lái)安裝項(xiàng)目依賴項(xiàng)

poetry 詳細(xì)教程

http://chabaoo.cn/article/195070.htm

到此這篇關(guān)于FastAPI 部署在 Docker的文章就介紹到這了,更多相關(guān)FastAPI 部署在 Docker 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • docker比賽提交常用命令小結(jié)

    docker比賽提交常用命令小結(jié)

    這篇文章主要介紹了docker比賽提交常用命令小結(jié),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02
  • 簡(jiǎn)述Docker 安裝influxDB分布式時(shí)間序列數(shù)據(jù)庫(kù)及相關(guān)操作

    簡(jiǎn)述Docker 安裝influxDB分布式時(shí)間序列數(shù)據(jù)庫(kù)及相關(guān)操作

    influxDB是一個(gè)分布式時(shí)間序列數(shù)據(jù)庫(kù)。這篇文章主要介紹了Docker 安裝influxDB分布式時(shí)間序列數(shù)據(jù)庫(kù)及相關(guān)操作,需要的朋友可以參考下
    2019-10-10
  • 如何使用Docker快速搭建服務(wù)器環(huán)境

    如何使用Docker快速搭建服務(wù)器環(huán)境

    這篇文章主要介紹了使用Docker快速搭建服務(wù)器環(huán)境的詳細(xì)步驟,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-10-10
  • 詳解用Docker快速搭建一個(gè)博客網(wǎng)站

    詳解用Docker快速搭建一個(gè)博客網(wǎng)站

    本文主要介紹了用Docker快速搭建一個(gè)博客網(wǎng)站,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • docker部署vue項(xiàng)目的實(shí)現(xiàn)步驟

    docker部署vue項(xiàng)目的實(shí)現(xiàn)步驟

    本文主要介紹了docker部署vue項(xiàng)目的實(shí)現(xiàn)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • Windows安裝docker-desktop的詳細(xì)步驟

    Windows安裝docker-desktop的詳細(xì)步驟

    這篇文章主要介紹了Windows安裝docker-desktop的詳細(xì)步驟,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-03-03
  • Docker 容器日志查看和清理的實(shí)現(xiàn)步驟

    Docker 容器日志查看和清理的實(shí)現(xiàn)步驟

    在處理Docker容器的過(guò)程中,經(jīng)常需要查看容器的日志輸出來(lái)排查問(wèn)題或者進(jìn)行系統(tǒng)監(jiān)控,本文主要介紹了Docker容器日志查看和清理的實(shí)現(xiàn)步驟,感興趣的可以了解一下
    2023-11-11
  • docker安裝pxc集群的詳細(xì)教程

    docker安裝pxc集群的詳細(xì)教程

    這篇文章主要介紹了docker安裝pxc集群的詳細(xì)教程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02
  • docker搭建redis三主三從集群的實(shí)現(xiàn)步驟

    docker搭建redis三主三從集群的實(shí)現(xiàn)步驟

    本文主要介紹了docker搭建redis三主三從集群,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • Docker容器的加載分層原理及commit鏡像

    Docker容器的加載分層原理及commit鏡像

    這篇文章主要為大家介紹了Docker容器的加載分層原理及commit鏡像,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06

最新評(píng)論