Windows環境でのDocker開発環境構築ガイド
【概要】WSL 2(Windows Subsystem for Linux 2)は、Windows上でLinux実行環境を提供する機能である。本ガイドでは、WSL 2を基盤としてDocker環境を構築し、Ubuntu上でPython開発環境を整備する手順を説明する。
【主要コマンド一覧】以下は、本ガイドで構築する環境で使用する主要なDockerコマンドである。環境構築後のクイックリファレンスとして活用できる。
- Dockerイメージのビルド: docker build -t myubuntu2404:1.0 .
- イメージからのコンテナの作成と実行: docker run --name myubuntu --restart unless-stopped -p 8888:8888 -it myubuntu2404 /bin/bash
- 実行中の myubuntu コンテナに接続: docker exec -it myubuntu /bin/bash
- 停止中の myubuntu コンテナを実行中(Up)にする: docker start myubuntu
- 実行中の myubuntu コンテナを停止(Exited)する: docker stop myubuntu
- 実行中あるいは停止中のコンテナの一覧表示: docker ps -a
【目次】
【サイト内の関連ページ】
1. 前準備
Docker Desktop for Windowsは、WSL 2(Windows Subsystem for Linux 2)をバックエンドとして使用する。Docker Desktopをインストールする前に、WSL 2を有効化しておく必要がある。
WSL 2の有効化手順は、以下のページで説明している。
Windows上のLinux開発環境構築ガイド: WSL 2とUbuntuのインストール・設定・運用: 別ページ »
- WSL 2の有効化状態の確認:
- コマンドプロンプトを起動する(Windowsキーを押し、「cmd」と入力して実行)
- 以下のコマンドを実行する:
wsl --status - WSL 2が使用するLinuxカーネルの更新:
セキュリティパッチの適用や機能改善のため、以下のコマンドでアップデートを行う。
wsl --update - 仮想化機能の確認:
Docker DesktopおよびWSL 2は、CPUの仮想化機能を使用する。以下の手順で有効になっているか確認する。
- タスクマネージャーを開く(Ctrl + Shift + Esc)
- 「パフォーマンス」タブを選択し、「仮想化: 有効」と表示されていることを確認する
2. Docker Desktopのインストール、Dockerエンジンの起動
Docker Desktopは、Dockerコンテナ、Dockerイメージ、Dockerボリュームの一覧表示、状態確認、基本的な操作を行うためのGUIアプリケーションである。
Docker Desktopは、Windowsのスタートメニューから起動できる。Docker Desktopを起動すると、Dockerエンジンが自動的に起動する。
2.1 インストール
Docker Desktopには、Dockerデーモン(バックグラウンドで動作し、コンテナを管理するサービス)とDockerクライアント(dockerコマンドを提供するツール)が含まれている。以下に2つのインストール方法を示す。
A)wingetを使用したインストール
wingetは、Windowsの公式パッケージマネージャーである。コマンドラインからアプリケーションをインストールできる。
- 管理者権限でコマンドプロンプトを起動する。
- wingetが利用可能か確認する:
winget --version
- Docker Desktopをインストールする:
winget install --scope machine Docker.DockerDesktop
B)手動でのインストール
- Docker Desktopのダウンロード:
- 公式サイト(https://docs.docker.com/desktop/features/wsl/#download)にアクセスする
- インストーラをダウンロードする
- インストールの実行:
- ダウンロードしたインストーラを実行する
- 画面の指示に従ってインストールを完了する
2.2 Dockerエンジンの起動とDocker Desktopの初期設定の確認
- Docker Desktopの起動:
- Windowsのスタートメニューから「Docker Desktop」を選択して起動する
- WSL 2バックエンドの設定確認:
- 画面右上の設定(Settings)ボタンをクリックする
- 「General」タブを表示する
- 「Use WSL 2 based engine」のチェックボックスが有効になっていることを確認する
3. Miniconda3を使用したUbuntu開発環境の構築
本章では、DockerコンテナとしてUbuntu環境を構築し、Miniconda3を用いてPython開発環境を整備する手順を説明する。Miniconda3の詳細については3.8節を参照のこと。
3.1 前提条件
以下の環境が整っていることを確認する。
- WSL 2が有効化されていること(1章参照)
- Docker Desktop for Windowsがインストール済みであること(2章参照)
- NVIDIAグラフィックドライバーがインストール済みであること(GPU使用時のみ)
3.2 NVIDIAドライバの確認(GPU使用時)
機械学習やディープラーニングでGPUを活用する場合、DockerコンテナからGPUにアクセスできるよう設定する。GPUを使用しない場合、本節はスキップしてよい。
nvidia-smiコマンドを実行して、NVIDIAドライバが正しくインストールされ動作しているかを確認する。
nvidia-smi
ドライバが正しく動作している場合、GPUの情報(モデル名、メモリ使用量等)が表示される。エラーが発生する場合は、NVIDIAの公式サイトから最新のドライバをインストールする。
Docker DesktopでGPUを使用するには、Dockerの設定ファイル(daemon.json)に以下の設定を追加する。このファイルは通常、C:\Users\<ユーザー名>\.docker\daemon.jsonまたは Docker Desktopの Settings > Docker Engine から編集できる。
{
"features": {"buildkit": true},
"experimental": true,
"runtimes": {
"nvidia": {
"path": "nvidia-container-runtime",
"runtimeArgs": []
}
}
}
3.3 Dockerfileの作成
Dockerfileは、Dockerイメージを構築するための設定ファイルである。ベースイメージの指定、パッケージのインストール、環境設定などを記述する。
- コマンドプロンプトを起動する。
- 以下のコマンドを実行してDockerfileを作成する:
notepad Dockerfile
- Dockerfileに以下の内容を記述して保存する:
このDockerfileは、Ubuntu 24.04 LTS(Long Term Support: 長期サポート版)をベースイメージとして使用し、Python開発環境を構築する。Miniconda3を用いてPython 3.12環境を作成し、NumPy、Pandas等の科学技術計算ライブラリを導入する。また、Jupyter Notebookをポート8888で起動するよう設定し、cmake、git等の開発ツールも導入する。
FROM ubuntu:24.04 # 環境変数の設定 # DEBIAN_FRONTEND=noninteractive: パッケージインストール時の対話的プロンプトを抑制 ENV PATH=/opt/conda/bin:$PATH \ SHELL=/bin/bash \ DEBIAN_FRONTEND=noninteractive # システムパッケージのインストール RUN apt-get update && apt-get upgrade -y && \ apt-get install -y wget curl git cmake build-essential ufw && \ rm -rf /var/lib/apt/lists/* # 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 && \ 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 && \ jupyter notebook --allow-root --ip=* --port=8888 --no-browser"]
3.4 Dockerイメージのビルド
コマンドプロンプトで、以下のdocker buildコマンドを実行する。このコマンドは、カレントディレクトリのDockerfileを基にイメージを生成する。初回のビルドには数分から十数分かかる場合がある。
docker build -t myubuntu2404:1.0 .
作成したイメージには、識別用の名前(例: myubuntu2404)とバージョン管理用のタグ(例: 1.0)を設定できる。タグを活用することで、環境の変更履歴を管理しやすくなる。
ビルド完了後、docker imagesコマンドにより、ローカルに保存されたイメージの一覧を表示できる。
docker images
3.5 コンテナの作成と実行
コマンドプロンプトで、以下のコマンドを実行してコンテナを作成・起動する。
docker run --name myubuntu --restart unless-stopped -p 8888:8888 -it myubuntu2404:1.0 /bin/bash
以下は、コンテナ内でLinuxコマンド(pwd、ls)を実行し、「exit」で切断する例である。
各オプションの説明:
--name myubuntu: コンテナに識別用の名前を付与する--restart unless-stopped: 明示的に停止しない限り、異常終了時に自動的に再起動する-it: コンテナと対話的に操作できるようにする(-i: 標準入力を開く、-t: ターミナルを割り当てる)-p 8888:8888: ホストのポート8888をコンテナのポート8888にマッピングする(Jupyter Notebook用)myubuntu2404:1.0: 使用するイメージとタグを指定する/bin/bash: コンテナ起動時に実行するシェルを指定する
3.6 環境の確認
コンテナが正しく構築されたことを確認するため、以下のコマンドを実行する。
- コンテナへの接続: 実行中のmyubuntuコンテナに接続する。「exit」で切断できる。
docker exec -it myubuntu /bin/bash exit
- Pythonバージョンの確認:
docker exec myubuntu python --version
- conda環境情報の確認:
docker exec myubuntu conda info
- conda環境一覧の確認:
docker exec myubuntu conda env list
- インストール済みパッケージの確認:
docker exec myubuntu conda list
3.7 Docker運用上の注意点
Dockerを運用する際は、データのバックアップとリソース監視が重要である。コンテナを削除すると内部のデータも失われるため、重要なデータはボリュームに保存し、定期的にバックアップを取得する。
ボリュームのバックアップと復元
Dockerボリュームの内容をtar形式(複数のファイルを1つにまとめるアーカイブ形式)でバックアップ・復元できる。
- ボリュームの内容を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オプションは、コマンド実行後にコンテナを自動的に削除する。バックアップファイルは定期的に外部ストレージにコピーすることを推奨する。
コンテナのリソース監視
コンテナの動作状況を監視することで、問題の早期発見や性能の最適化に役立てることができる。
# コンテナのリソース使用状況(CPU、メモリ等)を確認
docker stats myubuntu
# コンテナ内で実行中のプロセスを確認
docker top myubuntu
# コンテナのログを確認
docker logs myubuntu
# 直近の100行のログを表示
docker logs --tail 100 myubuntu
リソース使用量が高い場合は、必要に応じてリソース制限を設定する。異常な動作やエラーを早期に発見するため、ログを定期的に確認する。
3.8 Miniconda3の説明
Miniconda3は、Pythonとconda(パッケージ管理システム)を含む軽量なディストリビューションである。本節では、Miniconda3の基本的な使い方を説明する。
Miniconda3の概要と機能
condaを使用してパッケージをインストールできる。condaは依存関係を自動的に解決し、互換性のあるバージョンをインストールする。また、プロジェクトごとに独立した仮想環境を作成できるため、異なるプロジェクトで異なるバージョンのライブラリを使用できる。Windows、Linux、macOSに対応しており、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を使用する。その際は、新しいconda環境を作成し、その環境内でpipを使用することを推奨する。これにより、他の環境への影響を回避できる。
conda create -n myenv python=<version>
conda activate myenv
pip install --upgrade-strategy only-if-needed <package_name>
--upgrade-strategy only-if-neededオプションは、依存関係が必要な場合にのみ関連するパッケージをアップグレードする設定である。
Miniconda3環境設定のバックアップと再現
環境設定をファイルにエクスポートすることで、同一の環境を別のマシンで再現できる。チーム開発や環境の移行に有用である。
# 現在の環境設定をエクスポート
conda env export > environment.yml
# エクスポートした環境の内容確認
cat environment.yml
# 別の環境で環境を再現
conda env create -f environment.yml
environment.ymlには、Pythonバージョンやパッケージ情報が記録される。パッケージのバージョンも明示的に記録されるため、同一の環境を再現できる。
Miniconda3のトラブルシューティング
環境の作成やアクティベートに失敗する場合、既存の環境を削除して新しい環境を作成する。以下のコマンドを使用する。
conda remove --name <env_name> --all
conda create --name <new_env_name> python=<version>
conda activate <new_env_name>
必要なデータは事前に保存する必要がある。
4. トラブルシューティング
4.1 wingetでのインストールの問題
- wingetの更新:
winget upgrade - キャッシュのクリア:
winget source reset - よくある問題と対処:
- 「プログラムが見つかりません」エラー:
上記コマンドでパッケージリストを更新する。winget source update - インストールが途中で止まる場合:
- 管理者権限でコマンドプロンプトを開いて再度実行する
- または手動インストールに切り替える
- 「プログラムが見つかりません」エラー:
4.2 コンテナとイメージとボリュームの破棄
Docker環境に問題が発生し、初期状態からやり直したい場合や、ディスク容量を解放したい場合に、以下の手順でDocker環境を完全にリセットできる。
注意: 以下のコマンドを実行すると、実行中のものも含め、すべてのコンテナ、イメージ、ボリュームが破棄される。この操作は元に戻すことができない。必要なデータは事前に保存する必要がある。
- すべての実行中コンテナを停止して削除:
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」オプションを選択する