ローカルに nginx や mysql が起動していたり、gem install のためだけ
に cmake や icu4c を brew install するのは嫌になったので、三連休で
出来るだけ Dockerize しました。仕事の素振りも兼ねています。

nginx

このブログの記事を書く時のプレビューや、雑多な html ファイルの表示
に使っています。

今まで $ brew install nginx して、nginx.conf も別途管理していまし
たが、以下のような雑な docker-compose.yml で、雑にマウントするだけ
で良くなりました。

version: '3'

services:
  nginx:
    image: nginx:alpine
    ports:
      - 8080:80
    volumes:
      - /Users/masutaka/Sites:/usr/share/nginx/html
    restart: on-failure:10
  • Snow Leopard からの流れで、雑多な html は ~/Sites に置いています。
  • $ docker-compose up -d しておけば、macOS を再起動しても nginx が
    起動してくれます。
  • ほかにグローバルに必要な service が増えたら追加していきます。

mysql

MySQL を使う Rails アプリケーションがあったので、とりあえず
Dockerize しました。

version: '3'

services:
  mysql:
    image: mysql:5.7
    ports:
      - 13306:3306
    environment:
      MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'

config/database.yml に書く development.url は
mysql2://root:@127.0.0.1:13306/development とすれば接続できます。

mysql2://root:@localhost:13306/development だと Rails は TCP では
なく UNIX Socket で接続しようとし、失敗してしまいます。

あと、Rails も同時に Dockerize しないと、mysql2 gem のインストール
で libmysql.*.dylib を要求され、brew install mysql することになる
ので注意。今回は Rails アプリの Dockerize は着手できませんでした。

brew の mysql は削除したので、クライアントは MySQL Workbench を使
うことにしました。brew cask install mysqlworkbench でインストール
出来ます。

postgresql

PostgreSQL を使う Rails アプリケーションもあったので移行しました。
MySQL とさほど違いはありません。

version: '3'

services:
  postgresql:
    image: postgres:9.5-alpine
    ports:
      - 15432:5432

クライアントは PSequel を使うことにしました。brew cask install
psequel でインストール出来ます。

あれ、https://www.psequel.com/ は SSL 証明書が不正だ…。*.herokuapp.com の
証明書を参照している。

octodown

今回一番の難関でした。結論から書くと、完全な Dockerize は失敗しました。

GitHub markdown のプレビューには [2015-04-05-1] に紹介した Emacs
から octodown を呼ぶ方法を使っています。

octodown はご覧のとおり依存関係が強烈で、brew install cmake icu4c
が必要なだけでなく、nokogiri や eventmachine など、ネイティブ拡張
を含む gem がゴリゴリとインストールされます。

画像

※ この画像は bundle viz で作りました。brew install graphviz が必要
で、ゴリゴリと依存パッケージがインストールされるので、これも
Dockerize しないと…(連鎖

見よう見真似で Dockerize を終えられたかに見えましたが、最後に罠が
ありました。

octodown は引数に markdown ファイルを渡すと、html をレンダリングし
た後にブラウザで開いてくれます。この時 launchy が使われます。

しかし、octodown は Docker の中にあるので、ブラウザで開くことが出
来ず、エラーになります。

似たような悩みの Issue はありました。
https://github.com/copiousfreetime/launchy/issues/108

あと、今回初めて知ったのですが、octodown は LiveReload という素晴
らしい機能があります。こちらもうまくいきませんでした。Docker のポー
トフォワードを有効にしても、その前でエラーが発生してしまいます。

仕方がないので、今は gem install launchy で凌いでます。ここがダサ
い回避策
です。どうにかならないかなあ。

launchy の依存関係は軽いので、octodown をインストールせずに済んだ
のは良かったです。

画像

qiita-markdown-cli

こちらはあっさり成功。

qiita-markdown-cli が動かなくなっていたので、workaround を考えたり、
PR を作ったり したくらいです。

Qiita markdown のプレビューには [2016-01-15-1] に紹介した Emacs か
qiita-markdown-cli を呼ぶ方法を使っています。