Exécuter un Cronjob à l'intérieur de Docker un guide pour débutant

Exécuter un Cronjob à l'intérieur de Docker un guide pour débutant

En ce qui concerne la planification des travaux et des programmes qui s'exécutent automatiquement à des intervalles définis ou qui peuvent être déclenchés par un autre événement, vous avez beaucoup d'options. Vous pouvez utiliser un utilitaire à usage général comme Cron, le planificateur intégré dans MacOS ou Linux, ou un outil spécialisé comme AWS Lambda. Cron, mais pas aussi puissant qu'AWS Lambda, est un choix solide si vous utilisez des conteneurs car il est conçu pour gérer les tâches d'arrière-plan sur les systèmes UNIX. Avec Docker, cependant, les choses deviennent un peu plus difficiles parce que vous ne pouvez pas simplement lancer une nouvelle instance cron à partir de votre terminal et vous attendre à ce qu'elle fonctionne.

Comment accrocher un travail cron

Pour exécuter un travail cron dans un conteneur Docker, vous devrez utiliser le service Cron et l'exécuter au premier plan dans votre conteneur Docker.

Voici un exemple de la façon dont vous pouvez configurer cela:

  1. Créer un fichier cron:
  2. Créez un fichier qui contient tous les travaux Cron à exécuter sous le conteneur Docker. Par exemple, appelons ce fichier 'Cron'.

    chat cron  

    Notre exemple de fichier ressemble:

    cron * * * * * echo "La date actuelle est 'Date'"> / var / log / cron 

    Ajoutez tous les travaux Crontab dans le fichier ci-dessus qui doit être exécuté dans le conteneur Docker.

  3. Créer Dockerfile
  4. Ensuite, créez un 'Dockerfile' qui installe le service Cron et copie le script dans le conteneur. Ici, nous avons fourni 3 exemples de dockerfile en utilisant le système d'exploitation différent-2. Le Linux alpin est très léger et suffit pour courir les cronjobs. Mais si vous avez besoin de configurer d'autres environnements Linux Ubuntu, Apache et PHP. Choisissez l'un des modèles Dockerfile ci-dessous en fonction de vos exigences.

    • Dockerfile avec alpine linux
    • Depuis Alpine: 3 # Copiez le fichier cron dans le conteneur Copier Cron / etc / Cron.D / Cron # Donnez la permission Run Chmod 0644 / etc / Cron.D / Cron # Ajouter le travail de travail CRONTAB / etc / cron.D / cron # lien fichier journal cron à stdout exécuter ln -s / dev / stdout / var / log / cron # exécuter le service cron dans le premier plan cmd ["crond", "-l", "2", "-f "]
      12345678910111213141516De Alpine: 3 # Copiez le fichier cron dans le contenant Cron / etc / cron.D / cron # Donnez la permissionRun Chmod 0644 / etc / cron.D / Cron # Ajouter le cron Jobrun Crontab / etc / cron.D / cron # lien fichier journal cron vers stdoutrun ln -s / dev / stdout / var / log / cron # exécuter le service cron dans le premier plandcmd ["Crond", "-l", "2", "-f"]

    • Dockerfile avec apache et php
    • De PHP: 8.0-APACHE # Installer Cron Run Apt Update && \ apt -y installer cron # Copier le fichier cron dans le conteneur Copie Cron / etc / Cron.D / Cron # Donnez la permission Run Chmod 0644 / etc / Cron.D / Cron # Ajouter le travail de travail CRONTAB / etc / cron.D / cron # lien fichier journal cron à stdout exécuter ln -s / dev / stdout / var / log / cron # start cron service run sed -i 's / ^ exec / service cron start \ n \ nexec /' / usr / local / bin / apache2-foredground
      1234567891011121314151617181920De PHP: 8.0-APACHE # Installer Cronrun apt Update && \ apt -y installer cron # copier le fichier cron dans le contenant Cron / etc / cron.D / cron # Donnez la permissionRun Chmod 0644 / etc / cron.D / Cron # Ajouter le cron Jobrun Crontab / etc / cron.D / cron # lien fichier journal cron à stdoutrun ln -s / dev / stdout / var / log / cron # start cron Servicerun sed -i 's / ^ exec / service cron start \ n \ nexec /' / usr / local / bin / apache2-foredground

    • Dockerfile avec Ubuntu Linux
    • Depuis Ubuntu: Dernière # Installer Cron Deamon Run APT APT Update && apt Installer -y Cron # Copier Cron Fichier dans le conteneur Copy Cron / etc / Cron.D / Cron # Donnez la permission Run Chmod 0644 / etc / Cron.D / Cron # Ajouter le travail de travail CRONTAB / etc / cron.D / cron # lien fichier de journal cron à stdout exécuter ln -s / dev / stdout / var / log / cron # exécuter le service cron dans le premier cmd ["cron", "-f"]
      12345678910111213141516171819De Ubuntu: Dernière # Installer Cron Deamonrun Apt Update && apt Installer -y Cron # Copiez le fichier cron dans le File CONTERCOPY CRON / ETC / CRON.D / Cron # Donnez la permission Run Chmod 0644 / etc / Cron.D / Cron # Ajouter le cron Jobrun Crontab / etc / cron.D / cron # lien fichier journal cron à stdoutrun ln -s / dev / stdout / var / log / cron # exécuter le service cron dans le premier plandcmd ["cron", "-f"]

  5. Constructeur et exécuter le conteneur
  6. Vous avez deux fichiers dans votre répertoire actuel. L'un est «cron» qui contient les cronjobs et le second est dockerfile qui a les instructions de construction pour Docker. Exécutez la commande suivante pour créer l'image Docker à l'aide du dockerfile:

    docker build -t my_cron .  

    Une fois l'image construite avec succès, vous pouvez lancer un conteneur à l'aide de l'image:

    docker run -d my_cron  

    Cela commencera le démon cron sous le conteneur, qui sera défini tous les travaux prévus dans 'Cron' déposer.

  7. Configuration de test
  8. Les cronjobs doivent être configurés avec succès avec les conteneurs Docker. Comme nous avons lié le fichier journal CRON (/ var / log / cron) au / dev / stdout. Afficher tous les journaux générés par le service cron peut être des semences «Journaux docker» commande.

    Tout d'abord, trouvez l'ID ou le nom de conteneur en utilisant 'docker ps' commande.

    docker ps  

    Puis vérifiez les fichiers journaux du conteneur Docker.

    docker journaux conteneur_id 

    Dans les cronjobs, j'ai imprimé la date actuelle et les ai écrites sur des journaux. Vous pouvez voir l'image ci-dessous qui montre la date actuelle dans les journaux chaque minute.

    Couper Cronjobs dans Docker

    Cela signifie que les travaux cron fonctionnent correctement sous le conteneur docker.

