docker上でjekyllを使う

何らかのブログシステムを構築してみたいと思い調べてみたところjekyllというのが良さそうということがわかったのでちょっと入れてみることにした。

まずboot2dockerを入れて起動

$ brew install boot2docker
$ boot2docker init
$ boot2docker up

しかし、うまくいかず。よく見るとinitの段階でエラーが出ていた。
原因はvirtualboxの方にあるらしいく、入っているものは結構古いものだったので
入れなおすことにした。
/ApplicationのVirtualbox.appを消した上で

$ brew cask install virtualbox

このときcaskの場所が変わっていて少しハマったのだがそれについてはこちら
brew caskが動かない - MEMOcho-

これでboot2dockerのVMが正しく起動した

次にjekyllが入ったimageを作成する

$ mkdir jekyll
$ cd jekyll
$ docker build -t jekyll ./

Dockerfileはこちら

# jekyll
FROM ruby:latest
RUN apt-get update
RUN apt-get -qq
RUN apt-get install -y vim
RUN gem install jekyll
RUN gem install therubyracer

最初jekyllのみ入れていたのだが、jekyllコマンドを実行してみると以下のようなエラーが出た

/usr/local/bundle/gems/execjs-2.2.2/lib/execjs/runtimes.rb:51:in `autodetect': Could not find a JavaScript runtime. See https://github.com/sstephenson/execjs for a list of available runtimes. (ExecJS::RuntimeUnavailable)

runtimeが見つからないということで、以下のページを参考にtherubyracerを同時にgem installするようにした
Ruby:Rails4 で Could not find a JavaScript runtime エラー | サイト運営の私的メモ


containerを作成して中でjekyllを起動してみる

$ docker run -it -p 4000:4000 jekyll /bin/bash

docker> mkdir /var/jekyll
docker> cd /var/jekyll
docker> jekyll new hoge
docker> cd hoge
docker> jekyll serve

jekyllは立ち上げるとデフォルトで4000番にてアクセスできるようになるらしいので

  • -p 4000:4000

としておいた

最後にPCからboot2dockerのVMへ4000番をポートフォワーディングする

$ ssh -NfL 4000:127.0.0.1:4000 docker@localhost -p 2022 -i ~/.ssh/id_boot2docker

これでlocalhost:4000にアクセスするとjekyll newで作成されたデフォルトの画面が表示された