Django + docker + 周期性命令
Django + docker + periodic commands
运行宁 periodic/scheduled 任务(如 manage.py custom_command)的最佳实践是什么 运行宁 Django 与 docker( docker-撰写) ?
f.e。最常见的情况 - ./manage.py clearsessions
- Django 推荐 运行 它与 cronjobs...
- 但是Docker不建议向单个容器添加超过一个运行ning服务...
我想我可以从同一图像为我需要的每个命令创建一个 docker-compose 服务 运行 - 并且该命令应该 运行 具有所需的无限循环睡觉,但是对于每个需要安排的命令来说,这样做似乎有点过头了
你有什么建议?
使用您的 Django 应用程序创建一个 docker 图像。
您可以将它用于 运行 您的 Django 应用程序(Web 界面),同时,使用 cron 通过将命令传递给 docker 可执行文件来安排您的周期任务,像这样:
docker exec --rm your_container python manage.py clearsessions
--rm
将确保 docker 在完成后删除容器;否则你很快就会停止没有用的容器。
您还可以传入任何额外的参数,例如使用 -e
修改环境:
docker exec --rm -e DJANGO_DEBUG=True -e DJANGO_SETTINGS_MODULE=production \
python manage.py clearsessions
对我有用的方式
在我的 django 项目中,我有一个这样的 crontab 文件:
0 0 * * * root python manage.py clearsessions > /proc/1/fd/1 2>/proc/1/fd/2
Installed/configured 我的 Dockerfile 中的 cron
RUN apt-get update && apt-get -y install cron
ADD crontab /etc/cron.d/crontab
RUN chmod 0644 /etc/cron.d/crontab
并在 docker-compose.yml 中添加一个新服务,它将构建与 django 项目相同的图像,但 运行 cron -f
与 CMD
version: '3'
services:
web:
build: ./myprojectname
ports:
- "8000:8000"
#...
cronjobs:
build: ./myprojectname
command: ["cron", "-f"]
我最终使用了这个项目 - Ofelia
https://github.com/mcuadros/ofelia
所以你只需将它添加到你的 docker-compose
并配置如下:
[job-exec "task name"]
schedule = @daily
container = myprojectname_1
command = python ./manage.py clearsessions
运行宁 periodic/scheduled 任务(如 manage.py custom_command)的最佳实践是什么 运行宁 Django 与 docker( docker-撰写) ?
f.e。最常见的情况 - ./manage.py clearsessions
- Django 推荐 运行 它与 cronjobs...
- 但是Docker不建议向单个容器添加超过一个运行ning服务...
我想我可以从同一图像为我需要的每个命令创建一个 docker-compose 服务 运行 - 并且该命令应该 运行 具有所需的无限循环睡觉,但是对于每个需要安排的命令来说,这样做似乎有点过头了
你有什么建议?
使用您的 Django 应用程序创建一个 docker 图像。
您可以将它用于 运行 您的 Django 应用程序(Web 界面),同时,使用 cron 通过将命令传递给 docker 可执行文件来安排您的周期任务,像这样:
docker exec --rm your_container python manage.py clearsessions
--rm
将确保 docker 在完成后删除容器;否则你很快就会停止没有用的容器。
您还可以传入任何额外的参数,例如使用 -e
修改环境:
docker exec --rm -e DJANGO_DEBUG=True -e DJANGO_SETTINGS_MODULE=production \
python manage.py clearsessions
对我有用的方式
在我的 django 项目中,我有一个这样的 crontab 文件:
0 0 * * * root python manage.py clearsessions > /proc/1/fd/1 2>/proc/1/fd/2
Installed/configured 我的 Dockerfile 中的 cron
RUN apt-get update && apt-get -y install cron
ADD crontab /etc/cron.d/crontab
RUN chmod 0644 /etc/cron.d/crontab
并在 docker-compose.yml 中添加一个新服务,它将构建与 django 项目相同的图像,但 运行 cron -f
与 CMD
version: '3'
services:
web:
build: ./myprojectname
ports:
- "8000:8000"
#...
cronjobs:
build: ./myprojectname
command: ["cron", "-f"]
我最终使用了这个项目 - Ofelia
https://github.com/mcuadros/ofelia
所以你只需将它添加到你的 docker-compose
并配置如下:
[job-exec "task name"]
schedule = @daily
container = myprojectname_1
command = python ./manage.py clearsessions