This website is built with Jekyll using Minimal Mistakes theme and hosted on GitHub Pages. For development and writing posts I use Docker that builds a static website locally and serves it from a Docker container. I then push the local changes upstream to GitHub which then builds the website on GitHub’s servers.
In this first HOWTO serie, I explain how you can set up Docker environment and run website locally.
Installation using Docker
After forking the Minimal Mistakes theme on GitHub and cloning it to local machine, you can create Docker container to use virtual environment with already preinstalled ruby.
- is a tool that allows you to create OS-level virtual environments that can package and run applications by using containers. A container thus have all the libraries and other dependencies your app needs. You can run several containers on one host in parallel or connect them with each other via defined channels.
STEP 1 - Create container with ruby environment
For this you create
Dockerfile in the app’s working directory and code:
1 2 3 4 5 6 7 8 9 FROM ruby:2.5 WORKDIR /usr/src/app # we put README.md as placeholder, because Docker cannot create empty container COPY README.md ./ #create volume for later mounting of your local directory VOLUME /usr/src/app
Build the container in the terminal:
docker build -t ruby-environment .
STEP 2 - Creating Gemfile.lock
Now we generate
Gemfile.lock for minimal-mistakes theme with these commands:
docker run --volume="$PWD:/usr/src/app" -it ruby-environment bundle install
STEP 3 - Creating container for our website
host to your
_config.yml prior to building container.
# Site Settings locale : "en-US" title : "Minimal Mistakes" title_separator : "-" subtitle : "Development Test Site" name : "Your Name" description : "Minimal Mistakes theme test." port : 4000 host : "0.0.0.0"
Modify the Dockerfile as follows:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 FROM ruby:2.5 RUN bundle config --global frozen 1 WORKDIR /usr/src/app # prepare to install ruby packages into container COPY Gemfile Gemfile.lock minimal-mistakes-jekyll.gemspec ./ RUN bundle install VOLUME /usr/src/app EXPOSE 4000 CMD ["jekyll", "serve"]
Next steps are:
- Build a container
docker build -t minimal-mistakes .
- Run your container
docker run --volume="$PWD:/usr/src/app" -p 4000:4000 -t minimal-mistakes
- Go to http://0.0.0.0:4000/
And that’s it! 😊
Now you have your own Docker container running! It makes working on web development a pleasant experience - you see the changes immediately in your web browser.
With one exception: Each time you change something in .yml files (like adding a new navigation page in
_data/navigation.yml or some configuration in your
_config.yml), you need to rebuild the container and run it again to see these changes.
Note: Want to try out the test version of the mm theme? NP. Navigate to test directory and add
_config.yml there as well. Then run this command:
docker run --volume="$PWD:/usr/src/app" -p 6000:4000 -it minimal-mistakes bundle exec rake preview
So now we can have two instances of the same docker container running in parallel. One on
http://0.0.0.0:4000 with the main website and another one (test version) on