Dockerでpythonの実行環境を作る
環境
Windows11 + WSL(Ubuntu)
Docker Desktop
VS Code
Dockerを使ってJupyter Notebookを設定する
1.ディレクトリ構成
project_directory/
├── compose.yaml
├── Dockerfile
├── .env
├── requirements.txt
└── notebooks/
ディレクトリ名は任意
2.Dockerfileを作成
FROM python:3.9
RUN pip install jupyterlab
WORKDIR /notebooks
EXPOSE 8888
CMD ["jupyter", "lab", "--ip=0.0.0.0", "--allow-root", "--no-browser"]
3.compose.yamlファイルを作成
services:
jupyter:
build:
context: .
dockerfile: Dockerfile
ports:
- "8888:8888"
volumes:
- ./notebooks:/notebooks
4.Docker Composeを使ってサービスを起動
docker compose up --build
これで起動します。(多分)
requirements.txtファイル
1.requirements.txtファイルを作成し、必要なPythonパッケージを記述
numpy
pandas
matplotlib
2.Dockerfileを更新して、requirements.txtファイルからパッケージをインストールするようにする
FROM python:3.9
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt && \
pip install jupyterlab
WORKDIR /notebooks
EXPOSE 8888
CMD ["jupyter", "lab", "--ip=0.0.0.0", "--allow-root", "--no-browser"]
3.compose.yamlは変更なし
4.Docker Composeを使ってサービスを起動
docker compose up --build
5.Jupyter Notebook内で、インストールしたパッケージ(numpy、pandas、matplotlib)をimportして使用
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
.envファイル
1..envファイルを作成し、必要な環境変数を定義
JUPYTER_PORT=8888
API_KEY=your_api_key
API_SECRET=your_api_secret
2.compose.yamlファイルを更新
services:
jupyter:
build:
context: .
dockerfile: Dockerfile
ports:
- "${JUPYTER_PORT}:8888"
volumes:
- ./notebooks:/notebooks
environment:
- API_KEY=${API_KEY}
- API_SECRET=${API_SECRET}
3.Dockerfileを更新
FROM python:3.9
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt && \
pip install jupyterlab
WORKDIR /notebooks
EXPOSE 8888
CMD ["jupyter", "lab", "--ip=0.0.0.0", "--allow-root", "--no-browser"]
4.サービスを起動
docker compose up --build
5.コンテナ内で実行されるPythonスクリプトやJupyter Notebook内で、環境変数を参照
import os
api_key = os.environ['API_KEY']
api_secret = os.environ['API_SECRET']
Dockerコマンド
Docker Composeを使用して起動したサービスを停止
docker compose down
Docker Composeで管理されているサービスを再起動
docker compose up
Dockerfileやcompose.yamlに変更があった場合に、イメージを再ビルド
docker compose up --build
Q&A
Q. requirements.txtを更新した場合は?
A. docker compose up --build
以上になります。