Docker for WindowsとWindows Subsystem for Linux

Posted by 技術ブログ by Strawhat.net on Sunday, December 10, 2017

Windows Subsystem for LinuxではDockerコンテナを実行することができないので、 Docker for Windowsに接続する方法と、注意点についてのまとめ。

Docker for Windowsのインストールと設定

Docker for Windowsをインストールするためには、Windows 10 ProでHyper-Vを有効にしている必要がある。その上で、以下からインストールする。

Install Docker for Windows

インストールが完了したら、Dockerの設定画面を開き、Generalの’Expose daemon on tcp://localhost:2375 without TLS’をチェックする。

2017-12-10_23-34-51.png

WSLの有効化

WSLを有効にするために、Windows 10の64ビット版で、Fall Creators Updateを適用している必要がある。 その上で、管理者モードのPowerShellで以下を実行する。

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

WSLでのDockerのインストールと設定

Get Docker CE for Ubuntuに従って、Docker CEをインストールする。daemonもインストールされるが動作しない。

$ sudo apt-get update
$ sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    software-properties-common
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

$ sudo apt-get update
$ sudo apt-get install docker-ce

次に、.bashrcに以下を追加する。

export DOCKER_HOST=tcp://localhost:2375

これが有効になると、WSLのdockerコマンドで、Docker for Windowsで稼働するコンテナを操作できる。

$ sudo docker run hello-world

Dockerコンテナの操作の注意点

Windows上のフォルダをコンテナにマウントするときは、まずDocker for Windowsの設定画面を開き、Shared Drivesからマウントするドライブをチェックする。

2017-12-10_23-35-29.png

その上で、WSLのDdockerコマンドの-vオプションで以下のように/c/…とか/d/…とホスト側のパスを指定する。

docker run -it --rm -v /d//blog/pelican/blog.strawhat.net:/home/pelican registry.gitlab.com/.../pelican-docker make html

WSLでは/mntにドライブがマウントされているが、コンテナにマウントされるフォルダのパスを解釈するのはWindows上のDockerなので、あくまでWindowsから見えるパスを/で区切った形式で指定する必要がある。