有时只需要运行最简单的单命令cron任务。alpine Docker镜像提供了一个很好的选择,这个镜像通过busybox提供了一个简单灵活的cron包。

1. 挂载卷

复杂的定时任务,可以通过挂载卷的方式。

1
docker run -it --rm -v $PWD/tasks.cron:/tasks.cron alpine:3.5 sh -c "crontab /tasks.cron && crond -f -L /dev/stdout"

tasks.cron

1
* * * * * echo hello

2. 构建Docker镜像

构建自己的Docker镜像,通过使用ENTRYPOINT可以更简洁的运行cron任务

1
2
3
4
5
6
7
FROM alpine:3.8

LABEL maintainer="xwxwgo.com"

COPY entrypoint.sh /
RUN chmod +x /entrypoint.sh
ENTRYPOINT [ "/entrypoint.sh" ]

entrypoint.sh

1
2
3
4
#!/bin/sh
set -e

echo "$1" | crontab - && crond -f -L /dev/stdout

构建、执行

1
2
3
4
# 构建镜像
$ docker build -t xw-cron ./
# 执行
$ docker run -it --rm xw-cron "* * * * * echo hello"

More