Kaihatsu

Alpine Linux

https://github.com/mhart/alpine-node

↑で知ったのだけれど、Alpine Linux というイメージがあるらしい。

✈ docker rmi `docker images -qa`

するとディスクがメチャ空くでおなじみの Docker のイメージサイズをコンパクトにできるそうだ。最新版である(もうすぐ v5 が出るらしいが...) v4.2.1 を pull してみると

✈ docker images
REPOSITORY                         TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
node                               latest              db4c9d65b7e4        4 days ago          641.7 MB
mhart/alpine-node                  latest              42e56d1e80c4        2 weeks ago         35.02 MB

641.7MB -> 35.02MB と大変スッキリサイズになっているのが分かる。単純な Node のみでよいコンテナ(依存モジュールがネイティブバインディングあったりすると面倒そうだ...)であればこれで十分な気がする。

...とおもって、このブログも Makefile でタスクを書いてたのを npm-run-all を使って npm run-scripts に書けば alpine-node でビルドできるかも〜と書きなおしてみた。

https://github.com/jgsme/dev/pull/77

"scripts": {
  "build": "npm-run-all build:before -p build:assets build:generate",
  "build:before": "mkdir -p $npm_package_config_DEST",
  "build:assets": "npm-run-all build:before -p build:assets:*",
  "build:assets:gfm": "cp node_modules/github-markdown-css/github-markdown.css $npm_package_config_DEST",
  "build:assets:cname": "cp src/CNAME $npm_package_config_DEST",
  "build:assets:favicon": "cp -r src/favicons/* $npm_package_config_DEST",
  "build:assets:live": "lsc -cbo $npm_package_config_DEST src/*.ls",
  "build:assets:stylus": "stylus src/*.styl --out $npm_package_config_DEST -c",
  "build:generate": " npm-run-all build:before -p build:generate:*",
  "build:generate:article": "lsc scripts/article.ls",
  "build:generate:indexpage": "lsc scripts/indexpage.ls",
  "build:generate:archive": "lsc scripts/archive.ls",
  "build:generate:rss": "lsc scripts/rss.ls",
  "clean": "rm -rf $npm_package_config_DEST",
  "serve": "static -p $npm_package_config_PORT $npm_package_config_DEST",
  "write": "lsc scripts/write.ls"
}

make でやっていたときは make でがんばる気がしなくて直列で実行してたのを並列化させてより高速にビルドできるようになった。ハマったのは変数のところで、前から npm config があるのは知っていたのだけれど、それをうまいこと扱う方法がよく分からなかった。config は

"config": {
  "DEST": "build",
  "PORT": "3000"
}

こういう感じに書いておくと環境変数に npm_package_config_DEST というような感じで参照できる。環境変数なので、script フィールドでは $npm_package_config_DEST としてやればうまく動くようだった。これを上書きするときは

✈ npm run serve --dev:PORT=3001

というような感じで --<package 名>:<変数名>=<変数> というような形式で読んでやると上書きすることができた。

さてあとは Wercker でビルドするだけだぞ〜とおもったら、Wercker だと Alpine Linux ベースのイメージはバグで pull したあとに終了してしまうらしい。。。。

当初の目的が全く果たせなくなったが、諦めてオフィシャルの node でビルドするように戻して今日のところはフィニッシュした。