Github Pages省下不少人架設個人伺服器的時間與金錢,然而要做出一個兼具結構與美觀的靜態網站仍需下一番苦工。雖然從頭到撰寫 HTML 與 css 也是一種做法,但不少人會採用 Generator 產生靜態頁面,其中又以 Github 內建支援的 Jekyll 成為首選。
但恐怕不少人會被 Jekyll 繁瑣的步驟給勸退,而我就是其中之一(畢竟我實在不想在工作環境裡安裝Ruby)。我想這時候就輪到 Docker 出場了。
docker run --volume="{% math_inline %}{PWD}:/srv/jekyll" --rm jekyll/jekyll jekyll new
--volume="{% endmath_inline %}{PWD}:/srv/jekyll" 會將我們當前的工作路徑掛載到 container 中的 /srv/jekyll,你可以根據自己的計畫調整相關引數。透過這道指令可以馬上建立一個 Jekyll 網站所需要的原始碼,至於怎麼在 Github 建立 Pages 所需要的 Repositry 可以參考官方教學。
當你產生Jekyll專案目錄後,還必須註解掉 Gemfile 中的 gem "github-pages", group: :jekyll_plugins,並把參考官方清單將 gem "jekyll", "~> <VERSION>" 或其他的 Dependency 修改為適當版號。
每當我們要開始撰寫網站時,只要執行:
docker run \
--rm -d --volume="${PWD}:/srv/jekyll" \
-p 80:4000 jekyll/jekyll \
jekyll serve --force_polling
就能在 local 直接觀察編輯結果。
但,這樣還是有個大問題,那就是太慢了!
每次我們啟動這個 container 就會進行一次 Gem 的安裝,有什麼辦法可以避免這樣的狀況呢?其實我們只要建立自己的 Jekyll image 就可以了。
FROM jekyll/jekyll
COPY Gemfile Gemfile.lock /srv/jekyll/
RUN bundle install
以此 Dockerfile 建立 image 我們就得到一個已經安裝相應 Gemfile 套件的映象檔,也讓未來的執行更加愜意。
如果你很確定不會再更改 Jekyll 的 port 也能直接加上
EXPOSE 4000