#gocontainer-upというツールを書いたのでご紹介。背景このブログはghostというブログエンジンで動いています。動作環境としてDockerを使用していて、Ghostの公式イメージを使用しています。過去の経緯から、単体のDockerコンテナで動作させており、永続データはDockerボリュームとしてマウントしている形です。ComposeやKubernetesなどのオーケストレーションツールを使っている場合、コンテナのバージョンアップは比較的簡単に行うことができます。upで、新しいイメージで作成したコンテナに差し替えることができます。Dockerを単体で使っている場合、基本的には手作業で差し替えを行う必要があります。Ghostコンテナの更新時は手作業でBlue-Greenアップグレードを行ってきたのですが、Ghostはかなりアップデートのペースが速く、毎度コンテナを差し替えるのが面倒になってきました。インストールGo環境がある人Go言語の環境がすでにある人は、以下のコマンドで使用できるようになります。github.com/nasa9084/container-upそれ以外の人Go言語の環境がない人は、Releasesページから自分のOSに併せてバイナリをダウンロード、パスを通してください。macos向け、それぞれamd64版のバイナリを用意してあります。7)のみ行っています。これら以外の環境の人は、予めdepをインストールした上で以下のコマンドでコンパイルしてください。main.goコンパイルしたら、任意の場所にバイナリを移動し、パスを通してください。基本的な使い方は、引数にコンテナ名またはコンテナIDを渡すだけです。CONTAINER_NAME与えられたコンテナと同じ名称のイメージを使用して、ボリュームやネットワークなどの設定はそのままに新しいコンテナを作成し、差し替えます。pullした後にこのコマンドを実行することで、最新のイメージから作られたコンテナに差し替わるということです。もとのコンテナは--rmオプションをつけて起動していた場合を除いて、_oldContainerというサフィックスが付いた状態でstopします。なにか問題があった場合は、このコンテナに戻すと良いでしょう。元のコンテナが必要ない場合は、--rmオプションをつけると、差し替え時に削除します。CONTAINER_NAME:latestではないような、バージョンタグが付いたイメージを使用していて、新しいバージョンのイメージを使いたい場合などのため、新しいイメージ名を指定して実行することもできます。CONTAINER_NAMEこの場合、差し替えるコンテナは指定されたイメージで作成されます。これらのコマンドでは、ボリュームのマウント設定は引き継ぎますが、それ以外のファイルはすべて新しいイメージに差し替わります。ボリュームマウントしているところ以外に引き継ぎたいファイルなどがある場合[1]、-fオプションにファイルパスを指定することで新しいコンテナにコピーすることができます。CONTAINER_NAME-fオプションは複数指定することができますので、複数のファイルをコピーしたい場合には複数回指定してください。CONTAINER_NAME現状実装されている機能は以上です。ヘルプは-hオプションをつけることで見られます。