Windows10のWindows Subsystem for LinuxでDockerを使う
何かリンクされたみたいと思ったら、こんな時代になってるそうでした。
2018/07/06 WSL上でDocker Engineが動くようになっていたっぽいという話 - Qiita
元ネタ docker is running natively on wsl reddit
なんと、WSL から直接 docker 動いた! でも、ちゃんと使おうとするとまだまだ制限がきついかな。(上記 reddit に書いてあるのと同じ現象で詰まった)やっぱり、まだまだ辛いですね。
以下、元々の記事です。
Windows10のFall Creators Updateが一般提供開始され、Windows 10 Homeでも WSL (Windows Subsystem for Linux) で Ubuntu (他にもあるけど) を使えるようになりました。持っている Atom ベースの UMPC で、Ubuntu の Docker を動かしたいと思っていたのですが、VirtualBox に入れた Ubuntu では重くてどうしたものかと考えていました。
そこで、WSL があるのですが、docker入れてもdocker serverが動かない。Windows 10 Pro なら、Hyper-Vを有効化してDocker for Windows入れれば、WSLからも使えるのですが、ここは Home で何とかしたいです。
ということで、VirtualBoxに入れたUbuntuをDocker Serverとしてヘッドレスモードで動かして、WSLから使うことにしてみました。
#1. VirtualBoxのUbuntuにDockerをインストール
まずVirtualBoxにUbuntuをインストールする時点で、ネットワークアダプター#2にホストオンリーアダプター
を追加して使えるようにしておきます。IPアドレスを固定化しておくと良いかもです。
これには、Docker公式の手順でリポジトリを設定してdocker-ce
をインストールします。
前提ソフトウェアのインストールができていれば。
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
としてリポジトリを設定して、docker-ce
をインストールします。
$ sudo apt update
$ sudo apt install -y docker-ce
#2. docker serverの待ち受け
docker serverがWSLからのリクエストを受け付けるように設定しておきます。
$ cd /etc/systemd/system/multi-user.target.wants
$ sudo vi docker.service
ExecStart=/usr/bin/docker -H fd:// -H tcp://192.168.56.xxx:2375
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker
ここでは、ホストオンリーアダプター
のIPアドレスとポート番号を2375
にしてみました。
3. WSLにdockerをインストール
VirtualBoxのUbuntuと同様にしてdocker-ce
をインストールします。この時点では、docker version
してもクライアント情報しか表示されません。
VirtualBoxのUbuntuで稼働しているdocker server
に接続するために、.bashrc
に環境変数を追加します。
$ vi .bashrc
export DOCKER_HOST='tcp://192.168.56.xxx:2375'
これで無事に使えるようになりました。
#4 docker server の起動/停止
VirtualBoxを使用していますから、スタートアップフォルダにVBoxManage
コマンドでインスタンスを起動するショートカットを作成してみました。もちろん、ヘッドレスモードで起動しています。
Windowsのログインで無事に自動起動できるようになったのですが、シャットダウンする際に一々確認メッセージが出ています。もともと、非力な UMPC で動かすつもりですから使いたい時にだけ起動していれば十分です。
そこで、WSL側からVBoxManage
コマンドを使って起動/停止することにしました。起動は、こうなります。
`/mnt/c/Program Files/Oracle/VirtualBox/VBoxManage.exe' startvm Ubuntu --type headless
ここではUbuntu
としていますが、VirtualBoxに作成した仮想マシン名になります。
停止は、こんな感じです。
`/mnt/c/Program Files/Oracle/VirtualBox/VBoxManage.exe` controlvm Ubuntu acpipowerbutton
既に起動済みかどうかも確認できます。
`/mnt/c/Program Files/Oracle/VirtualBox/VBoxManage.exe` list runningvms
実際にはalias切って使うつもりですけど、とりあえずは、これで十分かな!