Skip to content

πŸš€ DockerVue - A Modern Docker Desktop Alternative A blazing-fast, lightweight Docker management UI built with Rust, Tauri, and React. Perfect for Linux users who want a native-like Docker experience without the heavy resource overhead. ✨ Key Features: - 🐳 Full Docker container management - πŸ“¦ Image handling with real-time progress - πŸ”Œ Network

Notifications You must be signed in to change notification settings

omniflare/docker-vue

Repository files navigation

DockerVue: A Modern Docker Desktop Alternative

Rust Tauri React TypeScript

A lightning-fast, resource-efficient alternative to Docker Desktop, built specifically with Linux users in mind. This project combines the power of Rust's performance with modern web technologies to create a seamless Docker management experience.

🌟 Why Another Docker Desktop?

While Docker Desktop is a fantastic tool, its implementation on Linux can be resource-intensive and sometimes sluggish. DockerVue was created to address these pain points by:

  • Providing a native-like experience with minimal resource overhead
  • Leveraging Rust's safety and performance capabilities
  • Offering a modern, responsive UI that feels natural on Linux systems
  • Ensuring smooth container management with real-time updates

πŸš€ Features

  • Container Management
    • Create, start, stop, and delete containers
    • Real-time container logs
    • Port mapping configuration
    • Resource usage monitoring
  • Image Management
    • Pull, remove, and manage Docker images
    • Image size tracking
    • Repository tag management
  • Network Operations
    • Create and manage Docker networks
    • Connect/disconnect containers to networks
    • Network driver configuration
  • Volume Management
    • Create and manage Docker volumes
    • Mount point visualization
    • Volume driver support

πŸ› οΈ Technology Stack

Backend (Tauri + Rust)

  • Tauri: Provides the application framework and native capabilities
  • Bollard: Rust Docker API client for container management
  • Tokio: Async runtime for handling concurrent operations
  • Serde: Serialization/deserialization of Docker API data

Frontend

  • React: UI component library
  • TypeScript: Type-safe development
  • Tailwind CSS: Utility-first styling
  • shadcn/ui: Modern component library
  • Lucide Icons: Beautiful, consistent iconography

πŸ’‘ Key Implementation Details

Container Management

The core container management functionality is implemented using Bollard's Docker API client:

#[tauri::command] async fn list_containers(state: State<'_, AppState>) -> Result<Vec<Container>, CommandError> { let docker = &state.docker; let containers = docker .list_containers(Some(ListContainersOptions::<String> { all: true, ..Default::default() })) .await .map_err(|e| CommandError::DockerError(e.to_string()))?; let result = containers .into_iter() .map(|item| Container { name: item.names.and_then(|names| { names .first() .map(|name| name.strip_prefix('/').unwrap_or(name).to_owned()) }), status: item.status, state: item.state, ports: item .ports .map(|ports| ports.into_iter().filter_map(|port| port.ip).collect()), }) .collect(); Ok(result) }

Real-time Container Logs

Implemented streaming logs with proper error handling:

#[tauri::command] async fn emit_logs( state: State<'_, AppState>, container_name: &str, on_event: Channel<String>, ) -> Result<(), CommandError> { let docker = &state.docker; let options = Some(LogsOptions::<String> { stdout: true, stderr: true, tail: "all".parse().unwrap(), ..Default::default() }); let mut logs_stream = docker.logs(container_name, options); while let Some(log_result) = logs_stream.next().await { match log_result { Ok(log) => { on_event.send(log.to_string())?; } Err(e) => { return Err(CommandError::UnexpectedError(format!( "Failed to fetch logs: {}", e ))); } } } Ok(()) }

πŸ—οΈ Architecture

The application follows a clean architecture pattern:

src/ β”œβ”€β”€ main.rs # Application entry point β”œβ”€β”€ error.rs # Error handling β”œβ”€β”€ payload/ # Data structures β”œβ”€β”€ mod.rs └── types.rs 

🚦 Getting Started

Prerequisites

  • Rust 1.70 or higher
  • Node.js 16 or higher
  • Docker Engine running on your system

Installation

  1. Clone the repository:
git clone https://github.com/omniflare/docker-vue.git cd docker-vue
  1. Install dependencies:
# Install Rust dependencies cargo install tauri-cli # Install frontend dependencies cd src-tauri yarn install
  1. Run the development version:
cargo tauri dev
  1. Build for production:
cargo tauri build

🀝 Contributing

Contributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.

  1. Fork the Project
  2. Create your Feature Branch (git checkout -b feature/AmazingFeature)
  3. Commit your Changes (git commit -m 'Add some AmazingFeature')
  4. Push to the Branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

πŸ“œ License

This project is licensed under the MIT License - see the LICENSE file for details.

πŸ™ Acknowledgments

  • Tauri for providing the framework that makes this possible
  • Bollard for the excellent Docker API implementation
  • shadcn/ui for the beautiful component library
  • The Docker community for inspiration and support

πŸ“« Contact

For questions and support, please open an issue in the GitHub repository.


Made with ❀️ for the Linux community by github.com/omniflare

About

πŸš€ DockerVue - A Modern Docker Desktop Alternative A blazing-fast, lightweight Docker management UI built with Rust, Tauri, and React. Perfect for Linux users who want a native-like Docker experience without the heavy resource overhead. ✨ Key Features: - 🐳 Full Docker container management - πŸ“¦ Image handling with real-time progress - πŸ”Œ Network

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published