我从python映像创建了一个Docker容器来托管Django项目。现在,我想运行一些cron作业来更新Django项目中的数据。
但是,由于我是使用python图片创建的,因此cron不可用。
我还是Docker的新手,所以我不确定最简单的方法是什么。我应该尝试在python映像中添加cron功能,还是应该切换到更通用的映像,例如Ubuntu,这将允许我发出标准的apt install cron
命令?
我看到也有cron和crontab图像。 Docker是否支持叠加多个图像(例如python + crontab),还是仅使用Ubuntu会更容易?
答案 0 :(得分:1)
泊坞窗的优点在于,您可以拍摄已经存在的图像并根据自己的需要进行调整。无需从头开始。艾格斯认为,最简单的路线是需要最少步骤或最适合您的路线。
假设您使用python:latest
标签,然后使用cron创建自己的图像,如下所示:
FROM python:latest
LABEL maintainer="John Doe"
RUN apt-get install -y update && \
apt-get install -y cron && \
apt-get clean all
真的很容易吧?而且您不必担心在ubuntu映像上安装python和Django依赖项(不只是安装一个应用程序,还有更多步骤)。现在您需要构建此图像:
docker build --tag 'foo-image:latest' --no-cache /path/to/dockerfile
现在您可以使用foo-image,它将安装cron并具有python映像的所有功能。
如果除了安装还需要对cron进行更多处理,还可以将其添加到Dockerfile中。但是我不知道您的用例的任何细节。
第二个选项-docker commit
docker commit的虚拟示例:
$ docker run -dit --name=Nginx -p 80:80 nginx
68188c608160754736f192d535742b9d0dfbc3c09564c1731741c08c211b219f
$ docker exec -it Nginx /bin/bash
root@68188c608160:/# touch New_file
root@68188c608160:/# apt-get update
Get:2 http://security.debian.org/debian-security stretch/updates InRelease [94.3 kB]
Ign:1 http://cdn-fastly.deb.debian.org/debian stretch InRelease
Get:3 http://cdn-fastly.deb.debian.org/debian stretch-updates InRelease [91.0 kB]
Get:5 http://security.debian.org/debian-security stretch/updates/main amd64 Packages [454 kB]
Get:4 http://cdn-fastly.deb.debian.org/debian stretch Release [118 kB]
Get:6 http://cdn-fastly.deb.debian.org/debian stretch Release.gpg [2434 B]
Get:7 http://cdn-fastly.deb.debian.org/debian stretch-updates/main amd64 Packages [5152 B]
Get:8 http://cdn-fastly.deb.debian.org/debian stretch/main amd64 Packages [7099 kB]
Fetched 7864 kB in 4s (1767 kB/s)
Reading package lists... Done
root@68188c608160:/# exit
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
68188c608160 nginx "nginx -g 'daemon of…" About a minute ago Up About a minute 0.0.0.0:80->80/tcp Nginx
$ docker commit Nginx nginx-updated:latest
sha256:dcc2f09f523eded0b2d33abb47e99b83453c12fb6ba958b441111f9ff40c5a8a
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx-updated latest dcc2f09f523e 3 seconds ago 156MB
nginx
对我来说,我更喜欢使用Dockerfiles。我仅在不确定要执行某些用例需要采取哪些步骤时才使用2nd选项。但是无论如何,我仍然将这些更改添加到Dockerfile中。