初めに
この記事はッ!!
bashが使いたい系男子がッ!!
WSLでDocker for Windowsを設定する記事であるッ!!(ババン
ずっとこのノリだと疲れるので、
以降は、普通に行きますね。
前提
- Docker for Windowsがインストール済みである。
- Windows Subsystem for Linux(WSL)が使える状態である。
環境
WSL(Ubuntu 18.04 LTS)
ツール名 | バージョン |
---|---|
docker | 18.09.7 |
docker-compose | 1.24.0 |
Windows 10 (version 1809)
ツール名 | バージョン |
---|---|
docker desktop community | 2.0.0.3 |
docker machine | 0.16.1 |
docker engine | 18.09.2 |
使う目的
なんで、わざわざWSLを使うのか。WindowsでBash使いたいじゃん??
後、ネットだとUnix系の情報が多いので。そっちの方が楽かなと。
WSLからDocker for Windowsのデーモンを呼び出す。
WSL環境だけで、Dockerを動かす手法は存在するのですが、
まだ、最新のDockerが動かなかったり、WSLを落とすと死ぬとか
ひと手間必要な印象がありますので、WSLのDocker ClientからDockerを呼び出します。
- 通知領域から、dockerのアイコンを右クリックして、Settingを選択
- Generalのexpose deamon on~~のチェックを入れます。
これで、Docker for WindowsのDocker DeamonがTCP経由でアクセスできるようになりました。(without TLSって書いてあるから、TLS利用でできるのかも)
Convertfrom-Json (Invoke-WebRequest http://localhost:2375/version).content
Platform : @{Name=Docker Engine - Community}
Components : {@{Name=Engine; Version=18.09.2; Details=}}
Version : 18.09.2
ApiVersion : 1.39
MinAPIVersion : 1.12
GitCommit : 6247962
GoVersion : go1.10.6
Os : linux
Arch : amd64
KernelVersion : 4.9.125-linuxkit
BuildTime : 2019-02-10T04:13:06.000000000+00:00
- WSLの.bashrcと.bash_profileに、以下を追加します。
echo "export DOCKER_HOST=tcp://localhost:2375" >> ~/.bashrc && source ~/.bashrc
if [[ -f ~/.bashrc ]] ; then
. ~/.bashrc
fi
これで、WSL上からDocker for Windowsを使うことができます。
Docker for windowsで、Cドライブをマウントする。
- 通知領域から、dockerのアイコンを右クリックして、Settingを選択
- Shared DrivesでCのチェックを入れます。
- Windowsのユーザー名とパスワードの入力を求められるので、入力します。
- セキュリティソフトのファイアウォールにブロックされるので、通信を許可してもらいます。
具体的な手順は、「docker for windows shared drives ファイアウォール」で、ググるといくつか出てきたので、リンクを張り付けておきます。
- Windows10 で、Dockerで環境作る際の ESETのファイアーウォール設定
- [Docker for WindowsのShared Drives設定(Kaspersky Firewall設定)] (https://qiita.com/spiderx_jp/items/fa8d5ffe298759df9e06)
- DockerのShared Driveがノートンのファイアウォールに引っかからないようにする
WSLのマウント先を変更する
Windowsで直接使うのなら、上記の設定まで行えば完了です。
しかし、WSLで使うなら、Windowsのディレクトリがマウントされない問題があるので、ひと手間必要です。(実際は、絶対パスでWindows風のパスを書けば、マウントできる)
Windowsのディレクトリがマウントされない問題
以下のように、DockerのVolume設定が相対パスで指定されていると、
WSLのDockerクライアントまたはDocker-Composeで、コンテナを起動させると
/mnt/c
以下がマウントされない問題があります。
これは、Docker for Windowsが動いているHyper-V上のLinuxとWSLのWindowsのドライブのマウント先が異なることによって起きる問題です。
(Hyper-VのLinuxでは、Cドライブが、/cにマウント
WSLだと、Cドライブが/mnt/cにマウントされる。)
WSLのDocker-Composeはこのマウント先の相違を吸収せずに、そのままDockerに渡してしまうので、空のディレクトリがマウントされてしまうのです。
(Hyper-V上では、/mnt/cにCドライブがマウントされていないため空になる)
そのため、Windowsディレクトリのマウント位置を一致させれば、問題は解決します。
具体的には、下記のように編集します。
標準のマウントポイントを/
に変更
[automount]
root = "/"
反映しないときは
2019/12/06 追記
以下のコマンドを管理者権限で実行して、WSLを再起動する。
net stop LxssManager
net start LxssManager