Docker Desktop for WindowsでCron実行専用コンテナを作成する

IT

前回の記事で、Docker Desktop上にCoderを導入し、Webのみで、Dockerコンテナを構築したり、プログラムを作成してデプロイを行ったりする環境を作りました。

今回は、Coderを使って、他のコンテナに対してスケジュール実行するためのCron実行専用コンテナを作成します。


まず、Coderを起動し、ログインします。

前回作成した、Coderフォルダと同一階層に「Cron」フォルダを作成し、下記4つのファイルを作成します。

  • .env
  • crontab
  • docker-compose.yml
  • Dockerfile

Coderの画面では、以下のような感じになります。


それぞれファイルに以下内容を書き込みます。

■.env

Docker Desktop for Windowsでコンテナを実行する場合で、コンテナ内からDockerコマンドを実行したい場合に作成しておきます。

COMPOSE_CONVERT_WINDOWS_PATHS=1
view raw .env hosted with ❤ by GitHub

■crontab

Cron実行専用コンテナでスケジュールを設定するためのファイルです。

# [コンテナ]内で[実行シェル]を15分に1度実行する
*/15 * * * * docker exec -i [コンテナ] [実行シェル]
view raw crontab hosted with ❤ by GitHub

■docker-compose.yml

Dockerfileを起動するための定義です。

version: '3'
services:
cron:
restart: always
build: .
container_name: 'cron'
volumes:
- '/var/run/docker.sock:/var/run/docker.sock'

■Dockerfile

コンテナの元にするイメージは「ubuntu」です。

設定は、日本語化、Cronに必要なモジュールのインストールを実施しています。

FROM ubuntu
USER root
RUN apt-get update
RUN apt-get -y install locales && \
localedef -f UTF-8 -i ja_JP ja_JP.UTF-8
ENV LANG ja_JP.UTF-8
ENV LANGUAGE ja_JP:ja
ENV LC_ALL ja_JP.UTF-8
ENV TZ JST-9
ENV TERM xterm
RUN apt-get -y install busybox-static
RUN apt-get -y install docker.io
COPY --chown=root:root ./crontab /var/spool/cron/crontabs/root
CMD ["busybox", "crond", "-f", "-L", "/dev/stderr"]
view raw Dockerfile hosted with ❤ by GitHub

Coderのターミナルで、下記コマンドを実行し、コンテナを起動すれば完了です。


cd Cron

sudo docker-compose build

sudo docker-compose up -d

ポイントは、BusyBoxのcronを利用している点です。

通常のcronでは、環境変数を独自に持っており、Dockerのホストから引き継いだDockerコマンドを実行するには、別途cron側に環境変数を渡してやる必要があります。

BusyBoxのcronを利用すれば、環境変数引き継ぎ処理を省略できます。

コメント

タイトルとURLをコピーしました