Windows環境でのDocker開発環境構築ガイド

【概要】WSL 2(Windows Subsystem for Linux 2)は、Windowsで Linux実行環境を提供する。

【目次】

  1. 前準備
  2. Docker Desktopのインストール、Docker エンジンの起動
  3. Miniconda3を使用したUbuntu開発環境の構築
  4. トラブルシューティング

サイト内の関連ページ

1. 前準備

WSL 2(Windows Subsystem for Linux 2)を有効化しておく必要がある。

WSL 2の有効化の手順は、次のページで説明

Windows上のLinux開発環境構築ガイド: WSL 2とUbuntuのインストール・設定・運用: 別ページ »で説明

  1. WSL 2の有効化状態確認:
    • コマンドプロンプトを起動する(例: Windowsキーを押し、「cmd」と入力)
    • 以下のコマンドを実行する:
    wsl --status
    
  2. WSL 2が使用するLinuxカーネルの更新

    セキュリティパッチの適用や機能改善のため、アップデートを行う。

    wsl --update
    
  3. 仮想化の確認:
    • タスクマネージャーを開く(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を使用したインストール

  1. Windowsで、管理者権限コマンドプロンプトを起動する(手順: Windowsキーまたはスタートメニュー、cmd と入力、右クリック、「管理者として実行」)。
  2. wingetが利用可能か確認する:
    winget --version
    
    winget --versionコマンドの実行結果
  3. Docker Desktopのインストール:
    winget install --scope machine Docker.DockerDesktop
    

B)手動でのインストール

  1. Docker Desktopのダウンロード:
    • 公式サイト(https://docs.docker.com/desktop/features/wsl/#download)にアクセス
    • インストーラをダウンロードする
  2. インストールの実行:
    • ダウンロードしたインストーラを実行する
    • 画面の指示に従ってインストールを完了する

2.2 Docker エンジンの起動と Docker Desktop の初期設定の確認

  1. Docker Desktopの起動:
    • Windowsのスタートメニューから起動する
  2. WSL 2の設定確認:
    • 画面右上の設定(Settings)ボタンをクリックする
    • 一般(General)タブを表示する
    • 「Use WSL 2 based engine」のチェックボックスが有効になっていることを確認する
    Docker Desktop設定画面でWSL 2が有効になっている状態

3. Miniconda3を使用したUbuntu開発環境の構築

3.1 前提条件

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 の作成

  1. コマンドプロンプトを起動する(例: Windowsキーを押し、「cmd」と入力)
  2. 以下のコマンドを実行する:
    notepad Dockerfile
    
    notepadコマンドでDockerfileを開く
  3. 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
docker buildコマンドの実行結果

3.5 コンテナの作成と実行

コマンドプロンプトで、次のコマンドを実行する。

docker run --name myubuntu --restart unless-stopped -p 8888:8888 -it myubuntu2404:1.0 /bin/bash

以下の実行画面は、コンテナ内でLinuxコマンド(pwd, ls)を実行し、「exit」で切断する例である。

docker runコマンド実行後のコンテナ内操作例

各オプションの説明:

3.6 環境の確認

3.7 Docker運用上の注意点

3.8 Miniconda3 の説明

Miniconda3は、Pythonとconda(パッケージ管理システム)を含むシステムである。

Miniconda3 の概要と機能

condaを使用してパッケージをインストールできる。依存関係を自動的に解決し、互換性のあるバージョンをインストールする。また、独立した仮想環境を作成できる。Windows、Linuxなどに対応している。Miniconda3は、Pythonの複数バージョンを管理し、共存させることもできる。

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

Miniconda3のトラブルシューティング

環境の作成やアクティベートに失敗する場合、既存の環境を削除して新しい環境を作成する。以下のコマンドを使用する。必要なデータは事前に保存する必要がある。

conda remove --name <env_name> --all
conda create --name <new_env_name> python=<version>
conda activate <new_env_name>

4. トラブルシューティング

4.1 wingetでのインストールの問題

  1. wingetの更新:
    winget upgrade
    
  2. キャッシュのクリア:
    winget source reset
    
  3. よくある問題と対処:
    • 「プログラムが見つかりません」エラー:
      winget source update
      
      でパッケージリストを更新する
    • インストールが途中で止まる場合:
      • 管理者権限でコマンドプロンプトを開いて実行する
      • または手動インストールに切り替える

4.2 コンテナとイメージとボリュームの破棄

注意: 次を実行することにより、コンテナとイメージとボリュームは、実行中のものも含め、すべて破棄される。もとに戻すことはできない。必要なデータは事前に保存する必要がある。

  1. すべての実行中コンテナを停止して削除:

    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
    
  2. すべてのイメージを強制削除:

    for /f "tokens=*" %i in ('docker images -a -q') do docker rmi -f %i
    
  3. 未使用のリソースの一括削除:

    docker system prune -a --volumes
    
    • -a オプションは未使用イメージも含めて削除する
    • --volumes オプションは未使用ボリュームも削除する
  4. Docker Desktopの再起動:

    • タスクトレイのDockerアイコンを右クリックし、「Restart」を選択する
  5. Docker設定の完全リセット:

    • Docker Desktopを終了する
    • タスクトレイのDockerアイコンを右クリックし、「Troubleshoot」から「Clean / Purge data」を選択する
    • 「Reset to factory defaults」オプションを選択する