備忘：Dockerを利用したPythonの構築手順（Windows11 Pro）＠2025年版

# 目次
１．[フォルダ構成](#フォルダ構成)
２．[ファイルの準備](#ファイルの準備)
　　①必須：[Dockerfile](#ファイルの準備)
　　②必須：[docker-compose.yml](#ファイルの準備)
　　③任意：[.wslconfig](#ファイルの準備)
３．[Windows11でWSL2を使えるようにする](#Windows11でWSL2を使えるようにする)
４．[Docker Desktop for Windowsをインストールする]()
５．[コンテナの作成～JupyterLab起動まで](#コンテナの作成～JupyterLab起動まで)


:::note alert
**重要**
この記事ではWindows11 Pro環境での構築手順を説明しています。
:::

## フォルダ構成

```
📁root
 ├─📁py3
 │  ├─📁root_jupyter
 │  └─📄Dockerfile
 ├─📁workspace
 └─📄docker-compose.yml
```

この構成では、`root`ディレクトリ内に以下のサブディレクトリとファイルを配置。

`py3`: Python 3環境に関連するファイルを格納するフォルダ
`root_jupyter`: Jupyter関連の設定やファイルを格納するサブフォルダ
`Dockerfile`: Dockerの設定ファイル
`workspace`: プロジェクトの作業用ディレクトリ
`docker-compose.yml`: コンテナ設定を記述したYAMLファイル


## ファイルの準備

### Dockerfile
```
FROM python:3.9.7-buster
ARG DEBIAN_FRONTEND=noninteractive


RUN apt-get update && apt-get install -y \
    tzdata \
&&  ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime \
&&  apt-get clean \
&&  rm -rf /var/lib/apt/lists/*

ENV TZ=Asia/Tokyo

RUN python3 -m pip install --upgrade pip \
&&  pip install --no-cache-dir \
    black \
    jupyterlab \
    jupyterlab_code_formatter \
    jupyterlab-git \
    lckr-jupyterlab-variableinspector \
    jupyterlab_widgets \
    ipywidgets \
    import-ipynb

RUN wget https://noto-website-2.storage.googleapis.com/pkgs/NotoSansCJKjp-hinted.zip
RUN unzip NotoSansCJKjp-hinted.zip -d /usr/share/fonts/NotoSansCJKjp


RUN pip install --no-cache-dir \
    numpy \
    pandas \
    scipy \
    scikit-learn \
    pycaret \
    matplotlib \
    japanize_matplotlib \
    mlxtend \
    seaborn \
    plotly \
    requests \
    beautifulsoup4 \
    Pillow \
    opencv-python \
    openpyxl \
    dask
    

RUN pip install --no-cache-dir \
    pydeps \
    graphviz \
    pandas_profiling \
    shap \
    umap \
    xgboost \
    lightgbm
```

**②docker-compose.yml**
```
version: "3.9"
services:
  py3:
    build:
      context: ./py3
      dockerfile: Dockerfile
    container_name: 'python3'
    restart: always
    entrypoint: >
      jupyter-lab
      --allow-root
      --ip=0.0.0.0
      --port=8888
      --no-browser
      --NotebookApp.token=''
      --notebook-dir=/workspace
    expose:
      - "8888"
    ports:
      - "127.0.0.1:8888:8888"
    volumes:
      - ./py3/root_jupyter:/root/.jupyter
      - ./workspace:/workspace

    # GPUを使用する際のみ以下も設定
    # environment:
    #   - "NVIDIA_VISIBLE_DEVICES=all"
    #   - "NVIDIA_DRIVER_CAPABILITIES=all"
    # deploy:
    #   resources:
    #     reservations:
    #       devices:
    #         - capabilities:
    #           - gpu
```

<a id="anchor4"></a>
**③.wslconfig**

:::note warn
**任意設定**
仮想マシンのメモリやCPUの使用量を表示するプロセス「Vmmem」メモリ使用量を制限する。
この記述をしないと、仮想マシンがメモリを最大でPCの半分占有してしまい他のシステム動作に影響を与えることがある。機械学習など重たい処理を行わない場合は、GB数を調整しておく。
:::

この`.wslconfig`は、ユーザー名の配下に格納しておく。
```
📁C
 └─📁Users
     └─📁UserName
        └─📄.wslconfig
```
```
[wsl2]
memory=1GB
```


## Windows11でWSL2を使えるようにする
:::note alert
**重要**
Windows10の場合とは手順が異なります。
MacOSの場合には不要な工程です。
:::

**1）バージョン確認**
`Windows`キーを押して、`winver`と入力する。Windows11 Proであることを確認。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4042286/df0b8a96-f6ea-4da2-aa6c-de4723f97917.png)

**2）WSL2の有効化～Ubuntuのディストリビューションのインストール**
`Windows`キーを押して、`Windows PowerShell`や`ターミナル`を開く。
Windows10では、複数工程を踏む必要があったが、Windows11では1行たたくだけ。

```
$ wsl --install
```
:::note warn
**補足**
Windows10の場合
・「Linux用Windowsサブシステム（WSL）」と「仮想マシン プラットフォーム」を有効化する
・WSL2用Linuxカーネルをダウンロード・インストールする
・WSL2を既定のバージョンとする
・Ubuntuディストリビューションをダウンロード・インストールする
:::


## Docker Desktop for Windowsをインストールする
**1）Dockerの公式サイト（https://www.docker.com/ja-jp/products/docker-desktop/）にアクセス**
**2）遷移先の画面で「Download for Windows」をクリックする。**
　※「Docker Desktop for Windows」のインストーラがダウンロードされる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4042286/0d89fc06-2518-4c7c-a5f7-1cae053150d7.png)
**3）ダウンロードしたらインストーラをダブルクリックしてインストールをすすめる**
**4）インストーラが起動したら、「OK」をクリックし画面の指示に従ってインストールをすすめる。**
　※「Configuration」のチェックはそのままでOK。
**5）Docker Desktopが起動するのでAccept→以降Skipの順で進みDockerエンジンを起動。**
　※Dockerエンジンを使用していないと今回の設定や、JupyterLabへの遷移ができない。
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4042286/a2ae3275-66e1-4a61-9f08-556e6f9b728d.png)

**6）`Windows PowerShell`を立ち上げる。**
　※dockerとたたいてスクリプト返ってきたらOK、何も返ってこないときはコンテナの立ち上げを確認。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4042286/3e71228c-0fa2-42a4-a3ad-433b39808e0e.png)



## コンテナの作成～JupyterLab起動まで
**1）フォルダ構成・ファイルの格納を再確認**
```
📁root
 ├─📁py3
 │  ├─📁root_jupyter
 │  └─📄Dockerfile
 ├─📁workspace
 └─📄docker-compose.yml
 ```

**2）ディレクトリの指定**
```
$ cd root/<*rootフォルダをDDする>
```

**3）コンテナの作成**
```
$ docker compose up -d --build
```

**4）コンテナの確認**
```
$ docker container ls
```

**5）コンテナへの接続**
```
$ docker exec -it <CONTAINER ID> bash
```

**6）Pythonのバージョン確認**
```
$ python --version
```

**7）Pythonのモジュールやライブラリがインストールできるかを確認**
　※汎用的に使うものであればDockerfileに追記しておく。
```
$ python -m pip install <MODULE>
```
e.g.) python -m pip install selenium

**8）Jupyter Labの起動**
下記へ遷移できたら構築の手順は完了。
http://localhost:8888