WSL 2,Docker,Miniconda3による統合開発環境構築・運用ガイド(Windows 上)
【概要】WSL 2(Windows Subsystem for Linux 2)は,Windowsで Linux実行環境を提供する.そして,Docker Desktop は,WSL 2 と連携して動作し,コンテナの管理やイメージの作成を視覚的に行う機能を持つ.Dockerfileは,Ubuntu などの Linux をベースに環境構築の手順(例:Python環境の構築や開発ツールの導入など)を記述する設定ファイルである.Dockerfileを用いて,開発環境の構築を容易に行うことができる.
- Ubuntu 24.04 LTSイメージを基に新しいコンテナを作成しbashを実行: docker run --name ubuntu -it ubuntu:24.04 /bin/bash
- Dockerイメージのビルド(Dockerfileからのイメージ作成): docker build -t myubuntu2404:1.0 .
- イメージからのコンテナの作成と実行: docker run --name myubuntu -p 8888:8888 -it myubuntu2404 /bin/bash
- 停止中の myubuntu コンテナに接続.接続終了後にコンテナは停止せずに実行を継続する.:docker start ubuntu && docker exec -it myubuntu /bin/bash
- 実行中の myubuntu コンテナに接続.接続終了後にコンテナは停止せずに実行を継続する.:docker exec -it myubuntu /bin/bash
- 停止中の myubuntu コンテナを実行中(Up)にする:docker start myubuntu
- 実行中の myubuntu コンテナを停止(Exited)する:docker stop myubuntu
- 実行中あるいは停止中のコンテナの一覧表示:docker ps -a
【目次】
- 基本アーキテクチャ
- 特徴と利点
- 前準備
- Docker Desktopのインストール,Docker エンジンの起動
- 環境の動作確認
- 基本機能の動作確認
- Miniconda3を使用したUbuntu開発環境の構築手順と解説
- トラブルシューティング
【サイト内の関連ページ】
1.基本アーキテクチャ
[Windows OS]
↓
[WSL 2 Linuxカーネル] ← wsl --updateの対象
↓
[Docker Desktop] ←Docker Desktop の WSL 2統合機能を使用
↓
[Dockerコンテナ群] ← Dockerイメージから生成される独立実行環境(例:Ubuntu 24.04 と Miniconda 3 環境を動作)
2.特徴と利点
Dockerを使うことにより,環境構築がコマンド一つでできるようになる. 開発メンバー全員が完全に同じ環境で開発できるようになる. 「自分のPCでは動くのに」というトラブルがなくなる. 異なる環境を1台のPCで共存することもできる. ただし,Windows固有の機能を使う開発では,Dockerは適していない.
コンテナの特徴として,コンテナを停止すると,操作結果がすべてなくなることにある.よく使う設定は操作は Docker file に記載し,Docker file を使って新しいイメージをビルドする.
2.1 環境構築
- Dockerによる実行環境の提供
- 例:Docker Desktopのインストールにより,WSL 2との連携環境が整う
- 例:Visual Studio CodeからWSL 2とDocker Desktopを統合して利用が可能である
- インストール作業や環境設定が簡単である
- 例:
docker run
コマンド一つで,データベースやWebサーバーなどが即座に利用可能である
- 例:
2.2 環境の分離
- 異なるプロジェクトを1台のPCで可能
- 例:Python 3.8のプロジェクトと3.12のプロジェクトを同時に開発可能である
- 異なるバージョンの並行利用が可能である
- 例:MySQL 5.7とMySQL 8.0を同時に起動して開発とテストが可能である
- 各環境が独立しているため,一方の問題が他方に影響しない
- 例:開発中のWebアプリケーションがクラッシュしても,他のコンテナは影響を受けない
2.3 環境の再現性
- すべての開発者で同一環境を利用可能である
- 例:チーム全員がDocker Desktopを使用することで,同一の開発環境を実現する
- 本番環境との一貫性を確保する
- 例:開発環境と本番環境(開発環境とは別のパソコン)で同一のDockerイメージを使用可能である
- 「私の環境では動く」問題を解消する
- 例:Windowsのバージョンが異なっていても,WSL 2とDocker Desktopによって同一の実行環境を提供する
2.4 メンテナンス性
- 問題発生時は環境を簡単にリセット可能である
- 例:コマンドでコンテナを再起動または削除して再作成する
- WSL 2によるパフォーマンスと安定性を実現する
- 例:Docker Desktop for WindowsがWSL 2バックエンドを使用することで,ファイルI/Oを実現する
3.前準備
WSL 2(Windows Subsystem for Linux 2:WindowsでLinuxを実行するためのシステム)が有効化されていること.
- WSL 2の有効化状態確認:
- コマンドプロンプトを起動する(例:Windowsキーを押し,「cmd」と入力)
- 以下のコマンドを実行する:
wsl --status
- WSL 2が使用するLinuxカーネルの更新
セキュリティパッチや機能改善のためにアップデートが必要である.
wsl --update
- 仮想化の確認:
- タスクマネージャーを開く(Ctrl + Shift + Esc)
- 「パフォーマンス」タブで仮想化が有効になっているか確認する
4. Docker Desktopのインストール,Docker エンジンの起動
Docker Desktopにより,画面を用いてビジュアルに,Dockerコンテナ, Dockerイメージ,Dockerボリュームの一覧表示,状態確認,基本的な操作を行うことができる.
Docker Desktopの起動は,Windowsのスタートメニューから起動できる.Docker デスクトップを起動することにより,Docker エンジンが起動する
4.1 インストール
Dockerエンジンを構成するDockerデーモンとクライアントを含むDocker Desktopのインストール手順を示す.
インストールは,以下の2つの方法から選択可能である.
A)winget(Windowsパッケージマネージャー)を使用したインストール
- Windowsで,コマンドプロンプトを管理者権限で起動する(例:Windowsキーを押し,「cmd」と入力し,「管理者として実行」を選択)
- winget(Windowsパッケージマネージャー)が利用可能か確認する:
winget --version
- Docker Desktopのインストール:
winget install --scope machine Docker.DockerDesktop
B)手動でのインストール
- Docker Desktopのダウンロード:
- 公式サイト(https://docs.docker.com/desktop/features/wsl/#download)にアクセス
- インストーラをダウンロードする
- インストールの実行:
- ダウンロードしたインストーラを実行する
- 画面の指示に従ってインストールを完了する
4.2 Docker エンジンの起動と Docker Desktop の初期設定の確認
- Docker Desktopの起動:
- 手動で起動する場合
Windowsのスタートメニューから起動する
- 手動で起動する場合
- 自動起動するように設定したい場合
コマンドプロンプトを管理者権限で起動する(例:Windowsキーを押し,「cmd」と入力し,「管理者として実行」を選択)
次のコマンドを実行
reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run" /v "Docker Desktop" /t REG_SZ /d "\"C:\Program Files\Docker\Docker\Docker Desktop.exe\"" /f
- WSL 2の設定確認:
- 画面右上の設定(Settings)ボタンをクリックする
- 一般(General)タブを表示する
- 「Use WSL 2 based engine」のチェックボックスが有効になっていることを確認する
5.環境の動作確認
5.1 WSLの状態確認
インストール済みのLinuxディストリビューションの中に「docker-desktop」があることを確認する:
wsl -l -v
表示例:
NAME STATE VERSION
* Ubuntu-24.04 Running 2
docker-desktop Running 2

表示内容の説明:
NAME
:インストールされているディストリビューションの名前であるSTATE
:実行状態(Running
は稼働中,Stopped
は停止中)であるVERSION
:使用中のWSLのバージョン(2はWSL 2を示す)である- アスタリスク(*):デフォルトのディストリビューションを示す
5.2 Docker Desktopの連携確認
WSL 2とDockerの連携状態を確認する:
docker info | findstr "Operating System"
期待される出力:
Operating System: Docker Desktop

この表示があれば,DockerがWSL 2と正しく連携できている.
6.基本機能の動作確認
6.1 コンテナの作成と実行
次のコマンドは,公式レポジトリで提供されているUbuntu 24.04 LTSイメージを基に新しいコンテナを作成し,「cat /etc/os-release」コマンドを実行した後,自動的にコンテナを削除する(--rm
オプション)操作である.
docker run --rm ubuntu:24.04 cat /etc/os-release

コマンドの説明:
docker run
:新しいコンテナを作成して実行する--rm
:実行完了後にコンテナを自動削除するubuntu
:Ubuntuの公式コンテナイメージであるcat /etc/os-release
:コンテナ内のLinuxバージョン情報を表示する
6.2 基本的なDockerコンテナの操作
- 存在するコンテナを確認する.
docker ps -a
すべてのコンテナ(実行中・停止中とも)を一覧表示する.コンテナの名前,ID,状態,作成時間などが表示される.
- コンテナの停止
docker stop ubuntu
「ubuntu」というコンテナ名のコンテナを停止する.
- コンテナの削除
docker rm ubuntu
「ubuntu」というコンテナ名のコンテナを削除する.
- 新規コンテナの作成と実行
docker run -it --name ubuntu ubuntu:24.04 /bin/bash
-it
:対話的な操作を可能にし(-i
),疑似TTY(端末)を割り当てる(-t
)--name myubuntu
:コンテナに「ubuntu」という識別用の名前を付与するubuntu:24.04
:ベースイメージとして,Ubuntu 24.04の公式イメージを使用/bin/bash
:コンテナ起動時に実行するコマンドである
- コンテナの再起動
docker start ubuntu
停止状態の「ubuntu」コンテナを開始状態にする.以前の設定やボリュームマウントはそのまま維持される.この操作はコンテナを新規作成するわけではなく,既存コンテナを停止状態から開始状態に変える.
- 実行中のコンテナへの接続
docker exec -it ubuntu /bin/bash
実行中の「ubuntu」コンテナに接続し,新しいbashシェルを起動する.
exit
コマンドで bash シェルを終了してもコンテナは停止せず,バックグラウンドで実行され続ける.これはdocker run
と異なる特徴である.
6.3 Windows上でUbuntu 24.04コンテナからX11アプリケーションを実行する方法
Docker上のLinuxコンテナからWindowsホスト上のX11サーバーに接続し,GUIアプリケーションを表示する方法である.Docker Desktopの「host.docker.internal」機能とX11転送を組み合わせ,コンテナの再起動後も継続的に利用可能である.
次は,Docker上の Ubunut24.04 コンテナを作成ののち,xeyesアプリケーション(X11アプリケーションの1つ)をインストールし実行する手順である.同様の手順で他のX11アプリケーションも実行できる.
前提条件
- Windows 11でWSL2が設定され,Docker Desktopがインストールされていること
コンテナの作成とx11-appsアプリケーションのインストール
- 同名のコンテナがある場合は停止する.
docker stop ubuntu
- 同名のコンテナがある場合は削除する.
docker rm ubuntu
- 新規コンテナの作成と実行:
docker run -e DISPLAY=host.docker.internal:0.0 -it --name ubuntu ubuntu:24.04 /bin/bash
-e DISPLAY=host.docker.internal:0.0
:X11サーバーへの接続先を指定する-it
:対話的な操作を可能にし(-i),疑似TTY(端末)を割り当てる(-t)--name ubuntu
:コンテナに「ubuntu」という識別用の名前を付与するubuntu:24.04
:ベースイメージとして,Ubuntu 24.04の公式イメージを使用/bin/bash
:コンテナ起動時に実行するコマンドである
- コンテナ内でのコマンド実行:x11-appsアプリケーションをインストールし,x11-appsアプリケーションの xeyesの動作確認.最後にexitでコンテナを停止状態にする.
apt-get update apt-get install -y x11-apps xeyes & exit
停止したコンテナの再起動と実行
- 停止状態のコンテナを開始状態にする.
docker start ubuntu
- 実行中のコンテナでx11-appsアプリケーションの xeyes を起動する.
docker exec ubuntu xeyes
注意点:DISPLAY環境変数の設定
docker run時にDISPLAY環境変数を設定していない場合は,次のように docker exec の実行時に指定する.
docker exec -e DISPLAY=host.docker.internal:0.0 ubuntu xeyes
6.4 セキュリティを考慮した発展的なオプション
ユーザー指定による権限制限
docker run -it --user 1000:1000 --name ubuntu ubuntu:24.04 /bin/bash
--user 1000:1000
- UID/GID 1000のユーザーとしてプロセスを実行- root権限ではなく一般ユーザー権限で実行することでセキュリティリスクを低減
Linuxケーパビリティの制限
docker run -it --cap-drop=ALL --cap-add=NET_BIND_SERVICE --name webapp ubuntu:24.04 /bin/bash
--cap-drop=ALL
- すべての特権を削除--cap-add=NET_BIND_SERVICE
- ネットワークポートへのバインド権限のみ追加- 必要最小限の権限のみを付与する「最小権限の原則」に従っている
6.5 ファイル共有機能のテスト
A)名前付きボリュームを使用(推奨)
コンテナのライフサイクルから独立してデータを永続的に保持するDockerボリュームの作成と使用:
- データ永続化用のボリュームを作成
docker volume create app-data
コマンドの説明:
- Dockerにおけるデータ永続化のための機能である
- 新規ボリュームを作成する
/var/lib/docker/volumes/
配下に作成される- コンテナを削除した場合でも,データは保持される
- ボリュームを使用したコンテナの実行:
docker run --rm -v app-data:/data ubuntu:24.04 ls -al /data
ボリュームは新規作成直後は空である.
-v app-data:/data
:作成したボリュームをコンテナの/data
ディレクトリにマウントする- このボリュームは他のコンテナでも利用可能である
B)ローカルディレクトリのマウント
Windows側のファイルを直接共有する方法:
mkdir data2
docker run --rm -v %cd%/windows-file:/data2 ubuntu:24.04 ls -al /data2

