Executando um Cronjob dentro do Docker A Guide do iniciante

Executando um Cronjob dentro do Docker A Guide do iniciante

Quando se trata de agendar trabalhos e programas que são executados automaticamente em intervalos definidos ou podem ser acionados por outro evento, você tem muitas opções. Você pode usar um utilitário de uso geral como Cron, o agendador embutido em macOS ou Linux ou uma ferramenta especializada como a AWS Lambda. Cron, embora não seja tão poderoso quanto o AWS Lambda, é uma escolha sólida se você estiver usando contêineres porque foi projetado para lidar com tarefas de fundo em sistemas Unix. Com o Docker, no entanto, as coisas ficam um pouco mais complicadas porque você não pode simplesmente lançar uma nova instância do Cron do seu terminal e espera que funcione.

Como dockerizar um trabalho cron

Para executar um trabalho de cron dentro de um recipiente do Docker, você precisará usar o serviço Cron e executá -lo em primeiro plano no seu contêiner Docker.

Aqui está um exemplo de como você pode configurar isso:

  1. Crie o arquivo CRON:
  2. Crie um arquivo que contenha todos os trabalhos Cron a serem executados sob o contêiner do Docker. Por exemplo, vamos chamar esse arquivo 'Cron'.

    CRON CRON  

    Nosso arquivo de exemplo se parece:

    cron * * * * * eco "a data atual é 'data'">/var/log/cron 

    Adicione todos os trabalhos Crontab no arquivo acima que precisam ser executados sob o contêiner do Docker.

  3. Crie o DockerFile
  4. Em seguida, crie um 'Dockerfile' que instala o serviço Cron e copia o script no contêiner. Aqui fornecemos 3 exemplos de Dockerfile usando o sistema operacional DIFLE-2. O alpino Linux é muito leve e é suficiente para correr cronjobs. Mas se você precisar configurar outros ambientes Linux Ubuntu, Apache e PHP. Escolha qualquer um dos modelos de dockerfile abaixo abaixo com base em seus requisitos.

    • Dockerfile com alpino Linux
    • De Alpine: 3 # copie o arquivo cron para o contêiner Copy cron /etc /cron.d/cron # Dê a permissão Run Chmod 0644/etc/cron.d/cron # Adicione o trabalho Cron Run Crontab/etc/cron.D/CRON # Link Cron Log File to stdout Run Ln -s/dev/stdout/var/log/cron # Execute o serviço Cron em primeiro plano CMD ["Crond", "-l", "2", "-f "]
      12345678910111213141516De Alpine: 3 # Copie o arquivo cron para o conterocopy cron /etc /cron.d/cron # dê a permissãorun chmod 0644/etc/cron.d/cron # Adicione o cron jobrun crontab/etc/cron.D/CRON # Link Cron Log File to stdoutrun ln -s/dev/stdout/var/log/cron # execute o serviço Cron em primeiro plano

    • Dockerfile com Apache e PHP
    • De Php: 8.0 -Apache # Install Cron Run Apt Update && \ apt -y install cron # copy cron arquivo para o contêiner cópia cron /etc /cron.d/cron # Dê a permissão Run Chmod 0644/etc/cron.d/cron # Adicione o trabalho Cron Run Crontab/etc/cron.d/cron # link cron log de log para stdout run ln -s/dev/stdout/var/log/cron # start cron serviço run sed -i 's/exec/serviço cron start \ n \ nexec/'/usr/ Local/Bin/Apache2-Forground
      1234567891011121314151617181920De Php: 8.0 -Apache # Instale Cronrun Apt Update && \ apt -y install cron # copy cron arquivo para o conterocopy cron /etc /cron.d/cron # dê a permissãorun chmod 0644/etc/cron.d/cron # Adicione o cron jobrun crontab/etc/cron.d/cron # link cron log de log para stdoutrun ln -s/dev/stdout/var/log/cron # start cron servicerun sed -i 's/^exec/serviço cron start \ n \ nexec/'/usr/local/local/ BIN/APACHE2-ATRIPLEMENTO

    • Dockerfile com Ubuntu Linux
    • De Ubuntu: # mais recente # install cron deamon run apt update && apt install -y cron # copy cron arquivo para o contêiner cópia cron /etc /cron.d/cron # Dê a permissão Run Chmod 0644/etc/cron.d/cron # Adicione o trabalho Cron Run Crontab/etc/cron.D/CRON # Link Cron Log Arquivo para Stdout Run Ln -s/dev/stdout/var/log/cron # Execute o serviço Cron em primeiro plano CMD ["Cron", "-f"]
      12345678910111213141516171819De Ubuntu: # mais recente Instalar Cron Deamonrun Apt Update && apt install -y cron # copiar arquivo cron para o conterocopy cron /etc /cron.d/cron # Dê a permissão Run Chmod 0644/etc/cron.d/cron # Adicione o cron jobrun crontab/etc/cron.D/CRON # Link Cron Log File to stdoutrun ln -s/dev/stdout/var/log/cron # execute o serviço Cron em primeiro plano

  5. Construa e execute o contêiner
  6. Você tem dois arquivos em seu diretório atual. Um é 'Cron' que contém os cronjobs e o segundo é o DockerFile que possui as instruções de construção para o Docker. Execute o seguinte comando para construir a imagem do Docker usando o Dockerfile:

    Docker Build -t my_cron .  

    Depois que a imagem é construída com sucesso, você pode iniciar um contêiner usando a imagem:

    Docker Run -d my_cron  

    Isso iniciará o daemon cron sob o recipiente, que todos os trabalhos programados definidos em 'Cron' arquivo.

  7. Configuração de teste
  8. Os Cronjobs devem ser configurados com sucesso com os contêineres do Docker. Como vinculamos o arquivo de log Cron (/var/log/cron) ao/dev/stdout. Mostrar todos os logs gerados pelo serviço Cron podem ser sementes em 'Docker Logs' comando.

    Primeiro, encontre o ID ou nome do contêiner usando 'Docker ps' comando.

    Docker PS  

    Em seguida, verifique os arquivos de log do contêiner do docker.

    Docker Logs container_id 

    Nos Cronjobs, imprimi a data atual e os escrevi para logs. Você pode ver a imagem abaixo que mostra a data atual em logs a cada minuto.

    Cronjobs correndo em Docker

    Isso significa que os trabalhos cron estão funcionando corretamente sob o recipiente do docker.

