使用 Docker Init 在 2 分鐘內容器化 Rust 應用

在 Docker Desktop 4.18 中 docker initCLI 可以爲項目生成 Docker 資源,使創建 Docker 鏡像和容器變得更加容易。

當你在項目目錄中運行 docker init 命令時,它將指導你使用合理的默認值爲項目創建必要的文件。這些文件包括:

docker init 命令還允許選擇項目使用的應用程序平臺和主包的相對目錄。

在這篇文章中,我們將通過使用 Rust 創建一個簡單的 web 應用程序,項目利用了 Warp 框架和 Tokio 異步運行時的強大功能。我們還將利用 Docker 容器化我們的應用程序,使其易於部署和管理。在文章的最後,你將擁有一個在 Docker 容器中運行的功能齊全的 Rust web 應用程序。

在我們開始之前,確保你的機器上安裝了 Docker 桌面版本 4.18 或更高版本,這將使我們能夠有效地使用 Docker 的特性。

步驟 1:設置項目

首先,我們需要克隆包含示例應用程序的存儲庫。打開終端,運行以下命令:

git clone https://github.com/dockersamples/docker-init-demos
cd docker-init-demos/rust
cargo init
cargo build --release

這將創建一個新的 Rust 項目,並在發佈模式下構建它。

步驟 2:運行 Docker Init

接下來,我們將使用 docker Init CLI 爲我們的項目生成必要的 Docker 文件。執行如下命令:

docker init

我們會看到來自 docker Init CLI 的歡迎消息,然後按指導完成安裝過程。可能會遇到一個警告,表明一些 Docker 文件已經存在。當出現提示時,選擇覆蓋它們。下面是一個交互示例:

Welcome to the Docker Init CLI!

This utility will walk you through creating the following files with sensible defaults for your project:
  - .dockerignore
  - Dockerfile
  - compose.yaml

WARNING: The following Docker files already exist in this directory:
  - .dockerignore

? Do you want to overwrite them? Yes
? What application platform does your project use? Rust
? What version of Rust do you want to use? 1.70.0
? What port does your server listen on? 3030

CREATED: .dockerignore
CREATED: Dockerfile
CREATED: compose.yaml

✔ Your Docker files are ready!

文件創建後,可以查看它們並進行必要的調整。準備好後,運行以下命令啓動應用程序:

docker compose up -d --build

步驟 3:訪問應用程序

一旦應用程序開始運行,我們就可以在 web 瀏覽器中訪問它。打開瀏覽器,輸入:

http://localhost:3030

應該會看到一條來自 Docker 的友好消息,確認你的應用程序已經啓動並運行:

.

## ##        ==

## ## ## ##    ===

/""""""""""""""""___/ ===

{                       /  ===-

______ O           __/

           __/

_____/



Hello from Docker!

步驟 4:在 Docker 桌面儀表板上查看

最後,我們打開 Docker Desktop Dashboard 來查看正在運行的容器並輕鬆管理它們。這個接口提供了 Docker 環境的可視化表示,可以監視資源使用情況、日誌等。

總結

在這篇文章中,我們成功地使用 Rust、Warp 和 Tokio 創建了一個簡單的 web 應用程序,並使用 Docker 將其容器化。這種設置不僅簡化了部署,還增強了應用程序的可伸縮性和可維護性。你可以通過向 Rust 應用程序添加更多特性或嘗試不同的 Docker 配置來進一步探索。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/Taw2TNRfYpd96OXYPSB_-w