【Rust】Rust ~ Axum / Docker ~

◾️はじめに

https://dk521123.hatenablog.com/entry/2023/09/02/224707

の続き。

今回は、Rust/Axum 環境を Dockerで作る

【1】フォルダ構成

│
├── docker-compose.yml
│
└── backend/
    ├── Dockerfile
    ├── Cargo.toml
     └── src/
          └── main.rs

【2】サンプル

1)docker-compose.yml

services:
  # Rust development environment
  backend:
    build: ./backend
    container_name: backend
    working_dir: /app
    volumes:
      - ./backend/:/app
      - ./backend/cargo-registry:/usr/local/cargo/registry
      - ./backend/cargo-git:/usr/local/cargo/git
      - ./backend/target:/app/target
    ports:
      - "3002:3002"
    command: cargo watch -x run
volumes:
  cargo-registry:
  cargo-git:
  target:

2)backend/Dockerfile

FROM rustlang/rust:nightly

RUN apt-get update && apt-get install -y bash git
RUN cargo install cargo-watch

WORKDIR /app

3)backend/src/main.rs

mod models;

use axum::{
    routing::get,
    Router,
    Json as AxumJson,
};
use std::net::SocketAddr;
use tokio::net::TcpListener;
use uuid::Uuid;
use crate::models::user::User;

#[tokio::main]
async fn main() {
    tracing_subscriber::fmt::init();

    let app = Router::new()
        .route("/", get(root_handler))
        .route("/users", get(list_users));

    let addr = SocketAddr::from(([0, 0, 0, 0], 3002));
    tracing::info!("listening on {}", addr);

    let listener = TcpListener::bind(&addr).await.unwrap();
    axum::serve(listener, app)
        .await
        .unwrap();
}

async fn root_handler() -> &'static str {
    "Hello, world!!!!"
}

async fn list_users() -> AxumJson<Vec<User>> {
    let users = vec![
        User { id: Uuid::new_v4(), name: "Alice".into() },
        User { id: Uuid::new_v4(), name: "Bob".into() },
        User { id: Uuid::new_v4(), name: "Charlie".into() },
    ];
    AxumJson(users)
}

【3】動作確認

docker compose up -d

# ブラウザでいかにアクセス

http://localhost:3002

関連記事

Rust ~ 環境構築編 ~
https://dk521123.hatenablog.com/entry/2023/04/22/234808
Rust ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2025/11/26/224648
Rust ~ Axum / 入門編 ~
https://dk521123.hatenablog.com/entry/2023/09/02/224707
Rust ~ Axum / REST ~
https://dk521123.hatenablog.com/entry/2025/11/27/145159