質問: 下記のようなサーバーCIが実現できないか検討しています。 * ステージング環境にて(Docker) テスト後、Docker commitを行い、commitしたイメージをsaveまたはexportして gitにpush。jenkisで指定ブランチのpushを検知し、本番へDockerイメージを自動デプロイ。 上記で問題になるのがDockerイメージのサイズです。 CircleCIを使用すればDockerイメージの差分だけデプロイさせるような事が できるそうですが、セキュリティなどの制約によりCircleCIは使用できません。 Jenkinsなどを使用してDockerイメージの差分だけを本番環境などに オートデプロイさせる事はできないでしょうか? Dockerイメージの差分の取り方や差分のイメージへの反映などが分かりません。 それらしい事を明記しているWebサイトを一度見た覚えがあるのですが、 ブックマークなど取り忘れ、たどり着けなくなってしまいました。
回答: Dockerの差分イメージというと、layerと言われるもののことかと思います。これはDockerfileの各ステップごと、あるいは `docker commit` を行うことで生成されます。内部的な形式は環境によって異なるため、`docker save` で互換性の高い形式で書き出せるようになっています。 また、各 layer には固有のIDが振られており、Docker Hubなどの Docker registry に対して `docker push/pull` を行う際はこのIDを元に、転送先にない layer だけを転送するようになっています。 で、CircleCIとDockerを組み合わせたデプロイについては、CircleCIのドキュメントに記載があり、 * ソースコードリポジトリ上の Dockerfile を使い、`docker build` でイメージ作成、テスト実行 * できあがったイメージを `docker push` で自前の Docker registry に(差分)アップロード * デプロイ先から `docker pull` を実行し、上記のイメージを(差分)ダウンロード という手順を踏んでいるようです。 `docker` コマンドだけで差分書き出し・取り込みを行うことも原理上は可能ですが、現状のDockerには実装されていないようなので、Docker registryを用意するとよいかと思います。