ローカルに 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
を呼ぶ方法を使っています。