自分のログイン済 Now を扱えるプライベート Docker イメージを作る

動機

nowはCLIを提供していてくれてすごく便利なんですけど、ログインするのに入力が必要な感じなのでcliだけで自動処理させようとか思っても無理です。APIはあるので、一時期自作してましたがメンテナンスが面倒くさいのでやっぱりどうしても公式のを使いたい。

5分で作れる

方法は以下の通り

  1. 公式のnodeイメージを使ってコンテナを走らせる
  2. 中でnowにログイン
  3. docker commit
  4. DockerHubへpush

DockerHubへプッシュ前にプライベートリポジトリを作っておくのと、docker loginはしておく必要があります。

コンテナを走らせる

以下のようなコマンドで立ち上げて中に入ります。--nameには分かりやすい名前を付けるといいです。

docker run -it --rm --name now node:10 /bin/sh

nowにログイン

中にはいったらまずnowコマンドをインストール。そしてnow loginと実行するとメールアドレスを聞かれるので入力して認証します。

yarn global add now
# [1/4] Resolving packages...
# [2/4] Fetching packages...
# [3/4] Linking dependencies...
# [4/4] Building fresh packages...
# success Installed "now@11.4.0" with binaries:
#       - now
now login
# > Enter your email:

認証が終わった直後の状態をイメージ化

ここまで終わったら一旦コンテナから抜けます。抜ける方法はctrl+p``ctrl+qです。exitしちゃったりしたら最初からです。
そしてdocker commitします。以下のコマンドはnowという名前のコンテナからnju33/nowというイメージを作るというような意味です。名前はDockerHub上に作ったリポジトリと同じにします。

docker commit now nju33/now

できたら以下のコマンドで出てくるか確認します。

docker image ls
# REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
# nju33/now                  latest              xxxxxxxxxxxx        3 days ago          790MB

DockerHubへプッシュ

以下のようにイメージ名を指定してpushするだけです。

docker push nju33/now

使用例

# 一覧
docker run --rm nju33/now now ls
# static deploy
docker run -it --rm -v `pwd`/src:/root/src nju33/now now /root/src