LoginSignup
9
14

More than 1 year has passed since last update.

Docker for Windowsでコンテナ内でDocker(DooD)を使う

Last updated at Posted at 2018-08-20

概要

Docker for WindowsでDocker outside of Dockerができないと勝手に思っていましたが、
以下の方法で普通に使えることがわかったので、ご紹介します

方法

一般的に有名な方法として以下の二つがあります
ずっとWindows環境では使えないと思っていましたが、どちらでも使えます

  • docker in docker
  • コンテナにホストのdocker.sockをマウントする(Docker outside of Docker)今回は

参考:

docker.sockのマウント

/var/run/docker.sockをコンテナにマウントするが、Windows環境ではどうやら自動的にDocker Machineのパスとして判定してくれるようです
ホストのdocker.sockを共有しているので、コンテナ内で実行している各種操作はホストにも影響します
なので、ビルド専用ホストならそこまで問題ないと思いますが、外部公開しているようなホストでは取り扱い注意!!

サンプルとして以下のようにDockerをインスコするDockerfileを使用します
ホストのdocker.sockを使用するため、docker deamonは起動しない(クライアントのみ使用)

Dockerfile
FROM ubuntu:latest

RUN apt-get update \
    && apt-get -y upgrade \
    && apt-get -y install docker.io

# build dockerfile
> docker build -t mydind ./

# run docker container
> docker run -v /var/run/docker.sock:/var/run/docker.sock -it mydind /bin/bash

コンテナ内でdockerコマンドを実行してみるとホストマシンのリソースを確認することができますし、操作もできます

root@xxxx> docker image ls
root@xxxx> docker container ls

docker-composeで使う時

docker-composeでは/var/run/docker.sockのパス解決ができないため、以下の環境変数を追加する必要があります

powershell
# 一時利用
> $Env:COMPOSE_CONVERT_WINDOWS_PATHS=1

docker in docker

コンテナ起動時に--privilegedが必要になります
特権モードで実行するため、取り扱いご注意

> docker run --privileged -d docker:dind

前述のdocker.sockのようにホストが管理しているDockerリソースは見えませんし、操作することもできません


> docker info
> docker images
9
14
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
9
14