In my previous post I told about switching from Fedora to CentOS. Most of the software was pretty easy to set up, and if something was missing, it was quite convenient to just to
./configure; make; make install. But some things were just not that easy. For example the generation of this web site.
Jekyll is written on Ruby. Ok, so I installed ruby, but the version was too old! So no luck there. I didn’t feel like compiling the Ruby from sources, so I did something else: I created by blogging environment as Docker container.
Idea is this: I maintain the web site repository on the host system, and edit the source files there with Emacs. Then I have the Jekyll dev site running in the container, and when I’m happy with my blog post, I just push the sources from the host system and close down the container.
This is my Dockerfile:
FROM debian RUN apt-get update && \ apt-get -y install \ ruby \ ruby-dev \ build-essential \ rsync \ python \ ssh \ git \ vim RUN groupadd jarkko -g 1000 RUN useradd -rm -d /home/jarkko -s /bin/bash -g jarkko -u 1000 jarkko USER jarkko WORKDIR /home/jarkko RUN gem install --user bundle jekyll RUN echo 'export PATH=/home/jarkko/.gem/ruby/2.5.0/bin:$PATH' \ > /home/jarkko/.bashrc VOLUME /home/jarkko/.gem EXPOSE 4000 RUN mkdir website WORKDIR /home/jarkko/website
I run the container like this:
docker run --rm --name blog -p 4000:4000 \ -v blog_gems:/home/jarkko/.gem \ -v /home/jarkko/dev/bitbucket/website:/home/jarkko/website:Z \ -u jarkko -it debian-blog bash
- There’s a Docker volume for
.gem, because I don’t want to re-install all the gems every time I start the container
- The repository is shared with SELinux flag (
:Z) because I run the Docker with SELinux
- I run
bashinteractively, so I can do things like this:
jarkko@26a82303f5d9:~/website$ bundle exec jekyll serve --host=0.0.0.0 Configuration file: /home/jarkko/website/_config.yml Source: /home/jarkko/website Destination: /home/jarkko/website/_site Incremental build: disabled. Enable with --incremental Generating... done in 2.687 seconds. Auto-regeneration: enabled for '/home/jarkko/website' Server address: http://0.0.0.0:4000/ Server running... press ctrl-c to stop. Regenerating: 2 file(s) changed at 2019-08-11 15:55:11 _posts/2019-08-11-dockerized-jekyll.org _posts/.#2019-08-11-dockerized-jekyll.org ...done in 2.404816922 seconds.
Now when I edit my blog post draft in the Emacs, Jekyll dev environment running inside the container works just like it would running on the host.