【図解】Windows11でWSL2+DockerによるPython開発環境を構築する手順
はじめに
こんにちは、SE出身のデータサイエンティスト「マチ」です。データ分析や機械学習を始める際に、最初につまずきやすいのが「開発環境の構築」ですよね。今回は、Windows11 PCにWSL2(Windows Subsystem for Linux 2)を導入し、Dockerを使ってPython環境を構築する方法を、手順を追って説明します。構築する環境のイメージ図は以下です。
1. WSL2でUbuntuをインストールする
1-1. WSL機能を有効化する
WSL[1]とは、Windows上でLinuxを実行するためのシステムです。Windows11には標準搭載されており、WSL2を利用することでLinuxベースのDocker環境を構築できます。以下の手順でWSLを有効にします。
1-1-1. 「コントロールパネル→プログラム→Windowsの機能の有効化または無効化」を開く。
1-1-2. 以下にチェックを入れる。
・Linux用Windowsサブシステム
・Virtual Machine Platform(仮想マシンプラットフォーム)
1-1-3. PCを再起動する(必要に応じて)。
1-2. Ubuntuをインストールする
「WSLを使用してWindowsにLinuxをインストールする方法」 に従って、PowerShell(管理者モード)でWSLのインストール・PCの再起動をします。念のため、以下のコマンドでWSLの更新を行い、今回はUbuntu-24.04 をインストールします。インストール後、自動的にUbuntuが起動し、ユーザー名とパスワードの設定を求められます。忘れないようメモしておきましょう。
wsl --install # 実行後PCを再起動
wsl --update
wsl --install -d Ubuntu-24.04
Ubuntuに自動的にログインするので、以下のコマンドで一度ログアウトします。
exit
1-3. WSLのバージョンと設定を確認する
WSL2にUbuntuが正しく登録されているか、PowerShell上で以下のコマンドで確認します。今回は「Ubuntu-24.04」のversion「2」に「*」がついていれば問題ありません。
wsl -l -v
想定通りの設定になっていなければ、以下のコマンドで設定し、改めて確認します。
wsl --set-default <DistributionName> #今回は<DistributionName>を「Ubuntu-24.04」に置換して実行
wsl --set-default-version <Version#> #今回は<Version#>を「2」に置換して実行
wsl -l -v
PowerShellで以下を実行することで、先ほど設定した既定の Linux ディストリビューションを開くことができます。(”exit”で閉じます。)ここまで確認したら、PowerShellを閉じます。
wsl ~
ここまでの完成図
2. Docker EngineをUbuntuにインストールする
2-1. リポジトリを登録する
Windowsメニューから「Ubuntu24.04LTS」のBashを起動します。
Install Docker Engine on Ubuntuに従って、UbuntuにDocker[2]をインストールします。まずは、aptパッケージマネージャーのパッケージ情報を最新化し、HTTPS 通信のために必要な証明書群などをインストールします。
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
次に、GPG鍵[3]を保存するディレクトリを作成し、権限(所有者が読み書き実行、その他は読み実行)を設定します。次に、Docker公式の GPG鍵をダウンロードし、権限を設定します。
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
Dockerリポジトリを aptのソースに追加します。最後に、追加された Docker リポジトリを含めて、aptパッケージリストを更新します。
# Add the repository to apt sources:
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
2-2. Docker Engineのインストールと動作確認を行う
以下のコマンドでDocker Engineをインストールします。
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
以下のコマンドでDockerEngineが正しくインストールされたことを確認します。
“Hello from Docker!”が出力されれば、インストール成功です。
sudo docker run hello-world
2-3. sudo不要でdockerを使えるようにする
以下のコマンドで現在のユーザーをDockerグループに登録し、sudoせずにDockerコマンドを実行できるようにします。
sudo usermod -aG docker $USER
newgrp docker
docker run hello-world
2-4. (ついでに)UbuntuにGitをインストールする
sudo apt install git
ここまでの完成図
3. VSCodeやpythonをインストールする
3-1. VS Code本体をインストールする
Microsoft StoreからVisual Studio Code をインストールします。意図せず環境が変化してしまわないよう、VSCodeが自動更新されないようにすることをおすすめします。(参考記事)
3-2. 拡張機能を導入する
Visual Studio Code を起動し、「表示→拡張機能」から以下を検索し、インストールします。
- Dev Containers
- WSL
- Japanese Language Pack for Visual Studio Code(任意)
3-3. 作業用ディレクトリとVSCodeを連携させる
まず、Ubuntu内に作業ディレクトリを作成し、そこに移動します。次に、VSCodeをUbuntu上で起動させます。(本ガイドでは、~(/home/[username]/)下に作業用ディレクトリを作成しています。)
初回起動時、自動的にUbuntuにVSCode Serverがインストールされ、Ubuntuやコンテナ上で動かすプログラムにも、Windows側のVSCodeからシームレスに接続・操作できるようになります。
mkdir zenn_work
cd zenn_work
code .
Ubuntu上で起動させたVSCodeに拡張機能「Docker」をインストールします。
ここまでの完成図
4. python環境用のコンテナを構築する
※Dockerについては、記事「Dockerによる開発環境構築のための概念理解と方法解説」が参考になりました。実際に環境構築する前に一読いただくと、より理解が深まると思います。
4-1. DockerImageを作成する
Dockerfile(+requirements.txt または requirements.lock)からDockerImageをつくります。Ubuntu内の「Dockerfile」などを配置したディレクトリに移動します。なお、本ガイドではベースイメージとして、DockerHubの「jupyter/base-notebook:python-3.10.10」を使用します。
zenn_work # 直下のファイルは環境構築用
│ Dockerfile
│ requirements.txt
│ docker-compose.yaml
│
└─source # コンテナ上で動かすプログラムファイル格納用
#ベースイメージ
FROM jupyter/base-notebook:python-3.10.10
#ローカルのrequirements.txtを、コンテナ内にコピーしてライブラリをインストール
#requirements.lockを使用する場合は、requirements.txtをrequirements.lockに置換して同様の記載でdockerfileを実行
COPY requirements.txt ./
RUN pip3 install --no-cache-dir -r requirements.txt
setuptools
numpy
pandas
beautifulsoup4
ydata-profiling
autoviz
sweetviz
pygwalker
seaborn
matplotlib
scikit-learn
lightgbm
graphviz
Prophet
datetime
holiday
jpholiday
optuna
optuna-integration[lightgbm]
mlflow
移動したら、以下のコマンドを実行します。
docker build -t zenn0 .
docker images
4-2. コンテナを作成する
Ubuntu内の「docker-compose.yaml」(ポートやマウントの設定も含む)を配置したディレクトリで以下のコマンドを実行します。
services:
jupyterlab:
build:
context: .
dockerfile: ./Dockerfile
image: zenn0
container_name: zenn0_c
ports:
- "127.0.0.1:8888:8888" #jupyter用
- "127.0.0.1:5000:5000" #mlflow用
- "127.0.0.1:8501:8501" #pygwalker用
working_dir: /home/jovyan/work
volumes:
- ./source:/home/jovyan/work #ローカルとコンテナ環境をマウントする
environment:
TZ: "Asia/Tokyo"
tty: true
restart: always
docker compose up -d
docker ps -a
完成図
環境は完成しました。あと一息です。
5. 構築した環境でpythonを動かしてみる
5-1. コンテナ上のファイルをVSCodeで編集できるようにする
VSCodeをUbuntu上で起動させます。
code .
「左端のDockerマーク→コンテナ(イメージ)名を右クリック→Visual Studio Codeをアタッチする→上部に表示されるコンテナ名を左クリック」します。
左下にコンテナ名が表示されたVSCodeのウィンドウが新しく開き、コンテナ内のソースを編集できるようになります。「フォルダを開く」でローカルとマウントしているコンテナ内の場所を指定します。
コンテナ上のVSCodeでファイルを作成して保存すると、エクスプローラー(Linuxのマウント先)から保存したファイルを参照できます。
権限がなくて保存できない場合は、保存先のフォルダに権限を付与します。
docker exec -it [コンテナ名] /bin/bash #コンテナ内に入る
chmod -R 777 ./work #フォルダ(とその配下)に権限を付与する
exit #コンテナから出る
5-2. pythonの動作確認をする
ipynbファイルのセルに以下を入力して、ctrl+Enterで実行しようとすると、右下や上部にメッセージが表示されます。表示されたメッセージに従って、必要なものをコンテナ上にインストールします。
print('Hello python')
再度、ipynbファイルのセル上でctrl+Enterで実行します。セルの下にエラーが出ることなく「Hello」と表示されればOKです。お疲れ様でした。
5-3. おまけ(主要なコマンド)
WSLの起動やシャットダウンは以下で実行できます。
wsl ~ #wslの起動
wsl --shutdown #wslのシャットダウン(コンテナ停止後の実行を推奨)
Dockerやコンテナの操作は以下のコマンドで実行できます。
docker exec -it [コンテナ名] /bin/bash #コンテナ内に入る
exit #コンテナから出る
docker ps -a #コンテナの一覧を表示する
docker images #コンテナイメージの一覧を表示する
docker rm [コンテナ名] #コンテナを削除する
docker rmi [コンテナイメージ] #コンテナイメージを削除する
#docker-compose.yamlがある場合
docker compose stop #コンテナの停止のみ
docker compose down #コンテナの停止と削除
#docker-compose.yamlがない場合
docker start [コンテナ名] #コンテナの起動
docker stop [コンテナ名] #コンテナの停止
さいごに
今回は、Windows上にWSL2とDockerを用いたPython開発環境を整える手順を紹介しました。ローカル環境での構築は難しそうに見えますが、WSLとDockerを使うことで、トラブルの少ない柔軟な開発が可能になります。Pythonによるデータ分析や機械学習を始める方の参考になれば幸いです。
-
WSLについての補足
・バージョンの違いついて
記事「WSLには3つの「バージョン」がある」が参考になりました。
・WSL上のUbuntuから/mnt/c/を見るとWindows内のファイルにアクセスできます。
・Windowsからもエクスプローラーで"\\wsl$”やLinuxと入力すると、
Ubuntu内のファイルにアクセスできます。 ↩︎ -
数年前まで、Windows及びMacOSのマシンにおいて、
Docker環境を構築する際のメジャーなソフトフェアは「Docker Desktop」でしたが、
2021-2022に有償化されています。 ↩︎ -
GPG鍵とは、ソフトウェアの信頼性を検証するために使われる暗号鍵です。 ↩︎
Discussion