I still use Jekyll for this site. It’s still great, write in Markdown, build a static site, host everywhere.
But, my plan is to migrate to Gatsby and MDX pretty soon. But in the meantime, it does the job. Recently i switched to a new computer, and this time I didn’t want to install Ruby since I don’t use it for anything else nowadays. In the past I’ve used Rbenv for managing a local Ruby installation which is great, but i wanted to use Docker Compose this time. I am fine installing Ruby if it’s isolated in a container.
So, lets use Docker Compose to handle the container.
Option 1: Simple and easy
The following docker-compose.yml
file will do the job.
version: '3'
services:
jekyll:
image: jekyll/jekyll:3.8
environment:
- JEKYLL_ENV=development
command: bundle exec jekyll serve --watch --incremental --config _config-dev.yml --host 0.0.0.0
ports:
- 4000:4000
volumes:
- .:/srv/jekyll:cached
- ./vendor/bundle:/usr/local/bundle:cached
The notes
- Using the default Jekyll Docker image
- Using Bundler to start Jekyll.
- Specify a separate config file for development
- Use cached volumes for performance
- To make Jekyll available outside localhost, use
--host=0.0.0.0
✅ Now all we have to do is run docker-compose up -d
and head over to http://localhost:4000
Option 2: Custom nginx service and HTTPS
The notes
The docker-compose.yml
version: '3'
services:
jekyllbuild:
build:
context: .
args:
build_command: "bundle exec jekyll serve --watch --drafts --incremental --config _config-dev.yml"
volumes:
- ".:/srv/jekyll"
ports:
- 4000:4000
nginx:
image: nginx
volumes:
- ".:/var/www/public"
- "./nginx/nginx.conf:/etc/nginx/nginx.conf"
- "./nginx/html/404.html:/usr/share/nginx/html/404.html"
- ./certs:/etc/certs
ports:
- 80:80
- 443:443
In this example I use a separate nginx service and exposing ports 80 and 443. As a bonus we can now use HTTPS by creating a cert for localhost:
brew install mkcert
mkcert -install
mkcert localhost --ca-key --ca-cert (generates SSL certs, move them to ./certs)
The Dockerfile
FROM jekyll/jekyll:latest
ARG build_command
ENV BUILD_COMMAND ${build_command}
RUN bundle install
CMD ${BUILD_COMMAND}
✅ Again, just run docker-compose up -d
and head over to https://localhost