Docker for Windowsは非常に便利なのですが、Hyper-V前提になっていることが多くの足かせを生んでいます。Hyper-VはCPUの仮想化支援機能を占有してしまうため、VMwareなどの他の仮想化ソフトウェアや、Intel HAXMを利用したAndroid Emulatorと同時に動かすことができません。
もちろん、切り替えれば(簡単に切り替える方法がありますが)良いのですが、PCの再起動が必要ですし、同時に動かしたい事もままあるはずです。
私も絶賛困っていたのですが、このツイートを見てDockerをHyper-Vなしで動かせることを知りました。
ワオ。Windows 10 Home Edition でも WSL から docker 動いちゃった。最高かよ。 pic.twitter.com/SmVqeHsgH0
— mattn (@mattn_jp) 2018年7月8日
実際やってみたところ、少々はまり処もあったのでここに具体的な設定方法をまとめておきます。ただし、docker-composeはネットワーク絡みで、まだ正しく動かないようです。
参考文献:https://www.reddit.com/r/bashonubuntuonwindows/comments/8cvr27/docker_is_running_natively_on_wsl/
- 環境
- Ubuntuのインストール
- Ubuntuを管理者で起動する
- Dockerのインストールと環境設定
- Dockerを起動する
- Dockerの動作確認
- Ubuntu起動時にDockerが起動している状態にする
環境
- Windows 10 Pro 1803(Home Editionでも動作するはずです)
- Ubuntu 16.04 (18.04は試しましたが同じ方法では動きませんでした)
Ubuntuのインストール
Windows StoreでUbuntuを検索し、16.04をインストールします。
Ubuntuを管理者で起動する
管理者で起動する事は必須なので忘れないようにしましょう。
Dockerのインストールと環境設定
次のコマンドを実行してDockerをインストールして、環境を構築します。
sudo apt update sudo apt upgrade -y sudo apt install -y docker.io sudo cgroupfs-mount sudo usermod -aG docker $USER sudo service docker start
ここで一旦WSLを再起動します。再起動しないと以下のエラーがでて正しく動作しません(でした、私の環境では)。
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
なんらかのプロセスを再起動すればよい気もしますが、私には特定不能なので再起動します。
Dockerを起動する
あらためてUbuntuを起動しますが、管理者権限で起動することを忘れないようにしましょう。
Ubuntuが起動したら、Dockerを起動します。
sudo cgroupfs-mount && sudo service docker start
都度cgroupfs-mountが必要になりますので気を付けてください。これで準備は完了です。実際に動作を確認してみましょう。
Dockerの動作確認
Hello, World.
まずはHello, Worldから。次のようにコマンドを実行します。
sudo docker run --rm hello-world
つぎのような実行結果が表示されれば成功です。
Webサーバー
つづいて、次のように実行してみましょう。
sudo docker run -it --rm -p 8080:80 nginx:latest
そしてブラウザを開き、http://localhost:8080を開いてみましょう。つぎのように表示されたら成功です。
Ubuntu起動時にDockerが起動している状態にする
~/.bashrcを編集する
~/.bashrcの文末に次の1行を追加します
cgroupfs-mount
起動時にDockerが自動起動するよう設定する
次のコマンドを実行します。
sudo systemctl enable docker
ログインして、次のコマンドを実行してみれば、設定が正しく行ったかどうかわかります。
sudo service docker status
docker-composeがまだ使えないなど、限定的ではありますがなんとなく将来に期待が持てそうですね。
以上です。