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

openjdk:8-jre-alpine:-使用docker和cron定期执行jar文件,docker,cron,alpine,Docker,Cron,Alpine,我想创建一个docker文件,使用alpine(因为它创建了一个轻量级的图像)和cron(定期执行任务),作为一个新手,我最初尝试使用ubuntu,它工作得很好,因为我从这个链接获得了帮助 现在的问题是它创造了沉重的码头工人形象。我想将同样的示例转换为alpine,但找不到完美的帮助。搜索了很多网站,但没有得到任何结果 主要任务:- 我的主要任务是通过docker执行java jar文件,并定期执行该jar文件 到目前为止,我一直在尝试创建一个简单的docker文件和一个crontab文件,只是

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

现在的问题是它创造了沉重的码头工人形象。我想将同样的示例转换为alpine,但找不到完美的帮助。搜索了很多网站,但没有得到任何结果

主要任务:-

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

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

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

DOCKERFILE(DOCKERFILE)

CRONTAB(CRONTAB)


这对于ubuntu来说非常有效,但是如何在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版本cron

*       *       *       *       *       /usr/bin/java -version >>/var/log/cron.log  2>&1

最后,我使用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放在同一个文件夹中,或者根据您的要求放置。

图像
openjdk:8-jdk-alpine
安装了crontab和java。您能帮我用cron编写一个简单的dockerfile,只需打印一条简单语句,这样我就可以在它的帮助下编写它来执行jar文件吗
# 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 
* * * * * 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
# 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