コンテンツにスキップ

DockerでRDEToolKitを使用する方法

概要

RDEToolKitを使った構造化処理をDocker上で動作させる方法について説明します。Dockerを使用することで、環境の一貫性を保ち、デプロイメントを簡素化できます。

前提条件

  • Docker Desktop または Docker Engine がインストールされていること
  • 基本的なDockerコマンドの知識
  • RDEToolKitプロジェクトの基本構造の理解

ディレクトリ構造

構造化処理プロジェクトの推奨ディレクトリ構造:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
(構造化プロジェクトディレクトリ)
├── container
│   ├── data/
│   ├── modules/
│   ├── Dockerfile
│   ├── main.py
│   └── requirements.txt
├── inputdata
│   ├── input1
│   └── input2
├── README.md
└── template
    ├── batch.yaml
    ├── catalog.schema.json
    ├── invoice.schema.json
    ├── jobs.template.yaml
    ├── metadata-def.json
    └── tasksupport

Dockerfileの作成

container/Dockerfileを作成します。以下は基本的なDockerfileの例です:

container/Dockerfile
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
FROM python:3.11.9

WORKDIR /app

COPY requirements.txt .

RUN pip install -r requirements.txt

COPY main.py /app
COPY modules/ /app/modules/

カスタマイズ

使用するDockerイメージや各種実行文は、各プロジェクトの要件に応じて自由に変更してください。

参考資料

Docker Hub Container Image Libraryでベースイメージを探すことができます。

イメージのビルド

基本的なビルド

Dockerfileが配置されているディレクトリに移動して、docker buildコマンドを実行します:

イメージビルド
1
2
3
4
5
# 基本コマンド
docker build -t イメージ名:タグ パス

# 実行例
docker build -t sample_tif:v1 .

オプション説明

  • -tオプション: イメージ名とタグを指定します。イメージ名は任意ですが、一意であることが望ましいです。
  • パス: Dockerfileが存在するディレクトリのパスを指定します。カレントディレクトリの場合は.を指定します。

プロキシ環境での対応

プロキシ環境下でビルドする場合は、以下のオプションを追加してください:

プロキシ環境でのビルド
1
2
3
4
docker build -t sample_tif:v1 \
  --build-arg http_proxy=http://proxy.example.com:8080 \
  --build-arg https_proxy=http://proxy.example.com:8080 \
  .

pipコマンドエラーの対処法

pipコマンドでSSL証明書エラーが発生する場合の対処法:

pip.confファイルの作成

Dockerfileと同じ階層にpip.confファイルを作成します:

pip.conf
1
2
3
4
5
[install]
trusted-host =
    pypi.python.org
    files.pythonhosted.org
    pypi.org

Dockerfileの修正

pip.confを使用するようにDockerfileを修正します:

修正後のDockerfile
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
FROM python:3.11

WORKDIR /app

COPY requirements.txt .
COPY pip.conf /etc/pip.conf

RUN pip install -r requirements.txt

COPY main.py /app
COPY modules/ /app/modules/

Dockerコンテナの実行

基本的な実行方法

ビルドしたイメージを実行するには、docker runコマンドを使用します:

コンテナ実行
1
2
3
4
5
# 基本コマンド
docker run [オプション] イメージ名 [コマンド]

# 実行例
docker run -it -v ${HOME}/sample_tif/container/data:/app2/data --name "sample_tifv1" sample_tif:v1 "/bin/bash"

オプション詳細

オプション 説明
-it 対話的なモードでコンテナを実行。ターミナルやコマンドラインインタフェースを利用可能
-v ホストパス:コンテナパス ホストとコンテナ間でディレクトリをマウント
--name "コンテナ名" コンテナに名前を付ける
イメージ名:タグ 実行するDockerイメージの名前とバージョン
"/bin/bash" コンテナ内で実行するコマンド

データボリュームのマウント

構造化処理をテストするため、入力ファイルのディレクトリをマウントします:

データマウント例
1
2
3
4
5
6
docker run -it \
  -v ${HOME}/sample_tif/container/data:/app2/data \
  -v ${HOME}/sample_tif/inputdata:/app2/inputdata \
  --name "sample_tifv1" \
  sample_tif:v1 \
  "/bin/bash"

コンテナ内でのプログラム実行

コンテナが起動したら、開発したプログラムを実行します:

プログラム実行
1
2
3
4
5
# 作業ディレクトリに移動
cd /app2

# 構造化処理プログラムを実行
python3 /app/main.py

ターミナルの変化

実行すると、ターミナルがroot@(コンテナID):のように変化します。

コンテナの管理

コンテナの終了

コンテナ終了
1
exit

コンテナの再起動

停止したコンテナの再起動
1
2
docker start sample_tifv1
docker exec -it sample_tifv1 /bin/bash

コンテナの削除

コンテナ削除
1
docker rm sample_tifv1

ベストプラクティス

マルチステージビルド

本番環境では、マルチステージビルドを使用してイメージサイズを最適化できます:

マルチステージDockerfile
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# ビルドステージ
FROM python:3.11 as builder
WORKDIR /app
COPY requirements.txt .
RUN pip install --user -r requirements.txt

# 実行ステージ
FROM python:3.11-slim
WORKDIR /app
COPY --from=builder /root/.local /root/.local
COPY main.py /app
COPY modules/ /app/modules/
ENV PATH=/root/.local/bin:$PATH

.dockerignoreファイル

不要なファイルをビルドコンテキストから除外します:

.dockerignore
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
.git
.gitignore
README.md
Dockerfile
.dockerignore
__pycache__
*.pyc
*.pyo
*.pyd
.Python
env
pip-log.txt
pip-delete-this-directory.txt
.tox
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.log
.venv

トラブルシューティング

よくある問題と解決方法

  1. ポート競合エラー
  2. 既に使用されているポートを避ける
  3. docker psで実行中のコンテナを確認

  4. ボリュームマウントエラー

  5. パスが正しいか確認
  6. 権限設定を確認

  7. メモリ不足エラー

  8. Dockerのメモリ制限を確認
  9. 不要なコンテナを停止

次のステップ