Help us understand the problem. What is going on with this article?

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!

参考

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした