Docker base template providing standardized container foundations with flexible entrypoint systems, multi-architecture support, and consistent configuration patterns across Alpine, Debian, and Rocky Linux distributions.
The Docker base template serves as a foundational starting point for building containerized applications. It provides:
- Standardized Dockerfiles with OCI annotations and best practices
- Flexible entrypoint system supporting custom initialization scripts
- Consistent environment variable configuration across all variants
- Multi-architecture support for diverse hardware platforms
- User/group management with PUID/PGID support for permission handling
- Three distribution variants: Alpine (lightweight), Debian (default/widely-compatible), Rocky (enterprise)
# Pull and run the default Debian variant
docker pull snowdreamtech/base:debian
docker run -d --name=base -e TZ=Asia/Shanghai snowdreamtech/base:debian
# Or use docker-compose
docker-compose up -dThe recommended variant for most use cases, providing wide compatibility and extensive package availability.
docker run -d \
--name=base \
-e TZ=Asia/Shanghai \
--restart unless-stopped \
snowdreamtech/base:debianSupported Architectures: i386, amd64, arm32v5, arm32v7, arm64, mips64le, ppc64le, s390x
Base Image: snowdreamtech/debian:13.4.0
Lightweight variant optimized for minimal image size and fast startup times.
docker run -d \
--name=base \
-e TZ=Asia/Shanghai \
--restart unless-stopped \
snowdreamtech/base:alpineSupported Architectures: i386, amd64, arm32v6, arm32v7, arm64, ppc64le, riscv64, s390x
Base Image: snowdreamtech/alpine:3.23.4
Enterprise-focused variant based on Rocky Linux, ideal for production environments requiring RHEL compatibility.
docker run -d \
--name=base \
-e TZ=Asia/Shanghai \
--restart unless-stopped \
snowdreamtech/base:rockySupported Architectures: i386, amd64, arm32v5, arm32v7, arm64, mips64le, ppc64le, s390x
Base Image: snowdreamtech/rocky:10.1.0
# Build Debian variant
docker build -t snowdreamtech/base:debian ./docker/debian/
# Build Alpine variant
docker build -t snowdreamtech/base:alpine ./docker/alpine/
# Build Rocky variant
docker build -t snowdreamtech/base:rocky ./docker/rocky/Build images for multiple architectures using docker buildx:
# Create and use a buildx builder
docker buildx create --use --name build --node build --driver-opt network=host
# Build Debian for multiple architectures
docker buildx build \
--platform=linux/386,linux/amd64,linux/arm/v5,linux/arm/v7,linux/arm64,linux/mips64le,linux/ppc64le,linux/s390x \
-t snowdreamtech/base:debian \
./docker/debian/ \
--push
# Build Alpine for multiple architectures
docker buildx build \
--platform=linux/386,linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64,linux/ppc64le,linux/riscv64,linux/s390x \
-t snowdreamtech/base:alpine \
./docker/alpine/ \
--push
# Build Rocky for multiple architectures
docker buildx build \
--platform=linux/386,linux/amd64,linux/arm/v5,linux/arm/v7,linux/arm64,linux/mips64le,linux/ppc64le,linux/s390x \
-t snowdreamtech/base:rocky \
./docker/rocky/ \
--pushAll variants support the following environment variables for runtime configuration:
| Variable | Default | Description |
|---|---|---|
KEEPALIVE |
0 |
Keep container running (1=enabled, 0=disabled) |
CAP_NET_BIND_SERVICE |
0 |
Enable binding to privileged ports (<1024) |
LANG |
C.UTF-8 |
Locale setting for UTF-8 character support |
UMASK |
022 |
Default file creation mask |
DEBUG |
false |
Enable debug output in entrypoint scripts |
PGID |
0 |
Primary group ID for custom user creation |
PUID |
0 |
User ID for custom user creation |
USER |
root |
Username for custom user creation |
WORKDIR |
/root |
Working directory path |
TZ |
- | Timezone (e.g., Asia/Shanghai, America/New_York) |
Debian-specific:
| Variable | Default | Description |
|---|---|---|
DEBIAN_FRONTEND |
noninteractive |
Debian package installation mode |
Create a non-root user with specific UID/GID at build time:
docker build \
--build-arg PUID=1000 \
--build-arg PGID=1000 \
--build-arg USER=appuser \
-t snowdreamtech/base:debian-custom \
./docker/debian/Or at runtime (requires rebuilding the image):
docker run -d \
--name=base \
-e PUID=1000 \
-e PGID=1000 \
-e USER=appuser \
snowdreamtech/base:debianNote: User creation only occurs when PUID≠0, PGID≠0, and USER≠root.
services:
base:
image: snowdreamtech/base:debian
container_name: base
environment:
- TZ=Asia/Shanghai
restart: unless-stoppedservices:
base:
image: snowdreamtech/base:debian
container_name: base
environment:
- TZ=Asia/Shanghai
- DEBUG=true
- KEEPALIVE=1
volumes:
- /path/to/data:/data
restart: unless-stoppedImages follow semantic versioning with the format: {major}-v{major}.{minor}.{patch}
Examples:
snowdreamtech/base:debian-13-v13.4.0snowdreamtech/base:alpine-3-v3.23.4snowdreamtech/base:rocky-10-v10.1.0
This format allows:
- Major version pinning:
debian-13(tracks latest 13.x.x) - Full version pinning:
debian-13-v13.4.0(exact version) - Latest tag:
debianorlatest(tracks most recent release)
Each distribution variant supports multiple CPU architectures for deployment across diverse hardware platforms:
| Variant | Architectures |
|---|---|
| Debian | i386, amd64, arm32v5, arm32v7, arm64, mips64le, ppc64le, s390x |
| Alpine | i386, amd64, arm32v6, arm32v7, arm64, ppc64le, riscv64, s390x |
| Rocky | i386, amd64, arm32v5, arm32v7, arm64, mips64le, ppc64le, s390x |
Docker automatically selects the appropriate architecture for your platform when pulling images.
The base template includes a flexible entrypoint system that executes custom initialization scripts before starting your application.
- The
docker-entrypoint.shscript runs at container startup - It executes all executable scripts in
/usr/local/bin/entrypoint.d/in lexical order - Each script receives the container's command-line arguments
- If any script fails, the container stops (fail-fast behavior)
Create custom initialization scripts in your derived Dockerfile:
FROM snowdreamtech/base:debian
# Add your custom initialization script
COPY my-init.sh /usr/local/bin/entrypoint.d/20-my-init.sh
RUN chmod +x /usr/local/bin/entrypoint.d/20-my-init.sh
# Your application setup
COPY app /app
CMD ["/app/start.sh"]Enable debug output to troubleshoot entrypoint execution:
docker run -e DEBUG=true snowdreamtech/base:debianOutput example:
→ [ENTRYPOINT] Executing all scripts in /usr/local/bin/entrypoint.d
→ Running /usr/local/bin/entrypoint.d/10-base-init.sh
→ [ENTRYPOINT] Done.
- Docker (>= 20.10)
- Docker Buildx plugin
# Build all variants
make build
# Build specific variant
docker build -t base:debian ./docker/debian/
docker build -t base:alpine ./docker/alpine/
docker build -t base:rocky ./docker/rocky/# Test default configuration
docker run --rm base:debian id
# Test custom user creation
docker build --build-arg PUID=1000 --build-arg PGID=1000 --build-arg USER=testuser -t base:debian-test ./docker/debian/
docker run --rm base:debian-test id
# Expected: uid=1000(testuser) gid=1000(testuser)
# Test DEBUG mode
docker run --rm -e DEBUG=true base:debian- 使用 buildx 构建多平台 Docker 镜像
- 如何使用 docker buildx 构建跨平台 Go 镜像
- Building Multi-Arch Images for Arm and x86 with Docker Desktop
- How to Rapidly Build Multi-Architecture Images with Buildx
- Faster Multi-Platform Builds: Dockerfile Cross-Compilation Guide
- docker/buildx
- Email: sn0wdr1am@qq.com
- QQ: 3217680847
- QQ群: 949022145
- WeChat/微信群: sn0wdr1am
MIT