代码之家  ›  专栏  ›  技术社区  ›  Vartika

openjdk:8-jre-alpine:-使用docker和cron定期执行jar文件

  •  2
  • Vartika  · 技术社区  · 6 年前

    我想用alpine创建一个docker文件(因为它创建了一个轻量级的图像)和一个cron(定期执行一个任务),作为一个新手,我最初尝试使用ubuntu,它工作得很好,因为我从这个链接获得了帮助 UbuntuExample with CRON

    现在的问题是它会造成沉重的docker形象。我想将这个示例转换为alpine,但找不到完美的帮助。搜索了很多网站,但没有任何结果。

    主要任务:-

    我的主要任务是通过docker执行java jar文件,并定期执行该jar文件

    到目前为止,我一直尝试创建一个简单的docker文件和一个crontab文件,只是为了定期打印消息。

    我面临的主要问题是在alpine上安装cron。

    DOCKERFILE(DOCKERFILE)

       FROM ubuntu:latest
    MAINTAINER docker@ekito.fr
    
    # Add crontab file in the cron directory
    ADD crontab /etc/cron.d/hello-cron
    
    # Give execution rights on the cron job
    RUN chmod 0644 /etc/cron.d/hello-cron
    
    # Create the log file to be able to run tail
    RUN touch /var/log/cron.log
    
    #Install Cron
    RUN apt-get update
    RUN apt-get -y install cron
    
    
    # Run the command on container startup
    CMD cron && tail -f /var/log/cron.log
    

    CRONTAB(CRONTAB)

    * * * * * root echo "Hello world" >> /var/log/cron.log 2>&1
    # Don't remove the empty line at the end of this file. It is required to run the cron job
    

    这对于ubuntu来说非常有效,但是如何在openjdk中实现呢:8-jre-alpine

    3 回复  |  直到 6 年前
        1
  •  3
  •   David Pérez Cabrera    6 年前

    openjdk示例:8-jre-alpine image base:

    Dockerfile文件:

    FROM openjdk:8-jre-alpine
    MAINTAINER dperezcabrera
    
    ADD java-version-cron /temp/java-version-cron
    
    RUN cat /temp/java-version-cron >> /etc/crontabs/root
    RUN rm /temp/java-version-cron
    
    RUN touch /var/log/cron.log
    
    CMD crond 2>&1  >/dev/null && tail -f /var/log/cron.log
    

    剧本 java-version-cron :

    *       *       *       *       *       /usr/bin/java -version >>/var/log/cron.log  2>&1
    
        2
  •  2
  •   Vartika    6 年前

    最后,我使用cron完成了执行javajar的任务。发布解决方案以帮助其他初学者。

    Dockerfile文件

    FROM openjdk:8-jre-alpine
    MAINTAINER dperezcabrera
    
    RUN apk update && apk add bash
    ADD java-version-cron /temp/java-version-cron
    RUN chmod 777 /etc/test/
    ADD DockerTesting-0.0.1-SNAPSHOT.jar /etc/test
    RUN cat /temp/java-version-cron >> /etc/crontabs/root
    RUN rm /temp/java-version-cron
    
    RUN touch /var/log/cron.log
    
    CMD crond 2>&1  >/dev/null && tail -f /var/log/cron.log
    

    java版本cron

    * * * * * java -jar /etc/test/DockerTesting-0.0.1-SNAPSHOT.jar >> /var/log/cron.log 2>&1
    # Don't remove the empty line at the end of this file. It is required to run the cron job
    

    将dockerfile、cron和jar放在同一个文件夹中,或者根据您的要求放置。

        3
  •  0
  •   Janardhan B. Chinta    3 年前
    # https://labs.play-with-docker.com/
    # add this to dockerfile and execute below two docker commands
    # docker build -t cron:test .
    # docker run cron:test &
    
    FROM openjdk:8-jdk-alpine
    
    RUN mkdir /app
    RUN mkdir /app/bin
    RUN mkdir /app/lib
    RUN mkdir /app/crontabs
    
    RUN wget https://busybox.net/downloads/binaries/1.30.0-i686/busybox_CROND
    RUN mv busybox_CROND /app/bin/crond
    RUN wget https://busybox.net/downloads/binaries/1.30.0-i686/busybox_CRONTAB
    RUN mv busybox_CRONTAB /app/bin/crontab
    RUN chmod +x /app/bin/*
    
    # create HelloWorld.java and compile on the fly, cannot upload files to docker labs
    RUN echo 'public class HelloWorld { public static void main(String[]args){ System.out.println("Hello World ..." + new java.util.Date()); } }' > /app/lib/HelloWorld.java
    RUN javac /app/lib/HelloWorld.java -d /app/lib
    
    # create entry point script on the fly to avoid windows line ending issues
    RUN touch /entrypoint.sh
    RUN echo '#!/bin/sh' >> /entrypoint.sh
    RUN echo 'echo "* * * * * java -cp /app/lib HelloWorld" | crontab -c /app/crontabs -' >> /entrypoint.sh
    RUN echo 'crontab -c /app/crontabs -l' >> /entrypoint.sh
    RUN echo 'echo "Executing crond ..."'  >> /entrypoint.sh
    # -f foreground flag is important, if this returns, docker exits
    RUN echo 'crond -f -l 6 -c /app/crontabs' >> /entrypoint.sh 
    RUN echo 'echo "crond exited !!!"'  >> /entrypoint.sh
    RUN chmod +x /entrypoint.sh
    
    ENTRYPOINT /entrypoint.sh