見出し画像

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

以上になります。

いいなと思ったら応援しよう!