Docker

Docker Desktopを使わずにWSL2上でDockerを使用する方法

Docker Desktopを使わずにWSL2上でDockerを使用する方法

Docker Desktopを使わずにWSL2上のLinuxでDockerを使用する方法を解説します。

Docker

Dockerは、アプリケーションを軽量なコンテナとしてパッケージ化し、実行するための仮想環境です。これにより開発環境や本番環境など異なる環境間での一貫した動作が可能となります。

この記事では、Docker Desktopを使わずにWSL2上のLinuxでDockerを使用する方法について紹介したいと思います。

Docker Desktop

Docker Desktopは、簡単にインストールできるアプリケーションです。Docker Desktopは、従業員数が250人以上 または 年間収益が1,000万ドルを超える組織には、有料のサブスクリプションが必要です。

ただし、以下のような条件に当てはまる場合は、無料で使用することができます。

  • 従業員数が250人未満 かつ 年間収益が1,000万ドル未満の組織
  • 個人のプロジェクトでの利用
  • 教育目的での利用(学生や教育者によるもの)
  • 非商用のオープンソースプロジェクトでの利用

上記条件に当てはまらない企業の場合で無償でDockerを使用したい場合には、Docker Desktopを使わない方法を検討する必要があります。

Dockerを商用含めて無償で使用する方法

Docker Desktopは上記でも説明した通り企業規模により有料のサブスクリプションが必要です。しかし、有料であるのはDocker Desktopであり、そのエンジンであるDocker Engine自体は無償で使用することができます。

つまり、Linux環境やWSL2(Windows Subsystem for Linux 2)上でDocker Engineをインストールして使用する分には問題ありません。

以降では、Windows11環境を前提として、WSL2上のUbuntuでDockerを動作させて使用する方法を紹介していきます。

Docker Desktopを使わずにWSL2上でDockerを使用する

WSL2でUbuntuをインストールする

WSL2(Windows Subsystem for Linux 2)は、Windows上でLinux環境を動作させることができる環境です。

以下コマンドを実行することにより、WSLのインストールとUbuntuのインストールを同時に実行することが可能です。

wsl --install -d Ubuntu

上記でインストールを完了するとWindowsの検索で「ubuntu」見つかるようになり、実行するとUbuntuのターミナルが表示され、Ubuntu環境を使用できるようになります。

WSL2 Ubuntu Windows11

以下のコマンドでUbuntuのバージョンを確認できます。今回の例では、Ubunt24.04.1 LTSとなっています。

lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 24.04.1 LTS
Release:        24.04
Codename:       noble

Note:WSL関連のコマンド

【WSLのアップデート】
WSLをアップデートします。既に環境が入っている人はアップデートしておくことを推奨します。

wsl --update

【WSL環境のリストアップ】
WSLで使える環境を確認します。デフォルト環境には*がつきます。

wsl -l -v

【実行バージョンの変更】
WSLの実行バージョンを2に変更します。<ディストリビューション名>の部分には対象の環境名を指定してください。

wsl --set-version <ディストリビューション名> 2

【デフォルトバージョンの設定】
以降作成される環境のデフォルトをVersion2にすることができます。

wsl --set-default-version 2

Ubuntu上にDockerをインストールする

Ubuntuのターミナルを実行後に以下を実行することでDocker環境をインストールします。

Ubuntuパッケージの更新

まずは、Ubuntu自体のパッケージを更新しておきます。

sudo apt update

Docker Engineのインストール

次に、Dockerのインストールスクリプトを実行します。インストールスクリプトに関する説明はDockerの公式ドキュメントのこちらを参考にしています。

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

スクリプトにスリープが入っていますので、しばらく待ってもらえると実行が進んでいきます。完了したらDockerのインストールが完了です。

以下のコマンドで、Dockerのサービスが実行されているかを確認してください。

sudo systemctl status docker

実行状態が、active(running)になっていればDockerは起動しています。起動していないようであれば以下コマンドで実行してください。

sudo systemctl start docker

PySpark環境を使ってみる

上記でWSL2上のUbuntu環境に用意したDockerでPySparkのDocker環境を使用してみましょう。

PySparkは、Apache Sparkという分散データ処理フレームワークをPythonで利用できるようにするAPIです。Sparkは分散環境なのでローカル環境の用意は大変ですし、クラウド環境では課金が生じます。このような時にローカルでPySpark環境が準備できると非常に便利です。

PySparkのDocker環境を使う方法については「PySparkの実行環境をDockerで用意する方法」に詳細に説明をしています。この記事はDocker Desktopを前提にしていますが、今回作成した環境でも同様に実行できることを確認します。

Dockerイメージの取得と実行

作成したubuntu環境のターミナルで以下コマンドで実行し、Docker HubからPySparkを使用できるJupyter Notebook環境のイメージを取得します。

docker pull jupyter/pyspark-notebook

コンテナの作成と実行

以下のコマンドを実行することでPySparkの環境を起動することができます。

docker run --rm -it -p 8888:8888 -p 4040:4040 -v /mnt/d/docker1/pyspark_notebook_1:/home/jovyan/work jupyter/pyspark-notebook

コンテナが起動するとターミナルの表示の中に「http://127.0.0.1:8888/lab?token=xxxxxxxxxx」というような記載の文字列が表示されるかと思います。このURLをブラウザに入力することでJupyter Labを実行することができます。

WSL2 Docker Jupyterlab

なお、WSL2上のUbuntuでは、/mnt/c//mnt/d/にCやDドライブがマウントされます。上記実行時には/mnt/d/docker1/pyspark_notebook_1と指定しましたので、Jupyter Labのworkフォルダに作成されたファイルは、D:\docker1\pyspark_notebook_1フォルダ内に保存されます。

wsl.confの修正(NTFSファイルシステムとの権限に関する問題)

上記環境構築をした際にPySparkのプログラムを動かすとファイルの書き込みに関するコードが失敗する事象が発生しました。NTFSファイルシステムにおけるファイルの書き込み権限が原因で、ファイル操作が失敗したと考えられます。

上記のような問題は、ubuntu環境の/etc/wsl.confファイルに以下の記載を追記したところ改善しました。

[automount]
options="metadata"

automountセクションは、WSLがWindowsのファイルシステムを自動的にマウントする際のオプションを設定するためのものです。通常、WSL2は/mnt/c/mnt/dのようにドライブごとに自動マウントします。

metadataオプションは、Windowsファイルシステム上のファイルに対してLinuxのメタデータ(所有者、権限情報など)を保存できるようにするもので、Linuxの権限モデル(chmodchownなど)をWindowsファイルシステムで扱えるようになります。

上記変更をした際には、以下でWSLを一度シャットダウンし、再度ubuntu環境を立ち上げ直してください。

wsl --shutdown

まとめ

Docker Desktopを使わずにWSL2上のLinuxでDockerを使用する方法を解説しました。

Docker Desktopは一定規模以上の企業では有料のサブスクリプションが必要となるため、Docker Desktopを使用しないで実行できる環境があると非常に便利です。Windows環境上の場合は、WSL2上にUbuntuを構築してDocker Engineをインストールすることで実現ができます。

この記事では一連の環境準備の方法について紹介しました。Docker環境構築の参考にしていただければと思います。