あなたもわたしも Docker in Docker.
続編あり〼 https://toris.io/2015/12/we-should-think-twice-about-using-docker-in-docker/
Docker マトリョーシカYasuhiro HARAJAWS-UGコンテナ支部 #2 LT @ 目黒#jawsug_ct
View Slide
Yasuhiro HARA ♥/ toricls
LT の内容Docker + CI
例として Jenkins が出てきますが他の CI や開発環境でも(たぶん)使える話
ࣗલཧͷ CI ͰΑ͘ࠔΔ͜ͱ
たくさんのリポジトリとたくさんの依存関係
Dockerが解決してくれるかも
masterslaveruby 2.0slaveruby 2.1
- evarga/jenkins-slave (Docker Hub)https://hub.docker.com/r/evarga/jenkins-slave/- Jenkins Docker Pluginhttps://wiki.jenkins-ci.org/display/JENKINS/Docker+Plugin参考: Jenkins Slave in Docker
となると今度はmasterslaveruby 2.0slaveruby 2.1面倒な依存管理から解放された!
この中で docker build とかdocker push とかしたいslaveruby 2.0masterslaveruby 2.1
slaveruby 2.0依存関係がキレイに管理された環境でテストをぐりぐり回して docker build して出来上がったイメージを docker push したら Web フックでデプロイが走ってうふふふふ…
Docker コンテナの中で docker をインストールして試してみたダメポヨ
やれます
- jpetazzo/dind (GitHub)https://github.com/jpetazzo/dind- Docker can now run within Docker | DockerBloghttp://blog.docker.com/2013/09/docker-can-now-run-within-docker/参考: Docker in Dockerいろいろ工夫されてるので見てみると面白いかも
--privileged- Docker コンテナの中からホストマシンの全デバイスにアクセスできる特権モード- SELinux + Docker でマウントしたディレクトリへのアクセスの文脈でよく出てくる- 実は Docker 0.9 から用意されているオプション- 製品/サービスの本番環境とかでは使わなくて済むように環境が構築される方が無難イケてる docker run オプション
D-in-D を試してみた[email protected]:~/$ docker run -it --privileged jpetazzo/dind:latest[email protected]:/# docker run -it --privileged jpetazzo/dind:latestUnable to find image 'jpetazzo/dind:latest' locally~ 省略 ~[email protected]:/# docker run -it --privileged jpetazzo/dind:latestUnable to find image 'jpetazzo/dind:latest' locally~ 省略 ~[email protected]:/# exit[email protected]:/# exit[email protected]:/# exit[email protected]:~/$
D-in-D で注意したいことdocker rm しても /var/lib/docker にデータが残るため、ディスク使用量が増え続ける→ chadoe/docker-cleanup-volumes とか使うhttps://github.com/chadoe/docker-cleanup-volumes
- tehranian/dind-jenkins-slave (GitHub)https://github.com/tehranian/dind-jenkins-slave参考: D-in-D for Jenkinsdocker コマンドが実行可能なDockerized Jenkins スレーブをサクッと動かせるみたいです
- toricls/dind-gitlab-ci (GitHub)https://github.com/toricls/dind-gitlab-ci参考: D-in-D for GitLab CIGitLab CI で簡単にDocker in Docker を実現できます
Thank you :)