搜尋
首頁後端開發Python教學從傳統到雲端無伺服器 - 第 1 部分

註:本文最初於 2023 年 11 月 4 日發表於此處。它已在這裡重新發布,以覆蓋更廣泛的受眾。

歡迎閱讀系列中的第一篇文章,該文章將引導您完成將遺留應用程式從本地遷移到雲端的過程,重點關注現代化、無伺服器平台和整合 DevOps 實踐。

在本文中,我們將重點放在您的應用程式的容器化上。但是,如果您從頭開始建立應用程序,那就完全沒問題(事實上,甚至更好)。在此範例中,我使用此 DigitalOcean 指南來建立一個簡單的 TODO 應用程序,並使用 Python (Flask) 和 MongoDB 作為資料庫。我進行了一些自訂以使其看起來更好,但重點是建立使用基於 NoSQL 文件的資料庫的東西,因為這將是即將進行的工作所需要的。

如果您還沒有建立自己的應用程式儲存庫,可以在 GitHub 上克隆該應用程式的儲存庫。

建置完應用程式後,讓我們開始吧!

Dockerfile

這是我們將容器化的應用程式目錄的結構,後面是 Dockerfile。

.
├── app.py
├── LICENSE
├── README.md
├── requirements.txt
├── static
│   └── style.css
└── templates
    └── index.html

app.py 檔案是包含 Flask 應用程式碼的主應用程式檔案。 requirements.txt 檔案包含應用程式所需的 Python 依賴項清單。 static/ 目錄包含靜態文件,例如 CSS、JavaScript 和圖片。 templates/ 目錄包含 Flask 應用程式所使用的 HTML 模板。

# Use a minimal base image
FROM python:3.9.7-slim-buster AS base

# Create a non-root user
RUN useradd -m -s /bin/bash flaskuser
USER flaskuser

# Set the working directory
WORKDIR /app

# Copy the requirements file and install dependencies
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# Add the directory containing the flask command to the PATH
ENV PATH="/home/flaskuser/.local/bin:${PATH}"

# Use a multi-stage build to minimize the size of the image
FROM base AS final

# Copy the app code
COPY app.py .
COPY templates templates/
COPY static static/

# Set environment variables
ENV FLASK_APP=app.py
ENV FLASK_ENV=production

# Expose the port
EXPOSE 5000

# Run the app
CMD ["flask", "run", "--host=0.0.0.0"]

這是 Dockerfile 的演練與細分:

  1. Dockerfile 以 FROM 指令開頭,該指令指定要使用的基礎映像。在本例中,它是 python:3.9.7-slim-buster,這是一個最小的基礎映像,其中包括 Python 3.9.7 和一些基本函式庫。

  2. 下一指令使用 RUN 和 useradd 指令建立一個名為 Flaskuser 的非 root 使用者。這是避免以 root 使用者身分執行容器的安全最佳實務。

  3. WORKDIR 指令將工作目錄設定為 /app,這是應用程式程式碼將被複製的位置。

  4. COPY 指令將requirements.txt 檔案複製到容器的/app 目錄。

  5. RUN指令使用pip安裝requirements.txt中列出的依賴項。 --no-cache-dir 選項用於避免快取下載的包,這有助於保持較小的圖片大小。

  6. ENV指令將包含flask指令的目錄加入PATH環境變數。這是稍後運行 Flask 命令所必需的。

  7. FROM 指令使用先前定義的基礎鏡像啟動一個新的建置階段。這是一個多階段構建,有助於最小化最終圖像的大小。

  8. COPY 指令將應用程式程式碼 (app.py)、範本 (templates/) 和靜態檔案 (static/) 複製到容器的 /app 目錄。

  9. ENV 指令設定 FLASK_APP 和 FLASK_ENV 環境變數。 FLASK_APP 指定主應用程式檔案的名稱,FLASK_ENV 將環境設定為生產環境。

  10. EXPOSE 指令公開連接埠 5000,這是 Flask 使用的預設連接埠。

  11. CMD指令指定容器啟動時執行的命令。在這種情況下,它使用 --host=0.0.0.0 選項來執行 Flask run 命令來綁定到所有網路介面。

有了這個 Dockerfile,應用程式就可以被容器化並執行。但是,需要注意的是,我們的應用程式需要一個資料庫來儲存運行時創建或產生的資料。當然,您可以單獨拉取 MongoDB 資料庫鏡像並獨立運行。然後,在兩側進行調整,建立兩個容器之間的通信,以便應用程式能夠成功地將資料儲存到資料庫中。雖然這種方法有效,但可能會消耗時間並且有點乏味。為了簡化流程,我們將繼續使用 Docker Compose。在 Docker Compose 中,所有內容都在 YAML 檔案中聲明,透過使用 docker-compose up 命令,我們可以無縫地啟動和操作不同的服務,節省時間和精力。

使用 Docker Compose 簡化資料庫集成

這是基本的 Docker Compose YAML 文件,我們將使用它來簡化流程。

version: '3.9'

