klakegg / docker-hugo

Truly minimal Docker images for Hugo open-source static site generator.
https://hub.docker.com/r/klakegg/hugo/
MIT License
393 stars 72 forks source link
docker-hugo docker-image hugo

Hugo

Docker Pulls

Truly minimal Docker images for Hugo with batteries included. These images sets bind when started as server, otherwise no magic.

Latest tags

Default minimal image based upon Busybox:

Minimal image based upon Alpine:

Minimal image based upon Alpine with Asciidoctor installed:

Minimal image based upon Alpine with Pandoc installed:

Image based upon Debian:

Image based upon Ubuntu:

Looking for older tags? Please see the complete list of tags.

Using image

This image does not try to do any fancy. Users may use Hugo just as they are used to.

Command line

Normal build:

docker run --rm -it \
  -v $(pwd):/src \
  klakegg/hugo:0.112.0

Run server:

docker run --rm -it \
  -v $(pwd):/src \
  -p 1313:1313 \
  klakegg/hugo:0.112.0 \
  server

docker-compose

Normal build:

  build:
    image: klakegg/hugo:0.112.0
    volumes:
      - ".:/src"

Run server:

  server:
    image: klakegg/hugo:0.112.0
    command: server
    volumes:
      - ".:/src"
    ports:
      - "1313:1313"

Github Actions

All versions and variants published using this repository may be used in any combination.

Simple configuration for e.g. .github/workflows/hugo.yml:

name: Hugo

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v1

    - name: hugo
      uses: klakegg/actions-hugo@1.0.0

Find out more in klakegg/actions-hugo.

Travis CI

Simple configuration for .travis.yml:

language: bash

services:
- docker

script:
- docker run --rm -i \
    -v $(pwd):/src \
    klakegg/hugo:0.112.0

The bash environment is used for faster loading before Travis is ready to trigger Docker.

Hugo shell

A Hugo shell is made available in the Alpine/Debian/Ubuntu images (including Asciidoctor/Pandoc images). Hugo shell is bash and Hugo completion.

To get into a shell for your site:

docker run --rm -it \
  -v $(pwd):/src \
  klakegg/hugo:0.112.0-alpine \
  shell

Hugo extended edition

The extended edition is used in those images containing ext in the name. Except use of extended edition and additional tools are those images exactly the same as those using the normal edition.

Table of Hugo extention features and the version when images first support the feature:

Feature Alpine Debian Ubuntu
Hugo extended 0.43 0.43 0.43
PostCSS 0.56.0 0.43 0.43
NodeJS 0.54.0 0.54.0 0.54.0
Yarn 0.54.0 0.54.0 0.54.0
Git 0.56.0 0.56.0 0.56.0
Autoprefixer 0.57.0 0.57.0 0.57.0
Go 0.68.0 0.68.0 0.68.0
Babel 0.71.0 0.71.0 0.71.0
rst2html 0.81.0 0.81.0 0.81.0

Users of google/docsy may use the extended images as of version 0.57.2 to build their site.

Using ONBUILD image

The onbuild images adds content of the folder of your Dockerfile into /src and builds to the /target (prior to 0.68.0: /onbuild) folder.

Example Dockerfile for your project where the site is made into an nginx image (Docker 17.05-ce or newer):

FROM klakegg/hugo:0.112.0-onbuild AS hugo

FROM nginx
COPY --from=hugo /target /usr/share/nginx/html

Available arguments for docker build:

Using CI image (0.77.0 or newer)

The ci images are prepared for use in configuration for continuous integration/deployment.

Difference between normal images and ci images:

Using Pandoc

Hugo images with Pandoc support are made available for users wanting to use Pandoc in combination with Hugo.

Hugo triggers Pandoc with pandoc --mathjax. Some users may want to use other arguments, so to accommodate such a need is an alias pandoc created with the content of HUGO_PANDOC (default: pandoc-default) upon initiation. The pandoc executable is renamed to pandoc-default as a new pandoc script is provided to hanle the HUGO_PANDOC evironment variable.

Example of explicit setting pandoc alias:

docker run --rm -it \
  -v $(pwd):/src \
  -e HUGO_PANDOC="pandoc-default --strip-empty-paragraphs" \
  klakegg/hugo:0.112.0-pandoc

Overriding entrypoint

Those wanting to override entrypoint in the image may easily do so.

Default entrypoint is hugo, a small script wrapping the official Hugo software. If you want to use the official software without any wrapping may you use hugo-official as entrypoint.

On command line using --entrypoint:

docker run --rm -it \
  -v $(pwd):/src \
  --entrypoint hugo-official \
  klakegg/hugo:0.112.0

In docker-compose using entrypoint:

  build:
    image: klakegg/hugo:0.112.0
    entrypoint: hugo-official
    volumes:
      - ".:/src"

Versions

Software Version
Go 1.19.9
NodeJS 20.x
Pandoc 2.12
Yarn 1.22.19

Configuration

Environment variables:

Ports: