21478


下記のようなサーバーCIが実現できないか検討しています。

  * ステージング環境にて(Docker)  
テスト後、Docker commitを行い、commitしたイメージをsaveまたはexportして  
gitにpush。jenkisで指定ブランチのpushを検知し、本番へDockerイメージを自動デプロイ。

上記で問題になるのがDockerイメージのサイズです。  
CircleCIを使用すればDockerイメージの差分だけデプロイさせるような事が  
できるそうですが、セキュリティなどの制約によりCircleCIは使用できません。

Jenkinsなどを使用してDockerイメージの差分だけを本番環境などに  
オートデプロイさせる事はできないでしょうか？

Dockerイメージの差分の取り方や差分のイメージへの反映などが分かりません。

それらしい事を明記しているWebサイトを一度見た覚えがあるのですが、  
ブックマークなど取り忘れ、たどり着けなくなってしまいました。


CC BY-SA 3.0
2016-01-27T14:32:55.817
21399
2016-01-29T11:47:36.270
2016-01-28T02:59:04.653
10712
10712
question
docker jenkins
dockerの差分イメージによるサーバーCI


Dockerの差分イメージというと、layerと言われるもののことかと思います。これはDockerfileの各ステップごと、あるいは `docker
commit` を行うことで生成されます。内部的な形式は環境によって異なるため、`docker save`
で互換性の高い形式で書き出せるようになっています。

<http://tanksuzuki.com/post/docker-image-filesystem/>

また、各 layer には固有のIDが振られており、Docker Hubなどの Docker registry に対して `docker
push/pull` を行う際はこのIDを元に、転送先にない layer だけを転送するようになっています。

<http://enakai00.hatenablog.com/entry/20140802/1406958412>

で、CircleCIとDockerを組み合わせたデプロイについては、[CircleCIのドキュメント](https://circleci.com/docs/docker)に記載があり、

  * ソースコードリポジトリ上の Dockerfile を使い、`docker build` でイメージ作成、テスト実行
  * できあがったイメージを `docker push` で自前の Docker registry に（差分）アップロード
  * デプロイ先から `docker pull` を実行し、上記のイメージを（差分）ダウンロード

という手順を踏んでいるようです。

`docker` コマンドだけで差分書き出し・取り込みを行うことも原理上は可能ですが、現状のDockerには実装されていないようなので、Docker
registryを用意するとよいかと思います。


CC BY-SA 3.0
2016-01-29T11:47:36.270
21478
2016-01-29T11:47:36.270
8000
21399
answer