LoginSignup
36
41

More than 5 years have passed since last update.

Windows Subsystem for LinuxからDockerを使う

Posted at

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!

参考

36
41
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
36
41