70
66

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

WSLでDocker for windowsを使うッ!!!

Last updated at Posted at 2019-07-03

初めに

この記事はッ!!
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を呼び出します。

  1. 通知領域から、dockerのアイコンを右クリックして、Settingを選択
  2. Generalのexpose deamon on~~のチェックを入れます。
    image.png
    これで、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
  1. WSLの.bashrcと.bash_profileに、以下を追加します。
.bashrc
echo "export DOCKER_HOST=tcp://localhost:2375" >> ~/.bashrc && source ~/.bashrc
.bash_profile
if [[ -f ~/.bashrc ]] ; then
    . ~/.bashrc
fi

これで、WSL上からDocker for Windowsを使うことができます。

Docker for windowsで、Cドライブをマウントする。

  1. 通知領域から、dockerのアイコンを右クリックして、Settingを選択
  2. Shared DrivesでCのチェックを入れます。
    image.png
  3. Windowsのユーザー名とパスワードの入力を求められるので、入力します。
  4. セキュリティソフトのファイアウォールにブロックされるので、通信を許可してもらいます。
    image.png
    具体的な手順は、「docker for windows shared drives ファイアウォール」で、ググるといくつか出てきたので、リンクを張り付けておきます。

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ディレクトリのマウント位置を一致させれば、問題は解決します。
具体的には、下記のように編集します。
標準のマウントポイントを/に変更

/etc/wsl.conf
[automount]
root = "/"  

反映しないときは

2019/12/06 追記
以下のコマンドを管理者権限で実行して、WSLを再起動する。

net stop LxssManager
net start LxssManager

参考資料

70
66
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
70
66

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?