Добавление cron в образ Docker - PullRequest
0 голосов
/ 01 ноября 2018

Я создал контейнер Docker из образа python для размещения проекта Django. Теперь я хотел бы запустить несколько заданий cron для обновления данных в проекте Django.

Однако, так как я создал его, используя python изображение, cron недоступен.

Я все еще новичок в Docker, поэтому я не уверен, какой самый простой маршрут. Должен ли я попытаться добавить функциональность cron к образу python или переключиться на более общий образ, такой как Ubuntu , который позволит мне выполнить стандартную команду apt install cron?

Я вижу, что есть также cron и crontab изображения. Поддерживает ли Docker наложение нескольких изображений, например, python + crontab, или будет проще использовать Ubuntu?

1 Ответ

0 голосов
/ 02 ноября 2018

Прелесть докера в том, что вы можете взять уже существующее изображение и настроить его под свои нужды. Там нет необходимости делать с нуля. Думаю, самый простой маршрут - это тот, который требует наименьшего количества шагов или просто подходит вам больше всего.

Первый вариант - Dockerfile

Предположим, вы используете тег 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

Действительно легко, верно? И вам не нужно беспокоиться об установке зависимостей python и Django в образ ubuntu (было бы гораздо больше шагов, чем просто установка одного приложения). Теперь вам нужно построить этот образ:

docker build --tag 'foo-image:latest' --no-cache /path/to/dockerfile

Теперь вы можете использовать foo-образ, на котором будет установлен cron и все, что есть на образе питона.

Если вам нужно сделать больше с cron, то помимо установки его также можно добавить в Dockerfile. Но я не знаю никаких особенностей вашего варианта использования.

Второй вариант - фиксация Docker

  1. Запустить контейнер с изображением питона
  2. Exec в него
  3. Выполните ваши настройки (установить, запустить процесс, добавить пользователя и т. Д.)
  4. Зафиксируйте этот контейнер в новом образе

Фиктивный пример 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. Я использую 2-й вариант, только когда я не уверен, какие шаги нужно сделать, чтобы выполнить определенный сценарий использования. Но в любом случае после этого я все равно добавлю эти изменения в Dockerfile.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...