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.
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
- 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
- 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
- React: UI component library
- TypeScript: Type-safe development
- Tailwind CSS: Utility-first styling
- shadcn/ui: Modern component library
- Lucide Icons: Beautiful, consistent iconography
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) }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(()) }The application follows a clean architecture pattern:
src/ βββ main.rs # Application entry point βββ error.rs # Error handling βββ payload/ # Data structures βββ mod.rs βββ types.rs - Rust 1.70 or higher
- Node.js 16 or higher
- Docker Engine running on your system
- Clone the repository:
git clone https://github.com/omniflare/docker-vue.git cd docker-vue- Install dependencies:
# Install Rust dependencies cargo install tauri-cli # Install frontend dependencies cd src-tauri yarn install- Run the development version:
cargo tauri dev- Build for production:
cargo tauri buildContributions 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.
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature) - Commit your Changes (
git commit -m 'Add some AmazingFeature') - Push to the Branch (
git push origin feature/AmazingFeature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- 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
For questions and support, please open an issue in the GitHub repository.
Made with β€οΈ for the Linux community by github.com/omniflare