Skip to content

envygeeks/jekyll-docker

Repository files navigation

Jekyll Docker

Docker images for running Jekyll with the official Ruby image family and Docker Buildx Bake. The images keep the long-standing /srv/jekyll workdir, expose Jekyll's default development ports, and follow the official Ruby image pattern of running as root by default.

Images

Image Purpose
jekyll/jekyll Default image with Jekyll and common community gems.
jekyll/jekyll:pages GitHub Pages-compatible image using versions from docker-bake.hcl.

jekyll/builder and jekyll/minimal are archived and no longer built or published. Their final release was 4.4.1; existing latest, 4, and 4.4 tags for those images should be treated as aliases of that final release.

Usage

Build a site in the current directory:

docker run --rm \
  --volume "$PWD:/srv/jekyll" \
  jekyll/jekyll \
  jekyll build

Serve a site locally:

docker run --rm \
  --volume "$PWD:/srv/jekyll" \
  --publish 4000:4000 \
  --publish 35729:35729 \
  jekyll/jekyll \
  jekyll serve --host 0.0.0.0 --livereload

On Docker Desktop for Windows or other bind mount setups where host file changes do not trigger rebuilds, use Jekyll's polling watcher:

docker run --rm \
  --volume "$PWD:/srv/jekyll" \
  --publish 4000:4000 \
  --publish 35729:35729 \
  jekyll/jekyll \
  jekyll serve --host 0.0.0.0 --livereload --force_polling

Run Bundler explicitly when your project has a Gemfile:

docker run --rm \
  --volume "$PWD:/srv/jekyll" \
  jekyll/jekyll \
  bundle install

docker run --rm \
  --volume "$PWD:/srv/jekyll" \
  jekyll/jekyll \
  bundle exec jekyll build

For Linux bind mounts, use Docker's standard --user flag when you want generated files to be owned by your host user:

docker run --rm \
  --user "$(id -u):$(id -g)" \
  --volume "$PWD:/srv/jekyll" \
  jekyll/jekyll \
  jekyll build

For rootless Podman, do not pass Docker's --user flag. Run the image as-is so Podman maps container root to your host user:

podman run --rm \
  --volume "$PWD:/srv/jekyll" \
  docker.io/jekyll/jekyll \
  jekyll build

Custom System Packages

The images do not install operating-system packages at runtime. Build a project-specific image when your site needs additional Debian packages:

FROM jekyll/jekyll

RUN apt-get update \
  && apt-get install -y --no-install-recommends graphviz \
  && rm -rf /var/lib/apt/lists/*

The default image includes Node.js and pnpm. Corepack package managers are configured per target in docker-bake.hcl.

Local Development

Build every image target:

docker buildx bake

Build and load a single target locally:

docker buildx bake --load jekyll
docker buildx bake --load pages

Run the smoke test suite:

script/test jekyll amd64
script/test pages amd64

Refresh GitHub Pages versions in docker-bake.hcl:

script/update

GitHub Pages Versions

script/update downloads https://pages.github.com/versions.json and updates the Pages-related Bake variables:

  • PAGES_RUBY_VERSION
  • PAGES_JEKYLL_VERSION
  • GITHUB_PAGES_VERSION

About

⛴ Docker images, and CI builders for Jekyll.

Topics

Resources

License

Stars

1k stars

Watchers

16 watching

Forks

Releases

No releases published

Sponsor this project

 

Packages

 
 
 

Contributors