A really small static web server for Docker
My goal is to create to smallest docker container for my web static files. The advantage of Go is that you can generate a fully static binary, so that you don't need anything else.
- A fully static web server in 5MB
- Web server build for Docker
- HTTPS by default
- Can generate certificate on his onw
- Light container
- More security than official images (see below)
- Log enabled
Because the official Golang image is wayyyy to big (around 1/2Gb as you can see below) and could be unsecure.
For me, the whole point of containers is to have a light container... Many links should provide you with additionnal info to see my point of view:
- Over 30% of Official Images in Docker Hub Contain High Priority Security Vulnerabilities
- Create The Smallest Possible Docker Container
- Building Docker Images for Static Go Binaries
- Small Docker Images For Go Apps
// HTTPS server
docker run -d -p 443:8043 -v path/to/website:/srv/http --name goStatic pierrezemb/gostatic
// HTTP server
docker run -d -p 80:8043 -v path/to/website:/srv/http --name goStatic pierrezemb/gostatic --forceHTTP
I'm using echo as a micro web framework because he has great performance, and golang-builder to generate the static binary (command line in the makefile)
I'm also using the centurylink/ca-certs image instead of the scratch image to avoid this error:
x509: failed to load system roots and no roots provided
The centurylink/ca-certs image is simply the scratch image with the most common root CA certificates pre-installed. The resulting image is only 258 kB which is still a good starting point for creating your own minimal images.