A powerful, user-friendly web-based tool for managing Docker images exclusively on Ubuntu servers. Build, manage, and publish Docker images through an intuitive web interface with no terminal commands required.
β οΈ Important: This application is designed specifically for Ubuntu Server environments and will not work on Windows, macOS, or other operating systems.
- Web-Based Interface: Complete Docker image management through a modern web UI
- No Terminal Required: All operations handled through the web interface
- Real-Time Updates: Live progress tracking for build and push operations
- Tutorial Mode: Interactive guided experience for beginners
- Advanced Mode: Streamlined interface for experienced users
- Image Management: List, inspect, and delete Docker images
- Image Building: Build Docker images from Dockerfiles with real-time logs
- Registry Publishing: Push images to Docker Hub or private registries
- Build History: Track and review previous build operations
- Multi-Architecture Support: Build for different platforms and architectures
- Automatic Setup: One-command installation with all dependencies
- Service Management: Systemd integration for reliable service management
- Nginx Reverse Proxy: Production-ready web server configuration
- Security: Dedicated user account and proper permission management
- Monitoring: Comprehensive logging and status monitoring
- Operating System: Ubuntu Server 18.04 LTS or later (Ubuntu Desktop also supported)
- Architecture: x86_64 (amd64)
- Memory: Minimum 2GB RAM (4GB+ recommended)
- Storage: At least 10GB free space
- Network: Internet connection for package installation
- Shell: Bash shell environment (required for installation scripts)
π« Not Compatible With: Windows, macOS, CentOS, RHEL, or other Linux distributions
- Docker: Must be installed and running
- Root Access: Required for installation and service management
- Ports: Port 80 must be available (or configure alternative)
- Docker Engine 19.03 or later
- Docker Compose 1.25 or later (optional)
The easiest way to install Docker Image Publisher is using the runner script:
# Download the project
git clone https://github.com/yourusername/docker-image-publisher.git
cd docker-image-publisher
# Make runner executable
chmod +x runner.sh
# Run interactive installer
sudo ./runner.shSelect option 1) Install from the menu and follow the prompts.
For more control over the installation process:
# Clone the repository
git clone https://github.com/yourusername/docker-image-publisher.git
cd docker-image-publisher
# Make scripts executable
chmod +x *.sh
# Run installation
sudo ./install.shThe installation script will:
- System Check: Verify Ubuntu version and Docker installation
- Dependencies: Install Python 3.8+, pip, nginx, and other requirements
- User Setup: Create dedicated
docker-publishersystem user - Application: Set up application in
/opt/docker-image-publisher - Virtual Environment: Create isolated Python environment
- Dependencies: Install Python packages from
requirements.txt - Services: Configure systemd service and nginx reverse proxy
- Firewall: Configure UFW rules (if enabled)
- Startup: Start services and enable auto-start
After installation, access the web interface at:
- Local:
http://localhost - Network:
http://your-server-ip - Custom Port:
http://your-server-ip:port(if configured)
- Choose Mode: Select Tutorial or Advanced mode
- Docker Status: Verify Docker connection
- Registry Setup: Configure Docker Hub or private registry credentials
- Build Your First Image: Follow the guided tutorial
Perfect for beginners or learning:
- Step-by-Step Guidance: Interactive tutorials for each operation
- Explanations: Detailed explanations of Docker concepts
- Best Practices: Learn Docker image building best practices
- Safety Checks: Warnings and confirmations for destructive operations
Streamlined interface for experienced users:
- Quick Access: Direct access to all features
- Batch Operations: Perform multiple operations efficiently
- Advanced Options: Access to all Docker build parameters
- Minimal Confirmations: Faster workflow with fewer prompts
- Navigate to "Build Image" tab
- Select Dockerfile or upload one
- Configure build parameters (tags, build args, etc.)
- Monitor real-time build progress
- Review build logs and results
- Go to "Publish Image" tab
- Select image to publish
- Configure registry and repository details
- Add tags and metadata
- Monitor upload progress
- View all images in "Images" tab
- Inspect image details and layers
- Delete unused images
- Export/import images
Use the runner script for easy management:
# Interactive menu
sudo ./runner.sh
# Direct commands
sudo ./runner.sh start # Start service
sudo ./runner.sh stop # Stop service
sudo ./runner.sh restart # Restart service
sudo ./runner.sh status # Show status
sudo ./runner.sh logs # View logs# Service control
sudo systemctl start docker-image-publisher
sudo systemctl stop docker-image-publisher
sudo systemctl restart docker-image-publisher
sudo systemctl status docker-image-publisher
# View logs
sudo journalctl -u docker-image-publisher -f
# Enable/disable auto-start
sudo systemctl enable docker-image-publisher
sudo systemctl disable docker-image-publisherEdit /opt/docker-image-publisher/.env:
# Application settings
FLASK_ENV=production
FLASK_DEBUG=false
SECRET_KEY=your-secret-key
# Server settings
HOST=0.0.0.0
PORT=5000
# Docker settings
DOCKER_HOST=unix:///var/run/docker.sock
# Logging
LOG_LEVEL=INFO
LOG_FILE=/var/log/docker-image-publisher/app.logCustomize /etc/nginx/sites-available/docker-image-publisher:
server {
listen 80;
server_name your-domain.com;
location / {
proxy_pass http://127.0.0.1:5000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /socket.io {
proxy_pass http://127.0.0.1:5000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}# Using runner script
sudo ./runner.sh update
# Manual update
sudo ./stop.sh
git pull origin main
sudo cp -r * /opt/docker-image-publisher/
sudo chown -R docker-publisher:docker-publisher /opt/docker-image-publisher
sudo -u docker-publisher /opt/docker-image-publisher/venv/bin/pip install -r /opt/docker-image-publisher/requirements.txt
sudo ./start.sh# Create backup directory
sudo mkdir -p /backup/docker-image-publisher
# Backup application
sudo tar -czf /backup/docker-image-publisher/app-$(date +%Y%m%d).tar.gz -C /opt docker-image-publisher
# Backup configuration
sudo cp /etc/nginx/sites-available/docker-image-publisher /backup/docker-image-publisher/
sudo cp /etc/systemd/system/docker-image-publisher.service /backup/docker-image-publisher/# Stop service
sudo ./stop.sh
# Restore application
sudo tar -xzf /backup/docker-image-publisher/app-YYYYMMDD.tar.gz -C /opt
# Restore configuration
sudo cp /backup/docker-image-publisher/docker-image-publisher /etc/nginx/sites-available/
sudo cp /backup/docker-image-publisher/docker-image-publisher.service /etc/systemd/system/
# Reload and start
sudo systemctl daemon-reload
sudo ./start.sh# Check service status
sudo systemctl status docker-image-publisher
# Check logs
sudo journalctl -u docker-image-publisher -n 50
# Check Docker
sudo docker info
# Check permissions
sudo ls -la /opt/docker-image-publisher# Check nginx status
sudo systemctl status nginx
# Check port binding
sudo netstat -tlnp | grep :80
# Check firewall
sudo ufw status
# Test local connection
curl http://localhost# Check Docker daemon
sudo systemctl status docker
# Check Docker socket permissions
sudo ls -la /var/run/docker.sock
# Add user to docker group
sudo usermod -aG docker docker-publisher
# Restart service
sudo systemctl restart docker-image-publisher- Check Dockerfile syntax
- Verify base image availability
- Check build context size
- Review build logs in web interface
- Ensure sufficient disk space
- Application Logs:
/var/log/docker-image-publisher/app.log - System Logs:
sudo journalctl -u docker-image-publisher - Nginx Logs:
/var/log/nginx/access.log,/var/log/nginx/error.log - Docker Logs:
sudo journalctl -u docker
# Increase worker processes
# Edit /opt/docker-image-publisher/.env
WORKERS=4
WORKER_CONNECTIONS=1000
# Optimize nginx
# Edit /etc/nginx/nginx.conf
worker_processes auto;
worker_connections 1024;
# Increase system limits
# Edit /etc/systemd/system/docker-image-publisher.service
[Service]
LimitNOFILE=65536
LimitNPROC=32768- Dedicated User: Runs under
docker-publishersystem user - Limited Permissions: Minimal required system permissions
- Secure Defaults: Production-ready security configuration
- Input Validation: All user inputs are validated and sanitized
- CSRF Protection: Cross-site request forgery protection
- Secure Headers: Security headers in HTTP responses
- Keep Updated: Regularly update the application and dependencies
- Firewall: Use UFW or iptables to restrict access
- HTTPS: Configure SSL/TLS certificates for production
- Authentication: Consider adding authentication for multi-user environments
- Network: Run on private networks when possible
- Monitoring: Monitor logs for suspicious activity
# Enable firewall
sudo ufw enable
sudo ufw allow ssh
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# Disable unnecessary services
sudo systemctl disable apache2 # if installed
sudo systemctl disable sendmail # if installed
# Set up fail2ban (optional)
sudo apt install fail2ban
sudo systemctl enable fail2banWe welcome contributions! Please see our Contributing Guidelines for details.
# Clone repository
git clone https://github.com/yourusername/docker-image-publisher.git
cd docker-image-publisher
# Create virtual environment
python3 -m venv venv
source venv/bin/activate
# Install dependencies
pip install -r requirements.txt
# Run development server
FLASK_ENV=development python app.py# Install test dependencies
pip install -r requirements-dev.txt
# Run tests
pytest tests/
# Run with coverage
pytest --cov=app tests/Problem: When using the runner script for uninstallation, it doesn't wait for 'y' confirmation.
Solution: This has been fixed in the latest version. The runner script now properly handles terminal input/output. If you still experience issues:
# Option 1: Run uninstall script directly
sudo ./uninstall.sh
# Option 2: Force uninstall without confirmation
sudo FORCE_UNINSTALL=true ./uninstall.sh
# Option 3: Update to latest runner script
git pull origin main
chmod +x runner.sh
sudo ./runner.shProblem: Scripts fail when run on Windows, macOS, or other Linux distributions.
Solution: This application only works on Ubuntu Server/Desktop. Use a Ubuntu virtual machine or server.
Problem: Installation fails with "Docker not found" error.
Solution: Install Docker first:
# Install Docker on Ubuntu
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker $USER
# Log out and back in, then retry installationProblem: Scripts fail with permission errors.
Solution: Ensure scripts are executable and run with sudo:
chmod +x *.sh
sudo ./runner.shProblem: Docker Image Publisher service fails to start.
Solution: Check logs and dependencies:
# Check service status
sudo systemctl status docker-image-publisher
# View logs
sudo journalctl -u docker-image-publisher -f
# Restart service
sudo systemctl restart docker-image-publisherThis project is licensed under the MIT License - see the LICENSE file for details.
- Documentation: Check this README and inline help
- Issues: Report bugs on GitHub Issues
- Discussions: Join GitHub Discussions
When reporting issues, please include:
- System Information: Ubuntu version, Docker version
- Error Messages: Complete error messages and stack traces
- Steps to Reproduce: Detailed steps to reproduce the issue
- Logs: Relevant log entries
- Configuration: Any custom configuration changes
- Multi-Registry Support: Support for multiple Docker registries
- Image Scanning: Security vulnerability scanning
- Build Caching: Intelligent build caching for faster builds
- User Management: Multi-user support with role-based access
- API Access: REST API for programmatic access
- Kubernetes Integration: Deploy images directly to Kubernetes
- Build Pipelines: CI/CD pipeline integration
- Image Analytics: Usage analytics and optimization suggestions
- v1.0.0: Initial release with core functionality
- v1.1.0: Tutorial mode and improved UI
- v1.2.0: Advanced build options and registry management
- Flask: Web framework
- Docker: Containerization platform
- Socket.IO: Real-time communication
- Bootstrap: UI framework
- Ubuntu: Operating system platform
Made with β€οΈ for the Docker community
For more information, visit our GitHub repository.