Pre-built Docker images for VS Code Dev Containers based on Arch Linux, organized into multiple image families with logical categorization.
Minimal Arch Linux images without desktop environment.
| Image | Description | Registry |
|---|---|---|
| arch-base | Minimal Arch Linux without features | ghcr.io/zyrakq/arch-devcontainer-images/arch-base |
| arch-base-common | Arch Linux with pacman-mirror + common-utils | ghcr.io/zyrakq/arch-devcontainer-images/arch-base-common |
| arch-base-dind | Arch Linux with Docker-in-Docker | ghcr.io/zyrakq/arch-devcontainer-images/arch-base-dind |
| arch-base-dood | Arch Linux with Docker-outside-of-Docker | ghcr.io/zyrakq/arch-devcontainer-images/arch-base-dood |
Note: All
-commonimages includepacman-mirrorfeature configured with reflector mode for optimal mirror selection before installing development tools.
Desktop environment images with web-based access. Each desktop environment has its own family with consistent structure.
- arch-webtop-kasmvnc - Optimized web desktop (KasmVNC)
- arch-webtop-kde - KDE Plasma desktop
- arch-webtop-i3 - i3 tiling window manager
- arch-webtop-mate - MATE desktop
- arch-webtop-xfce - XFCE desktop
Each desktop environment family includes 4 images:
| Image | Description |
|---|---|
| arch-webtop-{de} | Base desktop environment |
| arch-webtop-{de}-common | DE + common-utils |
| arch-webtop-{de}-dind | DE + Docker-in-Docker |
| arch-webtop-{de}-dood | DE + Docker-outside-of-Docker |
Note: Replace
{de}with:kasmvnc,kde,i3,mate, orxfce
ghcr.io/zyrakq/arch-devcontainer-images/arch-webtop-kde
ghcr.io/zyrakq/arch-devcontainer-images/arch-webtop-kde-common
ghcr.io/zyrakq/arch-devcontainer-images/arch-webtop-i3-dind
ghcr.io/zyrakq/arch-devcontainer-images/arch-webtop-xfce-dood{
"image": "ghcr.io/zyrakq/arch-devcontainer-images/arch-base-common:latest"
}{
"image": "ghcr.io/zyrakq/arch-devcontainer-images/arch-webtop-kde:latest",
"runArgs": ["--shm-size=1gb"]
}{
"image": "ghcr.io/zyrakq/arch-devcontainer-images/arch-base-dood:latest",
"mounts": [
"source=/var/run/docker.sock,target=/var/run/docker.sock,type=bind"
]
}You can add language support to any image using devcontainer features:
{
"image": "ghcr.io/zyrakq/arch-devcontainer-images/arch-base-common:latest",
"features": {
"ghcr.io/zyrakq/arch-devcontainer-features/node:1": {
"installYarn": true,
"installPnpm": true
},
"ghcr.io/zyrakq/arch-devcontainer-features/rust:2": {}
}
}src/
βββ arch-base/ # Minimal Arch Linux family (4 images)
β βββ arch-base/ # Base image
β βββ arch-base-common/ # Base + common-utils
β βββ arch-base-dind/ # Base + Docker-in-Docker
β βββ arch-base-dood/ # Base + Docker-outside-of-Docker
βββ arch-webtop-kasmvnc/ # KasmVNC desktop family (4 images)
βββ arch-webtop-kde/ # KDE Plasma desktop family (4 images)
βββ arch-webtop-i3/ # i3 window manager family (4 images)
βββ arch-webtop-mate/ # MATE desktop family (4 images)
βββ arch-webtop-xfce/ # XFCE desktop family (4 images)
βββ arch-project/ # Project-specific imagesTotal: 24 images (4 base + 20 webtop)
Features can be added to any base image to customize your environment:
| Feature | Source |
|---|---|
| pacman-mirror | ghcr.io/zyrakq/arch-devcontainer-features/pacman-mirror |
| common-utils | ghcr.io/bartventer/arch-devcontainer-features/common-utils |
| node | ghcr.io/zyrakq/arch-devcontainer-features/node |
| rust | ghcr.io/zyrakq/arch-devcontainer-features/rust |
| dotnet | ghcr.io/zyrakq/arch-devcontainer-features/dotnet |
| go | ghcr.io/bartventer/arch-devcontainer-features/go |
| docker-in-docker | ghcr.io/bartventer/arch-devcontainer-features/docker-in-docker |
| docker-outside-of-docker | ghcr.io/bartventer/arch-devcontainer-features/docker-outside-of-docker |
- π arch-devcontainer-templates - Templates for creating Arch Linux development environments
- βοΈ arch-devcontainer-features - Dev Container features for Arch Linux
- π bartventer/devcontainer-images - Project that inspired this repository
You can manually push any built image from GitHub Container Registry to your custom registry using the Push to Custom Registry workflow.
- Add the following secrets to your repository (Settings β Secrets and variables β Actions):
CUSTOM_REGISTRY_URL- Your registry URL (e.g.,registry.example.com)CUSTOM_REGISTRY_USERNAME- Username for authenticationCUSTOM_REGISTRY_PASSWORD- Password or token for authentication
- Go to Actions β Push to Custom Registry
- Click Run workflow
- Fill in the parameters:
- Image name: Name of the image to push (e.g.,
arch-base-common) - Source tag: Tag from GHCR (e.g.,
latestor20241027.123) - Target tag: Tag for custom registry (optional, defaults to source tag)
- Registry URL: Override registry URL (optional, uses secret by default)
- Image name: Name of the image to push (e.g.,
- Click Run workflow
The workflow will:
- Pull the complete multi-arch image from GHCR
- Push it to your custom registry
- Verify the push was successful
To push arch-base-common:latest to your registry:
Image name: arch-base-common
Source tag: latest
Target tag: (leave empty or specify custom tag)
Registry URL: (leave empty to use secret)Result: registry.example.com/arch-base-common:latest (all platforms)
- Faster pulls: Images cached in your local registry
- Reduced latency: No cross-border network delays
- Selective sync: Push only the images you need
- Complete images: Full multi-arch support preserved
Images are built weekly on Wednesday to optimize resource usage and leverage layer caching:
| Time (UTC) | Stage | Count | Base Image | Description |
|---|---|---|---|---|
| 00:00 | Base Images | 6 | upstream | Minimal base images from archlinux and linuxserver |
| 01:30 | Common Utils | 6 | *-base:latest | Base images with common-utils feature |
| 03:00 | Docker-in-Docker | 6 | *-common:latest | Images with DinD support |
| 04:30 | Docker-outside-of-Docker | 6 | *-common:latest | Images with DooD support |
Total: 24 images built every Wednesday over ~5 hours with maximum layer reuse
- β‘ Layer Reuse: Each stage builds on previous stages' images
- π¦ Reduced Redundancy: Base system built once, reused in all derived images
- π Distributed Load: Build load spread across 4 time windows
- πΎ Bandwidth Savings: Significant reduction in bandwidth by not re-downloading base system
- π― Minimal Base: Simplified structure with only essential images
- π§Ή Monthly Cleanup: Old versions cleaned up on the 20th of each month (keeping last 3 versions)
- π·οΈ Versioning: Images tagged with both
latestandYYYYMMDD.{run_number} - π Auto-discovery: GitHub Actions automatically discover all images from
src/directory - π Workflow Chaining: Each stage triggers after previous completes successfully
- Family-based Organization: Each base image type has its own family
- Consistent Structure: All families follow the same structure (base, common, dind, dood)
- No Cache Builds: Always use latest packages and features
- Multi-platform: Support for
linux/amd64andlinux/arm64(arch-base) orlinux/amd64(arch-webtop) - Minimal Images: Keep base images minimal, add features as needed
- Flat Structure: No nested subdirectories, simplified organization
Dual-licensed under MIT OR Apache-2.0
Note: The LinuxServer.io Docker images used by arch-webtop families are licensed under GPL-3.0. When you use these images, the resulting container will be subject to GPL-3.0 terms. See LinuxServer.io License for details.