DockerでRustアプリをコンテナ化する手順

コンテナ化は、移植性、分離、効率の面で重要な利点を提供します。さまざまな環境でアプリケーションの一貫したデプロイを可能にし、アプリケーションの分離によってセキュリティと安定性を確保します。また、リソースの使用を最適化し、開発と管理のプロセスを簡素化し、スケーラビリティを向上させます。

DockerでRustアプリをコンテナ化すると、アプリケーションとその依存関係を自己完結型で移植可能な環境にパッケージ化する信頼性が高く効率的な手段が得られます。基盤となるインフラストラクチャを考慮せずに、さまざまなシステムでシームレスに実行できます。

ActixでRustでシンプルなWebサーバーを設定する

ActixでRustでシンプルなWebサーバーを設定し、Dockerでアプリをコンテナ化できます。リクエストのためにサーバーにアクセスするポートを公開します。

Cargoパッケージマネージャーで新しいRustプロジェクトを作成するには、次のコマンドを実行します。

cargo new my-app

新しいRustプロジェクトを作成すると、Cargoはプロジェクトのルートディレクトリにcargo.tomlファイルを追加します。cargo.tomlファイルを開き、dependenciesセクションにActixクレートを次のように追加します。

[dependencies]actix-web = "4.3.1"

ActixクレートでRustでシンプルなサーバーを設定する方法は次のとおりです。

use actix_web::{get, App, HttpResponse, HttpServer, Responder};// Actix Webフレームワークから必要な依存関係をインポート#[get("/")]async fn hello() -> impl Responder {// ルートパス ("/") へのGETリクエストのハンドラー関数を定義// 関数はResponderトレイトを実装した型を返しますHttpResponse::Ok().body("Hello, World!")// ステータスコード200 (OK) とレスポンス本文 "Hello, World!" のHTTPレスポンスを返します}#[actix_web::main]async fn main() -> std::io::Result {// アプリケーションのエントリポイントHttpServer::new(|| {// HttpServerの新しいインスタンスを作成App::new().service(hello)// Appの新しいインスタンスを作成し、hello関数を登録}).bind("127.0.0.1:8080")?.run().await// サーバーをIPアドレスとポートにバインド// サーバーを開始し、完了を待つ}

このプログラムは、Actixで基本的なHTTP Webサーバーをセットアップします。hello関数は、ポート8080で「Hello, World!」で応答するGETリクエストに応答するハンドラー関数です。

main関数は、HttpServer::new関数でサーバーインスタンスをセットアップし、ローカルホストアドレス127.0.0.1:8080で実行されるようにサーバーをバインドします。

次に、cargo runコマンドを実行してWebサーバーを実行します。Webブラウザでアドレスを開いた結果を次に示します。

RustアプリのDockerfileを書く

DockerでRustアプリをコンテナ化するには、Dockerfileを作成し、コンテナ化プロセスのコマンドを定義する必要があります。

Dockerfileには拡張子がありません。Dockerfileファイルを作成するだけです。.dockerignoreファイルを作成して、作業ディレクトリ内のファイルをビルドプロセスから除外することもできます。

Dockerfileでコマンドを定義する

Dockerfileには、Dockerリポジトリからベースイメージをプルし、作業ディレクトリを設定し、ファイルをコピーし、依存関係をビルドし、アプリケーションをビルドし、最小限のイメージを作成し、ポートをエクスポートし、アプリケーションを実行するコマンドが含まれます。

# Rustベースイメージの最新バージョンを使用FROM rust:latest# コンテナ内の作業ディレクトリを/myに設定WORKDIR /usr/src/my-app# Rustプロジェクトファイルを作業ディレクトリにコピーCOPY . .# RustアプリをビルドRUN cargo build# Rustアプリを実行するコマンドを設定CMD cargo run

アプリをコンテナ化するのに必要なコマンドを定義したら、次のコマンドでコンテナをビルドできます。

docker build -t my-app .

このコマンドは、現在のディレクトリからタグmy-appmy-appアプリのDockerイメージをビルドします。

docker runコマンドを使用して、Dockerイメージを実行できます。

docker run -p 8080:8080 my-app

-p 8080:8080オプションは、ホストマシンのポート8080をコンテナのポート8080にマッピングします。Dockerは、ホストマシンのポート8080に送信されたトラフィックをコンテナのポート8080に転送します。

ローカルホストポート8080を介してコンテナにリクエストを送信して、Webサーバーを呼び出すことができます。

Docker Composeでマルチコンテナオーケストレーションが可能に

洗練されたDockerアプリケーションを構築する際には、複数のコンテナを操作することがよくあります。Docker Composeを使用すると、複数のDockerコンテナを操作できます。

Docker Composeは、アプリを構成するサービスの定義、サービス間の依存関係の指定、各サービスの環境変数の定義、アプリのコンテナの開始、停止、再起動、スケーリング、その他の機能を提供します。