A lightweight, cross-platform tool to download and extract Docker containers without requiring Docker installation. PCE furthermore provides a simple and efficient way to run containers on Linux while maintaining a minimal footprint.
!Warning this is an repo to play around with containers, there are no proper safeguards used against container breaches. Do not run this with unsafe containers!
- 🐳 Run Docker containers without Docker installation
- 🔄 Partial Cross-platform support (Linux, Windows, macOS)
- 📦 Download and extract Docker images
- 🔒 Containerization using native Linux OS features
- 🚀 Simple and lightweight implementation
Download the latest binary for your platform from the releases page or build from source:
make buildThe binary will be available in the bin/ directory.
- Download a Docker image:
pce download alpine:latestDownloads are safed inside a folder called pce-download
- Run a container:
pce run alpine:latest /bin/shIf no command is specified the default command of the container is used:
go run cmd/pce/main.go run ghcr.io/patrickdappollonio/docker-http-server- Go 1.25 or higher
- Make
- VS Code with Remote-Containers extension (for development) or Linux OS
- Docker (for development environment)
- Clone the repository
- Open in VS Code
- Click "Reopen in Container" when prompted
# Local build
make build
# Build all platforms
make build-all
# Clean and test
make clean
make test# Build container
docker-compose build
# Run
docker-compose up├── bin/ # Compiled binaries
├── cmd/ # Application entrypoints
│ └── pce/ # Main application code
├── internal/ # Private application code
│ ├── image/ # Image management and Docker registry client
│ ├── runtime/ # Platform-specific container runtime implementations
│ └── util/ # Shared utility functions
└── Makefile # Build automation
- Image Management: Handles downloading and extracting Docker images from registries
- Container Runtime: Implementation for container isolation under Linux
- Partial Cross-Platform Support: Download and Extract container images on all platforms
- Limited namespace support (not all Linux namespaces are implemented)
- No cgroups support yet
- No network namespace support
- Fork the repository
- Create a feature branch:
git checkout -b feature/my-feature - Commit your changes:
git commit -am 'Add new feature' - Push to the branch:
git push origin feature/my-feature - Submit a pull request
This project was inspired by and builds upon the work of Liz Rice's containers-from-scratch project.