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

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コンテナをビルドして実行することで、定期的なタスクを簡単かつ効果的に実行できます。

次に読むおすすめ記事

WSL2とDockerを使ったWindows開発環境の構築手順や高速化設定、トラブル解決を体系的に学びたい方は、以下の完全ガイドもあわせて参考にしてください。

WSL2+Dockerで作るWindows開発環境構築まとめ
WindowsマシンでWeb開発やバックエンド開発、AIアプリ開発を行う際、いまや欠かせない標準構成となったのが「Windows + WSL2 + Docker + VS Code」の組み合わせです。かつては「Web開発といえばMac一択」…