LoginSignup
0
0

More than 3 years have passed since last update.

あまり勧められない Docker-in-Docker のススメ

Last updated at Posted at 2020-04-28
1 / 11

Docker in Docker とは?


Docker in Docker とは?

  • Docker コンテナ内に Docker 処理系そのものを収容
  • 内側の Docker の中にコンテナを立ち上げると… →外から見ると入れ子状になる

Docker in Docker の動作イメージ

docker-in-docker.png


ミニマムな構成

オフィシャルのイメージがあるのでそれを使う (タグの後ろに -dind と付いている)

docker-compose.yaml
---
version: "3.7"
services:
  docker:
    image: docker:19.03-dind
    privileged: true

ヤバいです、主にセキュリティー的な意味で。

    privileged: true

(ヤバすぎるので抜粋再掲)
詳しい説明は省略しますが、 Linux 内に隔離された空間を作るには相当の特権が必要なようです。


おしまい


んなわけあるか!!


色々いじってみる


ミニマム構成の問題点

  • あんまりメリットが見えない
  • 内側の Docker の通信路が TCP

    → docker build の時にコンテキストといって色々ファイルを Docker のデーモンに送りつけているのだが、その通信路と考えるといささか心もとない


メリットを出そう

隣接するコンテナからの指示で、内側の Docker にコンテナを建てられると便利そう。

docker-compose.yaml
---
version: "3.7"
services:
  docker:
    image: docker:19.03-dind
    privileged: true
  frontend:
    image: docker:latest
    depends_on:
      - docker

通信路の改善 ~よし、ならば UNIX ドメインソケットだ~

/var/run/docker.sock を隣接するコンテナと共有できれば… そういう時は volumes を使いましょう。

docker-compose.yaml
---
version: "3.7"
services:
  docker:
    image: docker:19.03-dind
    privileged: true
    volumes:
      - run:/run:rw  # /var/run は /run へのシンボリックリンクなので… 以下同様
    environment:
      - DOCKER_TLS_CERTDIR=
  frontend:
    image: docker:latest
    volumes:
      - run:/run:rw
    depends_on:
      - docker
    environment:
      - DOCKER_HOST=unix:///var/run/docker.sock

volumes:
  run:
    # tmpfs-as-a-volume: https://stackoverflow.com/a/45759927
    driver_opts:
      type: tmpfs
      device: tmpfs
      o: size=1M,mode=0755,uid=0,gid=0
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0