註:本文最初於 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 的演練與細分:
Dockerfile 以 FROM 指令開頭,該指令指定要使用的基礎映像。在本例中,它是 python:3.9.7-slim-buster,這是一個最小的基礎映像,其中包括 Python 3.9.7 和一些基本函式庫。
下一指令使用 RUN 和 useradd 指令建立一個名為 Flaskuser 的非 root 使用者。這是避免以 root 使用者身分執行容器的安全最佳實務。
WORKDIR 指令將工作目錄設定為 /app,這是應用程式程式碼將被複製的位置。
COPY 指令將requirements.txt 檔案複製到容器的/app 目錄。
RUN指令使用pip安裝requirements.txt中列出的依賴項。 --no-cache-dir 選項用於避免快取下載的包,這有助於保持較小的圖片大小。
ENV指令將包含flask指令的目錄加入PATH環境變數。這是稍後運行 Flask 命令所必需的。
FROM 指令使用先前定義的基礎鏡像啟動一個新的建置階段。這是一個多階段構建,有助於最小化最終圖像的大小。
COPY 指令將應用程式程式碼 (app.py)、範本 (templates/) 和靜態檔案 (static/) 複製到容器的 /app 目錄。
ENV 指令設定 FLASK_APP 和 FLASK_ENV 環境變數。 FLASK_APP 指定主應用程式檔案的名稱,FLASK_ENV 將環境設定為生產環境。
EXPOSE 指令公開連接埠 5000,這是 Flask 使用的預設連接埠。
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 存取應用程序,確保一切按預期工作。
要停止,請使用 docker-compose down。
一切都好嗎?接下來:下一篇文章將工作流程遷移到 Kubernetes。
以上是從傳統到雲端無伺服器 - 第 1 部分的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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

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

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

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

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

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

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

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


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

Dreamweaver CS6
視覺化網頁開發工具

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

Dreamweaver Mac版
視覺化網頁開發工具