Empacotando

Os trabalhos de Cron são uma maneira útil de automatizar tarefas diárias no seu computador, como fazer backup de arquivos. Com o Docker, porém, as coisas ficam um pouco mais complicadas, porque você não pode simplesmente lançar uma nova instância do Cron do seu terminal e espera que ele seja executado. Ao executar um trabalho de Cron em um contêiner do Docker, você terá alguns desafios, dependendo de como e onde deseja executar o contêiner. O intervalo de trabalho de Cron é especificado em segundos e pode variar de um minuto a pouco mais de 100 anos. A frequência do trabalho de Cron é especificada em termos do número de vezes que o trabalho de Cron deve ser executado todos os dias.

Quando se trata de agendar trabalhos e programas que são executados automaticamente em intervalos definidos ou podem ser acionados por outro evento, você tem muitas opções. Você pode usar um utilitário de uso geral como Cron, o agendador embutido em macOS ou Linux ou uma ferramenta especializada como a AWS Lambda. Cron, embora não seja tão poderoso quanto o AWS Lambda, é uma escolha sólida se você estiver usando contêineres porque foi projetado para lidar com tarefas de fundo em sistemas Unix. Com o Docker, no entanto, as coisas ficam um pouco mais complicadas porque você não pode simplesmente lançar uma nova instância do Cron do seu terminal e espera que funcione.