Docker
Windows10

Windows Subsystem for LinuxからDockerを使う

More than 1 year has passed since last update.

Bash on WindowsことWSLはUbuntuの強力な開発ツールチェインをWindows10で利用できるとてもイカした仕組みです。

以前、こんな記事も書きました。

ただ、Docker動かないのは不便だなーと思ってたのですが、試してみたらDocker Toolboxで立ち上げてるDockerに繋げることは出来ました。

手順はいたって簡単で下記の通り。

1 WSLにDockerをインストール

$ 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 apt-key fingerprint 0EBFCD88
$ 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

2 Windows上のDockerMachineでboot2dockerを立ち上げる

                       ##         .

## ## ## ==
## ## ## ## ## ===
/"""""""""""""""""\___/ ===
~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ / ===- ~~~
\______ o __/
\ \ __/
\____\_______/
_ _ ____ _ _
| |__ ___ ___ | |_|___
\ __| | ___ ___| | _____ _ __
| '_
\ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__| < __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
$ docker-machine.exe config
--tlsverify
--tlscacert="C:\\Users\\koduki\\.docker\\machine\\certs\\ca.pem"
--tlscert="C:\\Users\\koduki\\.docker\\machine\\certs\\cert.pem"
--tlskey="C:\\Users\\koduki\\.docker\\machine\\certs\\key.pem"
-H=tcp://192.168.99.100:2376

3 WSLでDOCKER_HOSTとTSLの設定を指定して起動

% docker -H tcp://192.168.99.100:2376 --tlsverify \

--tlscacert /mnt/c/Users/$USER/.docker/machine/machines/default/ca.pem \
--tlscert /mnt/c/Users/$USER/.docker/machine/machines/default/cert.pem \
--tlskey /mnt/c/Users/$USER/.docker/machine/machines/default/key.pem \
ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

これだけです。実に簡単ですね。

実は前にもネットワーク的には繋がるからWindows側からつながるんじゃね? と普通に

export DOCKER_HOST=tcp://192.168.99.100:2376

export DOCKER_MACHINE_NAME=default
export DOCKER_TLS_VERIFY=1
export DOCKER_CERT_PATH=$HOME/.docker/machine/machines/default/

としてたのですが、何故か下記のようにローカルのデーモンを見に行ってエラーになるので放置してました。

$ docker ps

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

今回は直接オプションで指定したのでうまく動いてるようです。

とはいえ、毎回このように書くのは長すぎるので下記のようにaliasに追加するが吉。

alias docker="docker -H tcp://192.168.99.100:2376 --tlsverify --tlscacert /home/$USER/.docker/machine/machines/default/ca.pem --tlscert /home/$USER/.docker/machine/machines/default/cert.pem --tlskey /home/$USER/.docker/machine/certs/key.pem"

これで普通のDockerコマンドと同様に使えます。

ちなみにdocker-machineもgenerics-driverを使う事でSSH経由で指定が可能です。

$ docker-machine create --driver generic \ 

--generic-ssh-user docker --generic-ip-address=192.168.99.100 \
--generic-ssh-key /mnt/c/Users/$USER/.docker/machine/machines/default/id_rsa
default

ただ、TSLエラーになるので解決するにはdocker-machine regenerate-certsを使う必要があります。

それをすると今度はWindows側でアクセスできなくなって不便なので、まあDockerMchineの事はWindows側に任せるのが良い気がします。


まとめ

これでWindowsでも快適なBash/Dockerライフが満喫できそうです。

それWindowsじゃなくて良くね? と聞こえてきそうですが聞こえなーい。

それではHappy Hacking!


参考