docker in docker の起動方法について

docker in docker(dind)を試したのでそのやり方について記載します。
CI上でdocker-composeを起動させたくて、試したのですが結果的に利用しなかったのですが、折角試したので備忘として書いておこうと思います。

Docker in Docker とは

Dockerコンテナ上でDockerを起動させることです。厳密にはホストのDockerデーモンを共有しているのですが、見え方としてはDockerコンテナ上にDockerコンテナを起動しているように見えます。

起動方法

起動するにあっては、バックグラウンドで起動したあとexecオプションでログインする必要があります。

docker run --privileged --name dind -d docker:dind
docker exec -it dind sh

dockerコンテナ上でdocker infoする結果が帰ってくるので、dockerが起動していることが確認できるかと思います。

/ # docker info
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 18.06.1-ce
Storage Driver: overlay2
Backing Filesystem: extfs
Supports d_type: true
Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 468a545b9edcd5932818eb9de8e72413e616e86e
runc version: 69663f0bd4b60df09991c08812a60108003fa340
init version: fec3683
Security Options:
seccomp
Profile: default
Kernel Version: 4.14.47-56.37.amzn1.x86_64
Operating System: Alpine Linux v3.8 (containerized)
OSType: linux
Architecture: x86_64
CPUs: 1
Total Memory: 987.5MiB
Name: e5ae24b1cd02
ID: B5RK:GK6S:OQR5:C4EZ:WRXE:4ZFZ:2BZD:CF3O:ROJ4:4UNW:FTYS:2T3V
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false

WARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-ip6tables is disabled

フォアグラウンド実行では起動できない。

ちなみにバックグラウンド実行せずにdocker runした場合ではdocker infoに失敗します。

# docker run --privileged -it docker:dind sh

エラーになる

# docker info
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

以上