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!