services:
  db:
    image: mongo:4.4.14
    ports:
      - "27017:27017"
    volumes:
      - mongo-data:/data/db

  web:
    build: .
    container_name: "myflaskapp"
    ports:
      - "5000:5000"
    environment:
      - MONGO_URI=mongodb://db:27017
    depends_on:
      - db

volumes:
  mongo-data:

此 Docker Compose YAML 檔案配置為設定兩個服務:MongoDB 資料庫 (db) 和 Web 應用程式 (web)。詳細介紹如下:

  • 版本: 指定正在使用的 Docker Compose 檔案格式的版本(本例為 3.9)。

  • 服務:

    • 資料庫(db):

      • 使用 MongoDB 版本 4.4.14 鏡像。
      • 將主機連接埠 27017 對應到容器連接埠 27017。
      • 利用名為 mongo-data 的磁碟區來持久儲存 MongoDB 資料。
    • Web 應用程式 (web):

      • 從目前目錄 (.) 建立 Docker 映像。
      • 將容器名稱設定為「myflaskapp」。
      • 將主機連接埠 5000 對應到容器連接埠 5000。
      • 定義環境變數 MONGO_URI,值為 mongodb://db:27017,建立與 MongoDB 服務的連線。
      • 指定對 db 服務的依賴,確保資料庫在 Web 服務之前啟動。
  • 音量:

    • 定義一個名為 mongo-data 的磁碟區來保存 MongoDB 資料。

總之,這個 Docker Compose 檔案協調了 MongoDB 資料庫和 Flask Web 應用程式的部署,確保它們能夠無縫通訊和一起運行。

現在導航到包含 Docker Compose 檔案的目錄並執行 docker-compose up 以啟動 MongoDB 和 Flask Web 應用程式。透過 http://localhost:5000 存取應用程序,確保一切按預期工作。

From legacy to cloud serverless - Part 1

要停止,請使用 docker-compose down。

一切都好嗎?接下來:下一篇文章將工作流程遷移到 Kubernetes。

From legacy to cloud serverless - Part 1

以上是從傳統到雲端無伺服器 - 第 1 部分的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
Python:自動化,腳本和任務管理Python:自動化,腳本和任務管理Apr 16, 2025 am 12:14 AM

Python在自動化、腳本編寫和任務管理中表現出色。 1)自動化:通過標準庫如os、shutil實現文件備份。 2)腳本編寫:使用psutil庫監控系統資源。 3)任務管理:利用schedule庫調度任務。 Python的易用性和豐富庫支持使其在這些領域中成為首選工具。

Python和時間:充分利用您的學習時間Python和時間:充分利用您的學習時間Apr 14, 2025 am 12:02 AM

要在有限的時間內最大化學習Python的效率,可以使用Python的datetime、time和schedule模塊。 1.datetime模塊用於記錄和規劃學習時間。 2.time模塊幫助設置學習和休息時間。 3.schedule模塊自動化安排每週學習任務。

Python:遊戲,Guis等Python:遊戲,Guis等Apr 13, 2025 am 12:14 AM

Python在遊戲和GUI開發中表現出色。 1)遊戲開發使用Pygame,提供繪圖、音頻等功能,適合創建2D遊戲。 2)GUI開發可選擇Tkinter或PyQt,Tkinter簡單易用,PyQt功能豐富,適合專業開發。

Python vs.C:申請和用例Python vs.C:申請和用例Apr 12, 2025 am 12:01 AM

Python适合数据科学、Web开发和自动化任务,而C 适用于系统编程、游戏开发和嵌入式系统。Python以简洁和强大的生态系统著称,C 则以高性能和底层控制能力闻名。

2小時的Python計劃:一種現實的方法2小時的Python計劃:一種現實的方法Apr 11, 2025 am 12:04 AM

2小時內可以學會Python的基本編程概念和技能。 1.學習變量和數據類型,2.掌握控制流(條件語句和循環),3.理解函數的定義和使用,4.通過簡單示例和代碼片段快速上手Python編程。

Python:探索其主要應用程序Python:探索其主要應用程序Apr 10, 2025 am 09:41 AM

Python在web開發、數據科學、機器學習、自動化和腳本編寫等領域有廣泛應用。 1)在web開發中,Django和Flask框架簡化了開發過程。 2)數據科學和機器學習領域,NumPy、Pandas、Scikit-learn和TensorFlow庫提供了強大支持。 3)自動化和腳本編寫方面,Python適用於自動化測試和系統管理等任務。

您可以在2小時內學到多少python?您可以在2小時內學到多少python?Apr 09, 2025 pm 04:33 PM

兩小時內可以學到Python的基礎知識。 1.學習變量和數據類型,2.掌握控制結構如if語句和循環,3.了解函數的定義和使用。這些將幫助你開始編寫簡單的Python程序。

如何在10小時內通過項目和問題驅動的方式教計算機小白編程基礎?如何在10小時內通過項目和問題驅動的方式教計算機小白編程基礎?Apr 02, 2025 am 07:18 AM

如何在10小時內教計算機小白編程基礎?如果你只有10個小時來教計算機小白一些編程知識,你會選擇教些什麼�...

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具