Windows環境でのDocker開発環境構築ガイド
【概要】WSL 2(Windows Subsystem for Linux 2)は、Windowsで Linux実行環境を提供する。
- 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. 前準備
WSL 2(Windows Subsystem for Linux 2)を有効化しておく必要がある。
- WSL 2の有効化状態確認:
- コマンドプロンプトを起動する(例: Windowsキーを押し、「cmd」と入力)
- 以下のコマンドを実行する:
wsl --status - WSL 2が使用するLinuxカーネルの更新
セキュリティパッチの適用や機能改善のため、アップデートを行う。
wsl --update - 仮想化の確認:
- タスクマネージャーを開く(Ctrl + Shift + Esc)
- 「パフォーマンス」タブで仮想化が有効になっているか確認する
2. Docker Desktopのインストール、Docker エンジンの起動
Docker Desktopにより、Dockerコンテナ、Dockerイメージ、Dockerボリュームの一覧表示、状態確認、基本的な操作を行うことができる。
Docker Desktopは、Windowsのスタートメニューから起動できる。Docker Desktopを起動することにより、Docker エンジンが起動する。
2.1 インストール
Dockerエンジンを構成するDockerデーモンとクライアントを含むDocker Desktopのインストール手順を示す。
インストールは、以下の2つの方法から選択可能である。
A)wingetを使用したインストール
- Windowsで、管理者権限でコマンドプロンプトを起動する(手順: Windowsキーまたはスタートメニュー、
cmdと入力、右クリック、「管理者として実行」)。 - 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のスタートメニューから起動する
- WSL 2の設定確認:
- 画面右上の設定(Settings)ボタンをクリックする
- 一般(General)タブを表示する
- 「Use WSL 2 based engine」のチェックボックスが有効になっていることを確認する
3. Miniconda3を使用したUbuntu開発環境の構築
3.1 前提条件
- WSL 2がインストール済みであること
- Docker Desktop for Windowsがインストール済みであること
- NVIDIAグラフィックドライバーがインストール済みであること(GPU使用時)
3.2 NVIDIAドライバの確認(GPU使用時)
GPUを使用する場合、nvidia-smiコマンドを実行して、NVIDIAドライバが正しくインストールされ動作しているかを確認する。
nvidia-smi
ドライバが正しく動作している場合、GPUの情報が表示される。エラーが発生する場合は、NVIDIAの公式サイトから最新のドライバをインストールする。
Docker DesktopでGPUを使用するには、設定ファイル(daemon.json)に以下の設定を追加する。
{
"features": {"buildkit": true},
"experimental": true,
"runtimes": {
"nvidia": {
"path": "nvidia-container-runtime",
"runtimeArgs": []
}
}
}
3.3 Dockerfile の作成
- コマンドプロンプトを起動する(例: Windowsキーを押し、「cmd」と入力)
- 以下のコマンドを実行する:
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 # 環境変数の設定 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を基にイメージを生成する。作成したイメージには、識別用の名前(例: myubuntu2404)とバージョン管理用のタグ(例: 1.0)を設定できる。
その後、docker imagesコマンドにより、ローカルに保存された全てのイメージを一覧表示できる。
docker build -t myubuntu2404:1.0 .
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)、疑似TTYを割り当てる(-t)-p 8888:8888: Jupyter Notebookのためにポート8888のマッピングを行うmyubuntu2404:1.0: 使用するベースイメージを指定する/bin/bash: コンテナ起動時に実行するコマンドを指定する
3.6 環境の確認
- 実行中の myubuntu コンテナに接続する。「exit」で切断する。
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
3.7 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- リソース使用量を監視し、必要に応じてリソース制限を設定する
- 異常な動作やエラーを早期に発見するため、ログを定期的に確認する
3.8 Miniconda3 の説明
Miniconda3は、Pythonとconda(パッケージ管理システム)を含むシステムである。
Miniconda3 の概要と機能
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バージョンやパッケージ情報が記録される- パッケージのバージョンも明示的に記録されるため、環境の再現が可能である
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 コンテナとイメージとボリュームの破棄
注意: 次を実行することにより、コンテナとイメージとボリュームは、実行中のものも含め、すべて破棄される。もとに戻すことはできない。必要なデータは事前に保存する必要がある。
すべての実行中コンテナを停止して削除:
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」オプションを選択する