ぐらいとさんの日常

頭の中の整理や自己成長のためのログを取るための日記に近いブログです。

WindowsでDockerを使いたい

Dockerとは

Dockerは、コンテナ仮想化を用いてアプリケーションを開発・配置・実行するためのオープンソースソフトウェアあるいはオープンプラットフォームである。
(Wikipedia引用)

...難しい概念である。
私もDockerをある程度使いこなせるように鳴るまで結構な時間がかかった。
出来る限り簡単に説明すれば、Dockerという(船舶の)タンカーの上に他のソフトウェア、例えばCentOSだとかMySQLをコンテナとして上に乗っけて、実行したり管理出来るようにするソフトウェアである。

まあ、開発効率を上げるためのソフトウェアなので、その道に関係がない人には無縁だ。 この記事は、そのDockerをWindowsに導入したログである。

どうやって使えるようにするか

WindowsでどうやってDockerを動かすか。
ちょっと調べただけでも下記のように色々な実現方法がある。

  • hyper-V + Docker Desktop
  • hyper-V + Docker Machine
    • hyper-V がWindows10Proのみで利用可能なためで私の環境だと使えない
  • VirtualBox + Docker Toolbox
    • 以前WindowsUpdateした際に何故かVirtualBoxが消されたので今回はパス
  • WSL2
  • WSL2 + Docker Desktop
    • Docker Desktop をWSL2を利用して動かす

今回は最下部の「WSL2 + Docker Desktop」でいこうと思う。
ちなみにWSL2は導入済み前提だ。 WSL2上で直接でも良かったのだが、すでにリリース中のサービスがUbuntu上でdockerを利用して構築されているので、別の方法にしてみることにした。

Windows10Proの人はscoopで入れたDockerをhyper-Vを利用して動かせるっぽいので便利そう。

導入手順

Docker Desktopのインストール

dockerhubからインストーラを探してダウンロード。
まずdockerhubのアカウントを作成する必要がある。
自分のときはメニューのExplore->Dockerと進み、Docker Desktop for Windowsを見つけることが出来た。
(この手のWebサイトは結構な頻度でページ構成から変わると思うので真似するときに違ったらご了承ください)

インストーラを起動し、「Enable WSL 2 Features」的なオプションを有効化してインストールする。
完了するとマシンのログオフを求められるので一旦ログオフ&ログインする。
ログインすると「セットアップ中だよ!」的なメッセージが出るので待っていると、DockerDesktopと思わしき画面が立ち上がる。
チュートリアルが始まるので、やってみると動いているのが確認できる。

なんとこれでインストール完了されたらしい。

ただなんかチュートリアルはうまく動かなかった。
大丈夫か?

うまく動いていない

チュートリアル用のコマンドを試してみるとエラーが出た。

> docker run -d -p 80:80 docker/getting-started
unable to resolve docker endpoint: open C:\Users\XXXXX\.docker\machine\machines\default\ca.pem: The system cannot find the path specified.

恐らく、WSLのパスが通っていない...?

調べたところ以前DockerToolboxを利用したことのあるマシンだと古い設定が残って動かないことがあるらしい...
ビンゴ!

Powershellで以下のコマンドを実行すると解決するという記事を見つけたので、試してみる。

[Environment]::SetEnvironmentVariable("DOCKER_CERT_PATH", $null, "User")
[Environment]::SetEnvironmentVariable("DOCKER_HOST", $null, "User")
[Environment]::SetEnvironmentVariable("DOCKER_MACHINE_NAME", $null, "User")
[Environment]::SetEnvironmentVariable("DOCKER_TLS_VERIFY", $null, "User")
[Environment]::SetEnvironmentVariable("DOCKER_TOOLBOX_INSTALL_PATH", $null, "User")

実行後新たにPowerShellを開き直し、先程のコマンドを実行すると成功した!

▼ DockerDesktop、こんな感じ

f:id:g_light:20210221000649p:plain

PowerShellでも、WSL2(Ubuntu)でもdockerが使える

DockerDesktopをインストールした後はPowerShellでもUbuntuでもdockerコマンドが使えるようになっていた。
WSL2のファイルシステムの都合でDockerで動かすファイルの管理はUbuntu側で行ったほうがいいらしいので、コマンド使うのは主にUbuntu上になりそうだ。

感想

以前はVirtualBoxとDockerToolboxでDocker環境を構築していたのだが、VirtualBoxは扱いづらいし、DockerToolboxは余計な機能が色々ついてきて混乱の種だったが、DockerDesktopはDockerのイメージとコンテナを一元管理するだけの機能のようで、UIもシンプルで好感が持てる。
WSL2のおかげで前に比べて環境が一回りシェイプアップされた気分だ。

参考

Windows Home に Docker Desktop をインストール
https://docs.docker.jp/docker-for-windows/install-windows-home.html

Docker for Windowsをインストール後 could not read CA certificateエラーが出た時の解決方法
https://qiita.com/icck/items/60e1c1f8b6a05c8fdf72