Emballer

Cron Jobs est un moyen pratique d'automatiser les tâches quotidiennes sur votre ordinateur, comme sauvegarder les fichiers. Avec Docker, cependant, les choses deviennent un peu plus difficiles parce que vous ne pouvez pas simplement lancer une nouvelle instance cron à partir de votre terminal et vous attendre à ce qu'il fonctionne. Lorsque vous exécutez un travail cron dans un conteneur Docker, vous rencontrerez quelques défis en fonction de la façon et de l'endroit où vous souhaitez exécuter le conteneur. L'intervalle de travail Cron est spécifié en secondes et peut aller d'une minute à un peu plus de 100 ans. La fréquence de travail CRON est spécifiée en termes de nombre de fois où le travail cron doit être exécuté tous les jours.

En ce qui concerne la planification des travaux et des programmes qui s'exécutent automatiquement à des intervalles définis ou qui peuvent être déclenchés par un autre événement, vous avez beaucoup d'options. Vous pouvez utiliser un utilitaire à usage général comme Cron, le planificateur intégré dans MacOS ou Linux, ou un outil spécialisé comme AWS Lambda. Cron, mais pas aussi puissant qu'AWS Lambda, est un choix solide si vous utilisez des conteneurs car il est conçu pour gérer les tâches d'arrière-plan sur les systèmes UNIX. Avec Docker, cependant, les choses deviennent un peu plus difficiles parce que vous ne pouvez pas simplement lancer une nouvelle instance cron à partir de votre terminal et vous attendre à ce qu'elle fonctionne.