7.Miniconda3を使用したUbuntu開発環境の構築手順と解説
1. Dockerfile の作成
- コマンドプロンプトを起動する(例:Windowsキーを押し,「cmd」と入力)
- 以下のコマンドを実行する:
- Dockerfile を次のように作成して保存する
次のDockerfileは,Ubuntu 24.04 LTS(Long Term Support:長期サポート版)のイメージを取得し,Python環境を構築している.Miniconda3を用いてPython 3.12環境を作成し,NumPy,Pandas等の科学技術計算ライブラリを導入している.Jupyter NotebookをPort 8888で起動するよう設定し,開発環境としてcmake,git等の基本ツールも導入している
FROM ubuntu:24.04 # 環境変数の設定 ENV PATH=/opt/conda/bin:$PATH \ SHELL=/bin/bash \ DEBIAN_FRONTEND=noninteractive \ TZ=Asia/Tokyo # システムパッケージのインストール RUN apt-get update && apt-get upgrade -y && \ apt-get install -y python3 python3-pip python3-dev wget curl git cmake gnupg software-properties-common build-essential # Miniconda3のインストール RUN wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh && \ bash Miniconda3-latest-Linux-x86_64.sh -b -p /opt/conda && \ rm Miniconda3-latest-Linux-x86_64.sh # condaの初期設定とdev環境の作成 RUN /opt/conda/bin/conda init bash && \ echo ". /opt/conda/etc/profile.d/conda.sh" >> /root/.bashrc RUN /opt/conda/bin/conda create -n dev python=3.12 -y && \ /opt/conda/bin/conda install -n dev -y numpy pandas matplotlib scikit-learn jupyter pylint pytest black && \ echo "conda activate dev" >> /root/.bashrc # Jupyterの設定 RUN mkdir -p /root/.jupyter && \ /opt/conda/envs/dev/bin/jupyter notebook --generate-config && \ echo "c.NotebookApp.ip = '*'" >> /root/.jupyter/jupyter_notebook_config.py && \ echo "c.NotebookApp.port = 8888" >> /root/.jupyter/jupyter_notebook_config.py && \ echo "c.NotebookApp.allow_root = True" >> /root/.jupyter/jupyter_notebook_config.py # 作業ディレクトリの設定 WORKDIR /workspace # Jupyterのポートを公開 EXPOSE 8888 # コンテナ起動時のコマンド CMD ["bash", "-c", ". /opt/conda/etc/profile.d/conda.sh && conda activate dev && \ /opt/conda/envs/dev/bin/jupyter notebook --allow-root --ip=* --port=8888 --no-browser"]
- Dockerfileをもとにイメージを作成
notepad Dockerfile

