本サイトでは、アフィリエイト広告およびGoogleアドセンスを利用しています。

Hyper-V を使わずに Windows で Docker

普段から VMware Workstation や Player を使っているため、 Hyper-V による Docker は自分にとって都合が悪かったりします。でも、 Docker による便利な実行環境構築の恩恵は受けたい、というちょっとわがままな願いを叶える方法が見つかったので試してみました。

準備

使用している Windows は Windows10 Professional, 1803 x64 バージョンです。
この環境に、 Microsoft Store から Ubuntu 16.04 をインストールします。

まずは以下の手順で、 Windows Subsystem for Linux (WSL) を有効にします。すでに有効になっている人は不要です。

  • 「設定」 から 「アプリと機能」 を選択します。
  • 関連設定の項目にある 「プログラムと機能」 を開きます。
  • 「Windows の機能の有効化または無効化」 を選択します。
  • “Windows Subsystem for Linux” にチェックを入れます。

無効状態から有効状態にするときには、再起動が必要でした。

続いて Microsoft Store より Ubuntu 16.04 をインストールします。
インストール後、起動させてみます。初回の起動にはしばらくかかるようです。その後、 ユーザーアカウント登録が必要になるので、適当にユーザー名とパスワードの組を入力します。

Docker のインストール

起動した Ubuntu で以下のコマンドを入力します。

$ 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

ちなみにインストールされた Docker のバージョンは、 “Docker version 17.03.2-ce, build f5ec1e2” となっていました。この状態では Docker のプロセスが正常に起動しなかったので、一度 Ubuntu を終了して、今度は管理者権限付きで Ubuntu を起動します。(右クリックして、その他、管理者として実行を選択します)。

こうして起動した Ubuntu のシェルで、以下のコマンドを実行します。

$ sudo service docker start

ps コマンドで確認してみると以下のようになっていれば動いていると思われます。

$ ps axf
  PID TTY      STAT   TIME COMMAND
    1 ?        Ss     0:00 /init ro
   52 ?        Sl     0:01 /usr/bin/dockerd -p /var/run/docker.pid
   60 ?        Ssl    0:00  \_ docker-containerd -l unix:///var/run/docker/libcontainerd/docker-containerd.sock --metric
  204 tty2     Ss     0:00 /init ro
  205 tty2     S      0:00  \_ -bash
  243 tty2     R      0:00      \_ ps axf

動作確認

インストールした Docker が使えるかを確認してみます。

Hello,world

Docker の hello-world で動作を確認してみます。
以下のコマンドを実行して、このような結果が表示されればうまく動いているとみてよさそうです。

$ sudo docker run --rm hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
9db2ca6ccae0: Pull complete
Digest: sha256:4b8ff392a12ed9ea17784bd3c9a8b1fa3299cac44aca35a85c90c5e3c7afacdc
Status: Downloaded newer image for hello-world:latest

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/engine/userguide/

Nginx

Nginx の docker についても確認してみます。

$ sudo docker run -it --rm -p 8080:80 nginx:latest
Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx
be8881be8156: Pull complete
32d9726baeef: Pull complete
87e5e6f71297: Pull complete
Digest: sha256:d85914d547a6c92faa39ce7058bd7529baacab7e0cd4255442b04577c4d1f424
Status: Downloaded newer image for nginx:latest
2018/08/11 11:33:52 [emerg] 6#6: io_setup() failed (38: Function not implemented)

これではうまく動かないような感じです。しかし、一応 http://localhost:8080/ としてブラウザでアクセスしてみると、 Nginx のページが表示されました。

この問題は、現時点では Issue が発行されているようで、しばらくするとどこかで解決となるかもしれません。

まとめ

Hyper-V なしの状態でも、一応 Docker が使えそうな印象があります。今回、参考にしたのは、 nuits.jp blog さんの Windows Subsystem for Linux(Hyper-Vなし)でDockerを動かす です。自分も同じように Docker だけど Hyper-V 有効にするのはちょっと・・・と思っていたので非常にいい情報でした。

(クライアント)Hyper-V が使えるのは Professional エディション以上でした。 Home エディションでは使えません。ですが、今回の WSL を用いた方式であれば、 Home エディションでも使えるはずです。

PC環境設定
すらりんをフォローする
すらりん日記
タイトルとURLをコピーしました