【问题标题】:openjdk:8-jre-alpine :- Execute a jar file periodically using docker with cronopenjdk:8-jre-alpine :- 使用 docker 和 cron 定期执行 jar 文件
【发布时间】:2018-08-25 04:54:01
【问题描述】:

我想使用 alpine(因为它创建一个轻量级图像)和一个 cron(定期执行任务)创建一个 docker 文件,作为一个新手,我最初尝试使用 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 中实现它

【问题讨论】:

  • 图片openjdk:8-jdk-alpine已经安装了crontab和java。
  • 你能帮我用cron写一个简单的dockerfile来打印一个简单的语句,这样我就可以写它来执行我的jar文件

标签: docker cron alpine


【解决方案1】:

openjdk:8-jre-alpine 镜像库示例:

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】:

    终于完成了我使用 cron 执行 java jar 的任务。发布解决方案,以便它可以帮助其他初学者。

    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-version-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】:
      # 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 
      

      【讨论】:

        猜你喜欢
        • 2019-04-23
        • 1970-01-01
        • 2018-10-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-04
        • 1970-01-01
        相关资源
        最近更新 更多