Docker上でのGhost0.x系から1.5への不完全な更新

毎度ガバガバなイメージの更新をしています。毎回技術系のブログはunsweets.logに書こうかなあとかぼやきつつ、相変わらずしっかり書くつもりもないので、Ghostに関してはこちらに書いていこうと思います。今のところ。

さて、久々にブログを更新しようかなと思いデスクトップクライアントを起動したら、Ghostの更新がきてることに気が付きました。斜め読みして1が出たのか〜ふんふんと思ってよく見てみたら最新バージョンは1.5まで行ってました。まだ1.0.0が出てから23日ほどしか経ってないのにめちゃめちゃ早い。

例によってメジャーバージョンの変更ですので、Breaking changeと呼ばれる破壊的な変更があります。
今回のアップグレードではマウント先のパスが異なっており、うまくvolumes-fromオプションを使って移行することはできないようでした。

そもそも不完全とは

  • ユーザーアカウントのインポートが完全ではなく、一部プロフィールデータが吹っ飛んだため。

手順

  1. 元のコンテナの設定画面から記事をExport。おそらくjsonデータがダウンロードされる
  2. docker pull ghostとかで最新版Ghostを取得する
  3. docker run時にマウントするボリュームを指定する。Docker hubにあるGhost 1.x.xのとこのコマンドのように。
    $ docker run -d --name some-ghost -p 3001:2368 -v /path/to/ghost/blog:/var/lib/ghost/content ghost:1-alpine
    0.x系と違うのは、/var/lib/ghost/var/lib/ghost/content
    なったことですね。
  4. 元のコンテナはこの辺で一旦止めておく(マウントしてるディレクトリは消さないように)。
  5. 新しいGhostを起動したら一旦初期のセットアップを済ませてしまう(おそらくここがユーザーアカウントインポートに引っかかった原因)。
  6. 設定画面にいったら、LabsからImport contentを選択。Linux環境だからか知りませんがファイル選択ダイアログがなぜかzipにフィルタリングされてて最初「アレ?」ってなった。全てのファイルにして、先ほどダウンロードしたjsonを選択してアップロード。記事が取り込まれる(ここでインポート警告が出る)。
  7. 元コンテナのマウントディレクトリの/imagesデータを新しいコンテナの/imagesにコピー。
  8. 新しいコンテナの設定ファイルはコンテナ内部から設定するしかない模様。docker exec -it new_ghost bashとかなんかでコンテナ内に入ります。コンテナ内ではghostコマンドが使えるようですが、ここではghost config url <your domain>みたいな感じでconfig.production.jsonを書き換えることが出来ました。
  9. コンテナを再起動して適用されてたら終わり!

設定ファイルをマウントさせないのは何か直接編集されたくない理由でもあるのでしょうか。あんまり本格的に運用してるわけでもないので調べる気は起きず。そして相変わらずコンテナ内からメールが送れず。

その他の点に関しては特に問題ありませんでした。管理画面も洗練され、特に投稿画面はより書きやすくなりました。

適当にゲームの記事を書こうと思ったのですが、後日に回します。

参考にしたサイト