Docker¶
SWS
has first-class Docker support.
It is provided in three Docker image variants such as Scratch, Alpine and Debian images.
All images are available on Docker Hub and GitHub Container Registry.
OS/Arch¶
All Docker images are Multi-Arch and the following operating systems and architectures are supported.
linux/386
linux/amd64
linux/arm/v6
linux/arm/v7
linux/arm64
linux/ppc64le
(Debian only)linux/s390x
(Debian only)
SWS statically-linked binary
All the Docker images use the SWS statically-linked binary, meaning that the binary is highly optimized, performant, and dependency-free thanks to musl libc.
Run a container¶
To give the server a quick try just run the following commands.
Tips
- The SWS CLI arguments can be provided directly to the container or omitted as shown below.
- A Docker volume like
-v $HOME/my-public-dir:/public
can be specified to overwrite the default root directory.
To run SWS, there are several Docker image variants that you can use.
Scratch (just the binary)¶
docker run --rm -it -p 8787:80 joseluisq/static-web-server:2 -g info
# or
docker run --rm -it -p 8787:80 ghcr.io/static-web-server/static-web-server:2 -g info
Alpine¶
docker run --rm -it -p 8787:80 joseluisq/static-web-server:2-alpine -g info
# or
docker run --rm -it -p 8787:80 ghcr.io/static-web-server/static-web-server:2-alpine -g info
Debian¶
docker run --rm -it -p 8787:80 joseluisq/static-web-server:2-debian -g info
# or
docker run --rm -it -p 8787:80 ghcr.io/static-web-server/static-web-server:2-debian -g info
Development¶
Additionally, we publish development Docker images based on master
branch changes.
# Scratch (just the binary)
docker run --rm -it -p 8787:80 ghcr.io/static-web-server/static-web-server:devel -g info
# Debian
docker run --rm -it -p 8787:80 ghcr.io/static-web-server/static-web-server:devel-debian -g info
Dockerfile¶
SWS Docker images can be extended as needed.
Extending the Scratch Docker image (just the binary)
FROM joseluisq/static-web-server:2
# or
FROM ghcr.io/static-web-server/static-web-server:2
# do stuff...
Or the Alpine
FROM joseluisq/static-web-server:2-alpine
# or
FROM ghcr.io/static-web-server/static-web-server:2-alpine
# do stuff...
Or the Debian
FROM joseluisq/static-web-server:2-debian
# or
FROM ghcr.io/static-web-server/static-web-server:2-debian
# do stuff...
Docker Compose¶
Example using Docker Compose.
version: "3.3"
services:
website:
image: joseluisq/static-web-server:2-alpine
container_name: "website"
ports:
- 80:80
restart: unless-stopped
environment:
# Note: those envs are customizable but also optional
- SERVER_ROOT=/var/public
- SERVER_CONFIG_FILE=/etc/config.toml
volumes:
- ./public:/var/public
- ./config.toml:/etc/config.toml
Traefik Proxy¶
Example using Docker Swarm and Traefik Proxy.
- Create an external
traefik_net
Docker attachable network for Traefik:docker network create --driver=overlay --attachable traefik_net
- Map a host directory like
/var/www/website
to the service container or create an externalwebsite_data
Docker volume if you prefer:docker volume create website_data
version: "3.3"
services:
traefik:
image: "traefik:v2.11"
command:
#- "--log.level=DEBUG"
- "--api.insecure=true"
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.web.address=:80"
ports:
- "80:80"
- "8080:8080"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock:ro"
website:
image: joseluisq/static-web-server:2
environment:
# Note: those envs are customizable but also optional
- SERVER_ROOT=/public
volumes:
- /var/www/website:/public
# Or use an existing Docker volume
# - website_data:/public
labels:
- "traefik.enable=true"
- "traefik.docker.network=traefik_net"
- "traefik.http.routers.website.entrypoints=web"
- "traefik.http.routers.website.rule=Host(`website.localhost`)"
- "traefik.http.routers.website.priority=1"
- "traefik.http.services.website.loadbalancer.server.port=80"
networks:
- traefik_net
# volumes:
# website_data:
# external: true
networks:
traefik_net:
external: true
Kubernetes¶
Example using Kubernetes pod with liveness probe.
apiVersion: v1
kind: Pod
metadata:
name: website
spec:
containers:
- name: sws
image: ghcr.io/static-web-server/static-web-server
command:
- static-web-server
- --root=/public
- --health
ports:
- containerPort: 80
livenessProbe:
httpGet:
path: /health
port: http
TrueCharts¶
The TrueCharts Community also provides a ready-to-use Static Web Server Helm-Chart that you can easily deploy in your Kubernetes.