WSLにてDockerを利用する

はじめに

MacからWindowsにメイン環境を10年ぶりに戻したのですが、さてWebアプリ開発とかどうしようかと少し悩みました。VirtualBoxなどを入れて仮想環境で行おうかとも考えましたが、ディスク(SSD)の資源も限られているので、仮想マシンをバンバン立ち上げられないわけで、となるとやっぱりDockerでしょ。ということで、WSL on Window 10の環境下でDockerによるコンテナ処理について色々とやってみたいと思ったわけです。

DockerDesktop

WSL上にてDockerサーバ(エンジン)を動かすことは余りよろしくないみたいなので、というか私もそれは機能的に心配だったので、下記サイトに習って、「Docker for Windows」を入れて、仮想化基盤としてはWindows 10 Proに最初から備わっているHyper-Vを使用します。そう、Dockerサーバは、Docker for Windowsで稼働させて、DockerクライアントをWSLで動かすというやつです。

(参考)「WSL の docker client から、Docker for Windows の docker daemon を使う手順 | ラボラジアン」
 https://laboradian.com/use-docker-on-wsl/#2_Docker_for_Windows

上記サイトはとても丁寧に説明されており、大変参考になりました。ありがとうございました。


Docker for Windows のインストール

まずはDocker公式サイトにて Docker ID を取得します。

「Docker Desktop for Windows – Docker Hub」
 https://hub.docker.com/editions/community/docker-ce-desktop-windows

これしないとダウンロードできないし使えません。

おっとその前に、「Windows の機能の有効化または無効化」で「Hyper-V」を有効化しておきます。

hyper-v_enable

ダウンロードした「Docker for Windows Installer.exe」を実行し、そのままデフォルトでインストールを進めます。

Use Windows containers insted of ...」は、Windowsをコンテナで動かす場合のオプションなので無視します。

スタートメニューから、Docker Desktop を起動すると、「Welcome」ウィンドウが表示されますので、Docker IDでログインします。

WSL側での作業

WSL の Ubuntu 18.04 にて必要なツールをインストールします。

$ sudo apt install apt-transport-https ca-certificates\
                   curl software-properties-common

次に、Dockerの公式GPG鍵を追加します。

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

フィンガープリントの確認です。

$ sudo apt-key fingerprint 0EBFCD88
9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88

続いて、Docker用のリポジトリを追加します。

$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

ここで、リポジトリを有効にするためにパッケージインデックスの更新を行います。

$ sudo apt update

Docker CEのインストール

$ sudo apt install docker-ce

docker-composeのインストール

$ sudo curl -L https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose

URLの「1.23.2」はバージョン番号なので、ここから最新の安定版のものを指定します。

「Releases · docker/compose · GitHub」
 https://github.com/docker/compose/releases

docker-composeに実行権限を与えます。

$ sudo chmod a+rx /usr/local/bin/docker-compose

docker-composeのコマンド補完機能が効くように、/etc/bash_completion.d に補完スクリプトを配置します。

$ sudo curl -L https://raw.githubusercontent.com/docker/compose/$(docker-compose version --short)/contrib/completion/bash/docker-compose -o /etc/bash_completion.d/docker-compose

実際にスクリプトが配置されたか確認します。

$ ls /etc/bash_completion.d/
apport_completion  cloud-init  docker-compose  git-prompt

有効にするためにスクリプトを読み込みます。

$ source /etc/bash_completion.d/docker-compose

.profile」に次に一行を追加します。WSLのDockerクライアントからDocker for Windowsでのdockerデーモンを利用するためです。

export DOCKER_HOST="tcp://0.0.0.0:2375"

Docker for Windowsの「Settings」(タスクバーにあるクジラのDockerアイコンを右クリック→「Settings」を選択)の「General」の項目にて、「Expose daemon on tcp://localhost:2375 without TLS」にチェックを入れておきます。

docker_4_win_setting_general

はじめてのDocker体験

一度シェル(wsl-terminal)を再起動します。

Dockerのバージョンを確認します。

$ docker version

このようにちゃんと「Client:」と「Server:」の項目が確認できればOKです。

Dockerイメージ「hello-world」を取得し、コンテナを起動してみます。

$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
1b930d010525: Pull complete
Digest:  sha256:2557e3c07ed1e38f26e389462d03ed943586f744621577a99efb77324b0fe535
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
:

無事に動いてくれたようです。

現在保持しているコンテナの一覧を確認してみます。

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND              CREATED              STATUS                          PORTS                NAMES
578e46ca0ed8        hello-world         "/hello"             About a minute ago   Exited (0) About a minute ago                        compassionate_feistel

現在保持しているイメージの一覧を確認してみます。

$ docker images
REPOSITORY          TAG                 IMAGE ID             CREATED             SIZE
hello-world         latest              fce289e99eb9        4  weeks ago         1.84kB

コンテナを削除したい場合はこのコマンド

$ docker rm <コンテナID>

イメージを削除したい場合はこのコマンド

$ docker rmi <イメージID>

とりあえず、今日はここまで。

VMware、VirtualBox、KVMなどを使用してきた私にとっては、当初、コンテナってこんなもん?これが仮想環境?何がおいしいの?って感じでしたが、この後コンテナの魅力にどっぷりとはまることに。。。

WSLにてDockerを利用する」への1件のフィードバック

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google フォト

Google アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中