Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Docker マトリョーシカ

Tori Hara
September 14, 2015

Docker マトリョーシカ

あなたもわたしも Docker in Docker.

続編あり〼 https://toris.io/2015/12/we-should-think-twice-about-using-docker-in-docker/

Tori Hara

September 14, 2015
Tweet

More Decks by Tori Hara

Other Decks in Technology

Transcript

  1. Docker マトリョーシカ
    Yasuhiro HARA
    JAWS-UGコンテナ支部 #2 LT @ 目黒
    #jawsug_ct

    View full-size slide

  2. Yasuhiro HARA ♥
    / toricls

    View full-size slide

  3. LT の内容
    Docker + CI

    View full-size slide

  4. 例として Jenkins が
    出てきますが
    他の CI や開発環境でも
    (たぶん)使える話

    View full-size slide

  5. ࣗલ؅ཧͷ CI ͰΑ͘ࠔΔ͜ͱ

    View full-size slide

  6. たくさんのリポジトリ

    たくさんの依存関係

    View full-size slide

  7. Docker

    が解決してくれるかも

    View full-size slide

  8. master
    slave
    ruby 2.0
    slave
    ruby 2.1

    View full-size slide

  9. - evarga/jenkins-slave (Docker Hub)
    https://hub.docker.com/r/evarga/jenkins-slave/
    - Jenkins Docker Plugin
    https://wiki.jenkins-ci.org/display/JENKINS/Docker+Plugin
    参考: Jenkins Slave in Docker

    View full-size slide

  10. となると今度は
    master
    slave
    ruby 2.0
    slave
    ruby 2.1
    面倒な依存管理から
    解放された!

    View full-size slide

  11. この中で docker build とか
    docker push とかしたい
    slave
    ruby 2.0
    master
    slave
    ruby 2.1

    View full-size slide

  12. slave
    ruby 2.0
    依存関係がキレイに管理された環境でテストを
    ぐりぐり回して docker build して出来上がっ
    たイメージを docker push したら Web フック
    でデプロイが走ってうふふふふ…

    View full-size slide

  13. Docker コンテナの中で docker を
    インストールして試してみた
    ダメポヨ

    View full-size slide

  14. やれます

    View full-size slide

  15. - jpetazzo/dind (GitHub)
    https://github.com/jpetazzo/dind
    - Docker can now run within Docker | Docker
    Blog
    http://blog.docker.com/2013/09/docker-can-now-run-
    within-docker/
    参考: Docker in Docker
    いろいろ工夫されてるので
    見てみると面白いかも

    View full-size slide

  16. --privileged
    - Docker コンテナの中からホストマシンの全デバイスにアクセスできる特権モード
    - SELinux + Docker でマウントしたディレクトリへのアクセスの文脈でよく出てくる
    - 実は Docker 0.9 から用意されているオプション
    - 製品/サービスの本番環境とかでは使わなくて済むように環境が構築される方が無難
    イケてる docker run オプション

    View full-size slide

  17. D-in-D を試してみた
    [email protected]:~/$ docker run -it --privileged jpetazzo/dind:latest
    root@a227639b9373:/# docker run -it --privileged jpetazzo/dind:latest
    Unable to find image 'jpetazzo/dind:latest' locally
    ~ 省略 ~
    root@3352505cddfe:/# docker run -it --privileged jpetazzo/dind:latest
    Unable to find image 'jpetazzo/dind:latest' locally
    ~ 省略 ~
    root@5ec98d5d8b58:/# exit
    root@3352505cddfe:/# exit
    root@a227639b9373:/# exit
    [email protected]:~/$

    View full-size slide

  18. D-in-D で注意したいこと
    docker rm しても /var/lib/docker にデータが
    残るため、ディスク使用量が増え続ける
    → chadoe/docker-cleanup-volumes とか使う
    https://github.com/chadoe/docker-cleanup-volumes

    View full-size slide

  19. - tehranian/dind-jenkins-slave (GitHub)
    https://github.com/tehranian/dind-jenkins-slave
    参考: D-in-D for Jenkins
    docker コマンドが実行可能な
    Dockerized Jenkins スレーブを
    サクッと動かせるみたいです

    View full-size slide

  20. - toricls/dind-gitlab-ci (GitHub)
    https://github.com/toricls/dind-gitlab-ci
    参考: D-in-D for GitLab CI
    GitLab CI で簡単に
    Docker in Docker を
    実現できます

    View full-size slide


  21. Thank you :)

    View full-size slide