DooDについて
Docker outside of Docker の略、Dockerコンテナ内からDockerを使う
コンテナ内からdockerを使うプラクティスは、DinD, DooDと2通りあるらしいが、今回はDooDを試す。
docker install
以下を参照してインストールする。
DooDする場合は、Dockerfileに以下を記載するとよい。
sudo apt-get update -y
sudo apt-get install ca-certificates curl gnupg lsb-release -y
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
DooD のために sock mount する
DooD のためにdocker run
時に以下のオプションを付与してdockerを起動させる
-v /var/run/docker.sock:/var/run/docker.sock
の部分がポイント。(container_nameは任意のDockerコンテナ名)
docker run -it --rm -v /var/run/docker.sock:/var/run/docker.sock container_name /bin/bash
起動させた後、以下のコマンドによりDooDできているかどうか確かめる。
ホスト側と同じ結果が出力されればOK
docker exec -it container_name bash -c "docker images"
以下は実際の運用では避けた方がいい
dockerインストール済のホスト環境の/usr/bin
をDooD時用のdocker起動時にmountする事でdockerコマンド自体は確認可能と思うが、
そもそも/usr/binは他バイナリも含まれているので、実環境での運用は避けた方がよい。
docker run -it --rm -v /var/run/docker.sock:/var/run/docker.sock -v /usr/bin:/usr/bin container_name /bin/bash
参考
コンテナからコンテナを操作する
Docker in Docker、Docker outside of Docker(ソケットファイルの共有)を試す
Docker Engine インストール(Ubuntu 向け)