2. Dockerイメージのビルド(Dockerfileからのイメージ作成)
コマンドプロンプトで,次の「docker build」コマンドを実行する.次のコマンドは,カレントディレクトリのDockerfileを基にイメージを生成する.作成したイメージには,識別用の名前(例:myubuntu2404)とバージョン管理用のタグ(例:1.0)を設定できる.
その後,「docker images」コマンドにより,ローカルに保存された全てのイメージを一覧形式で確認できる.
docker build -t myubuntu2404:1.0 .
docker images

3.作成されたイメージからのコンテナの作成と実行
コマンドプロンプトで,次のコマンドを実行する.
docker run --name myubuntu -p 8888:8888 -it myubuntu2404:1.0 /bin/bash
次の実行画面では,Linuxコマンドの pwd, ls を実行した後,「exit」で切断している.

各オプションの説明:
--name myubuntu
:コンテナに識別用の名前を付与する-it
:対話的な操作を可能にし(-i
),疑似TTY(端末)を割り当てる(-t
)-p 8888:8888
: Jupyter Notebook のためにポート8888のマッピングを行うubuntu2404:1.0
:使用するベースイメージである/bin/bash
:コンテナ起動時に実行するコマンドである
4.環境の確認
- 停止中のコンテナへの接続.「exit」で切断.
docker start
コマンドにより,停止中のコンテナを実行する.docker exec
コマンドにより,実行中のコンテナに新しいプロセスとして接続し,exit
コマンドで接続を終了する.そのとき,コンテナは停止せずに実行を継続する.docker start myubuntu && docker exec -it myubuntu /bin/bash exit
- 実行中の myubuntu コンテナで,Pythonバージョンの確認
docker exec myubuntu python --version
- conda環境の確認
docker exec myubuntu conda info
- conda環境の確認
docker exec myubuntu conda env list
- インストールされたパッケージの確認
docker exec myubuntu conda list
5. Docker 運用上の注意点
- ボリュームの内容をtarファイルにバックアップ
docker run --rm -v app-data:/data -v $(pwd):/backup ubuntu tar czvf /backup/app-data-backup.tar.gz /data
- バックアップからボリュームを復元
docker run --rm -v app-data:/data -v $(pwd):/backup ubuntu tar xzvf /backup/app-data-backup.tar.gz -C /
--rm
オプションは,コマンド実行後にコンテナを自動的に削除する- バックアップファイルは定期的に外部ストレージにコピーすることを推奨する
- Docker コンテナのリソース監視
# コンテナのリソース使用状況を確認 docker stats myubuntu # コンテナのプロセスを確認 docker top myubuntu # コンテナのログを確認 docker logs myubuntu # 直近の100行のログを表示 docker logs --tail 100 myubuntu
- リソース使用量に監視する.必要に応じてリソース制限を設定するときに利用できる.
- 異常な動作やエラーを早期に発見するため,ログを確認する.
6. Miniconda 3 の説明
Miniconda3は,Pythonとconda(パッケージ管理システム)を含むシステムである.
Minicodna 3 の概要と機能
conda を使用してパッケージをインストールできる.condaは,パッケージの依存関係を自動的に解決し,互換性のあるバージョンをインストールする.また,独立した仮想環境を作成できる.Windows, Linux などに対応.Miniconda3は,Pythonの複数バージョンを管理し,共存させることもできる.
- 環境の作成:conda create -n <env_name> python=<version>
- 環境のアクティベート:conda activate <env_name>
- パッケージのインストール:conda install <package_name>
- 環境の一覧表示:conda env list
- 環境の削除:conda remove -n <env_name> --all
- 環境のバックアップ:conda env export > environment.yml
Miniconda3とpipの併用
Miniconda3とpipを同じ環境で使用する際は注意が必要である.基本的には,どちらか一方を使用することが推奨されているが,特定のパッケージがcondaで利用できない場合にはpipを使用することになる.その際は,新しいconda環境を作成して,その環境内でpipを使用することが強く推奨される.これにより,他の環境に影響を与えることがなくなる.--upgrade-strategyは,依存関係が必要な場合にのみ,関連するパッケージをアップグレードするオプションである.
conda create -n myenv python=<version>
conda activate myenv
pip install --upgrade-strategy only-if-needed <package_name>
Miniconda3 環境設定のバックアップと再現
# 現在の環境設定をエクスポート
conda env export > environment.yml
# エクスポートした環境の内容確認
cat environment.yml
# 他の環境での環境を再現
conda env create -f environment.yml
environment.yml
には,Pythonバージョンやパッケージ情報が記録される- パッケージのバージョンも明示的に記録されるため,環境の再現が可能である
トラブルシューティング
環境の作成やアクティベートに失敗する場合:
環境の作成やアクティベートに問題がある場合,既存の環境を削除して新しい環境を作成する.以下のコマンドを使用する.必要なデータは事前に保存する必要がある.
conda remove --name --all
conda create --name python=
conda activate
8.トラブルシューティング
8.1 wingetでのインストールの問題
- wingetの更新:
winget upgrade
- キャッシュのクリア:
winget source reset
- よくある問題と対処:
- 「プログラムが見つかりません」エラー:
でパッケージリストを更新する
winget source update
- インストールが途中で止まる場合:
- 管理者権限でコマンドプロンプトを開いて実行する
- または手動インストールに切り替える
- 「プログラムが見つかりません」エラー:
8.2 コンテナとイメージトボニュームの破棄
注意:次を実行することにより,コンテナとイメージとボリュームは,実行中のものも含め,すべて破棄される.もとに戻すことはできない.重要なデータは事前に保存する必要がある.
すべての実行中コンテナを停止して削除:
for /f "tokens=*" %i in ('docker ps -a -q') do docker stop %i for /f "tokens=*" %i in ('docker ps -a -q') do docker rm %i
すべてのイメージを強制削除:
for /f "tokens=*" %i in ('docker images -a -q') do docker rmi -f %i
未使用のリソースの一括削除:
docker system prune -a --volumes
-a
オプションは未使用イメージも含めて削除する--volumes
オプションは未使用ボリュームも削除する
Docker Desktopの再起動:
タスクトレイのDockerアイコンを右クリック→「Restart」を選択する
Docker設定の完全リセット(より根本的な問題の場合):
Docker Desktopを終了する
タスクトレイのDockerアイコンを右クリック→「Troubleshoot」→「Clean / Purge data」を選択する
「Reset to factory defaults」オプションを選択する