mecobalamin’s diary

人間万事塞翁が馬

https://help.hatenablog.com/entry/developer-option

windows10 homeのwslにdockerをインストールする

5 October 2020 追記
誤字の修正
追記ここまで

1 June 2019追記
インストールをやり直したらうまくいかない操作があったので書き直した
追記ここまで

使いたいコマンドがDockerで配布されてたのでインストールしたい

Dockerとはなんぞや。。。
無償の「Docker for Windows」で手軽にLinuxコンテナを利用する (1/2):Windows管理者のためのDocker入門 - @IT
Windows Server 1709上でLinuxコンテナを動かす(lcow) - Qiita

残念ながら使用中のPCはwindows10 home。
Windows10 homeではhyper-Vが使えないが、
Docker ToolBox + VirtualBoxの組み合わせで
dockerを使えるようにしている人達がいる

windows 10 home で docker を導入するメモ - Qiita
Windows 10 Home のための、Docker Toolbox をインストールして WSL から使う方法 | ラボラジアン
Docker Toolboxのインストール:Windows編 - Qiita
WSLでDockerを使う - Qiita

ただしDocker ToolBoxはlegacy solutionなので
ある意味イレギュラーな使い方かも
そのうち使えなくなることも覚悟しておく

Legacy desktop solution. Docker Toolbox is for older Mac and Windows systems that do not meet the requirements of Docker Desktop for Mac and Docker Desktop for Windows. We recommend updating to the newer applications, if possible.

インストールの順序は

  1. Windows側にDocker Tool boxをインストールする
  2. WSL側にDockerをインストールする
  3. .profileを編集する
  4. 動作の確認

1. まずDocker Tool boxをインストールする
ダウンロードはここから。
v18.09.3が最新
Releases · docker/toolbox · GitHub
windowsはexeファイルでいいはず。。。

インストール先以外はデフォルトのままインストールした
Install Docker Toolbox on Windows | Docker Documentation

Step 2: Install Docker Toolbox
In this section, you install the Docker Toolbox software and several “helper” applications. The installation adds the following software to your machine:

Docker Client for Windows
Docker Toolbox management tool and ISO
Oracle VM VirtualBox
Git MSYS-git UNIX tools
If you have a previous version of VirtualBox installed, do not reinstall it with the Docker Toolbox installer. When prompted, uncheck it.

