◾️はじめに
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 # ブラウザでいかにアクセス
関連記事
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