Dockerコンテナ内でcronジョブを実行する方法

Docker

Dockerコンテナ内で定期的なタスクを実行する必要がある場合、cronジョブを活用することができます。
この記事では、Python 3.11をベースにしたDockerコンテナ内でcronジョブを実装する手順を紹介します。

Dockerfileを作成する

最初に、Dockerfileを作成します。以下のコードは、Python 3.11をベースとしてcronをインストールし、cronジョブの設定を行うものです。

FROM python:3.11-bullseye

# cronインストール
RUN apt-get update && apt-get install -y cron

# cronジョブファイルをコピー
COPY ./cron/cronjob_data_loader /etc/cron.d/cronjob_data_loader

# cronジョブを登録
RUN crontab /etc/cron.d/cronjob_data_loader

# cronをフォアグラウンドで実行
CMD ["cron", "-f"]

このDockerfileは、Pythonベースのコンテナにcronをインストールし、cronジョブファイルをコピーして登録し、最後にcronをフォアグラウンドで実行します。

cronジョブファイルを作成する

次に、cronジョブを実行するためのスケジュールとコマンドを含むジョブファイル(例:cronjob_data_loader)を作成します。このファイルはDockerコンテナ内で/etc/cron.d/ディレクトリにコピーされます。

cronジョブファイル(cronjob_data_loader)のサンプルは次の通りです。

# cronjob_data_loader
# 毎日午前3時にデータローダースクリプトを実行する
0 3 * * * root /usr/bin/python3 /path/to/your/script.py

この例では、毎日午前3時にPythonスクリプトを実行するcronジョブが設定されています。必要に応じて、ジョブのスケジュールとコマンドをカスタマイズしてください。

Dockerイメージをビルドする

Dockerfileとcronジョブファイルが準備できたら、Dockerイメージをビルドします。

docker build -t my-cron-container .

Dockerコンテナを実行する

Dockerイメージをビルドしたら、cronジョブを実行するDockerコンテナを起動します。

docker run -d my-cron-container

これにより、cronジョブが自動的に定期的に実行されるようになります。

まとめ

この記事では、Dockerコンテナ内でcronジョブを実行する手順を紹介しました。
Dockerを使用することで、アプリケーションやタスクのスケジューリングを効果的に管理できます。
必要なジョブファイルを作成し、Dockerコンテナをビルドして実行することで、定期的なタスクを簡単かつ効果的に実行できます。

Docker

Posted by snow