Docker Quickstart Terminalのショートカットをダブルクリックすると
ターミナルが起動する。インストール作業が始まる。
時間が掛かるがクジラが表示されたあとに
コマンドプロンプトが表示される

                        ##         .
                  ## ## ##        ==
               ## ## ## ## ##    ===
           /"""""""""""""""""\___/ ===
      ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ /  ===- ~~~
           \______ o           __/
             \    \         __/
              \____\_______/

docker is configured to use the default machine with IP 192.168.99.100
For help getting started, check out the docs at https://docs.docker.com

Start interactive shell

hogehoge@fugahuga MINGW64 /d/Docker Toolbox
$

ちなみにhogehogeはpcにログインしているユーザー名
fugafugaはpc名が表示されている

Docker Quickstart Terminalでバージョン確認のコマンドを実行
clientとserverの両方が表示されればまずはオッケー

$ docker version
Client:
 Version:           18.09.3
 API version:       1.39
 Go version:        go1.12
 Git commit:        774a1f4eee
 Built:             Mon Mar  4 10:36:44 2019
 OS/Arch:           windows/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          18.09.3
  API version:      1.39 (minimum version 1.12)
  Go version:       go1.10.8
  Git commit:       774a1f4
  Built:            Thu Feb 28 06:40:51 2019
  OS/Arch:          linux/amd64
  Experimental:     false


2. 次にwsl側からdockerのコマンドをインストールする

ここと同じ手順
WSL の docker client から、Docker for Windows の docker daemon を使う手順 | ラボラジアン
以下の順でコマンドを実行する

途中でgitからダウンロードするdocker-composeのバージョンはここに合わせた
Install Docker Compose | Docker Documentation

$ sudo apt update
$ sudo apt 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 update
$ sudo apt install docker-ce
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
$ sudo chmod a+rx /usr/local/bin/docker-compose
$ docker-compose --version
$ sudo curl -L https://raw.githubusercontent.com/docker/compose/$(docker-compose version --short)/contrib/completion/bash/docker-compose -o /etc/bash_completion.d/docker-compose
$ sudo chmod a+r /etc/bash_completion.d/docker-compose
$ source /etc/bash_completion.d/docker-compose

3. 次に$HOME/.profileの編集する
こちらを参考にした
Windows 10 Home のための、Docker Toolbox をインストールして WSL から使う方法 | ラボラジアン

まずはDocker Toolboxで

docker-machine.exe confing

を実行し、仮想マシンIPアドレスとポート番号を取得する

次に$HOME/.profileに仮想マシンIPアドレスとポート番号、及びをcertsのpathを追記した

export DOCKER_HOST="tcp://192.168.99.100:2376"
export DOCKER_CERT_PATH=/mnt/c/Users/hogehoge/.docker/machine/machines/default
export DOCKER_TLS_VERIFY=1

hogehogeは自分のユーザー名に書き換える
/mnt/c/Users/hogehoge/.docker/machine/certsにも秘密鍵?のファイルがあるがこっちではないっぽい
IPアドレスはDocker Quickstart Terminalでdocker-machine configを
実行して表示されているIPアドレスとポート番号を記入した
ググって探したサイトによってはポート番号が2376の場合と
2375の場合とがあって何なのかわからなかったが、
Docker Quickstart Terminalから取得できる
IPアドレスとポート番号が上記の値で、
こちらの環境ではこれで動くようになった

26 September 2020 追記
DOCKER_HOSTの確認は

$ docker-machine.exe env

で行う
実行結果は以下の通り

You can further specify your shell with either 'cmd' or 'powershell' with the --shell flag.
SET DOCKER_TLS_VERIFY=1
SET DOCKER_HOST=tcp://192.168.99.100:2376
SET DOCKER_CERT_PATH=C:\Users\hogehogehugahuga\.docker\machine\machines\default
SEZ DOCKER_MACHINE_NAME=default
SET COMPOSE_CONVERT_WINDOWS_PATHS=true
REM Run this command to configure your shell:
REM @FOR /f "tokens=*" %i IN ('docker-machine.exe env') DO @%i 

DOCKER_HOSTの値を$HOME/.profileに記入する

追記ここまで

追記したら.profileを読み込ませるためにターミナルを再起動する
再起動せずに

$ source .profile

でも動いた

インストールはここまで

4. 最後に動作の確認をする
再起動後wslのターミナルで

$ docker-machine.exe active

を実行すると動いている仮想マシンを確認できる
docker-machine.exeはwslのコマンドではないので拡張子が必要

wslのターミナルでバージョン確認のコマンドを実行する

$ docker version
Client:
 Version:           18.09.4
 API version:       1.39
 Go version:        go1.10.8
 Git commit:        d14af54266
 Built:             Wed Mar 27 18:35:44 2019
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          18.09.3
  API version:      1.39 (minimum version 1.12)
  Go version:       go1.10.8
  Git commit:       774a1f4
  Built:            Thu Feb 28 06:40:51 2019
  OS/Arch:          linux/amd64
  Experimental:     false

Docker Quickstart Terminalのときと同じかな

次にコンテナが動作するか確認する

$ docker run hello-world

実行後次のように表示されたらオッケーらしい

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

仮想マシンの開始・終了もwsl側からできる
仮想マシンの終了は

$ docker-machine.exe stop

起動は次のようにする

$ docker-machine.exe start

動いてるコンテナや仮想マシンがないか確認する
終了についてはこちらを参考にした
windows 10 home で docker を導入するメモ - Qiita

23 April 2020 追記
Oracle VirtualBoxVMのアップデートをしたらdocker runでコンテナを起動できなくなった
docker-machine.exe configで確認すると以下のメッセージ

Error running connection boilerplate: Error checking and/or regenerating the certs: There was an error validating certificates for host "192.168.99.101:2376": x509: certificate is valid for 192.168.99.100, not 192.168.99.101

このサイトを参考に修正できた
qiita.com

追記ここまで