openjdk:8-jre-alpine :- 使用 docker 和 cron 定期执行 jar 文件
openjdk:8-jre-alpine :- Execute a jar file periodically using docker with cron
我想使用带有 cron(定期执行任务)的 alpine(因为它创建一个轻量级图像)创建一个 docker 文件,作为一个新手,我最初尝试使用 ubuntu当我从这个 link UbuntuExample with CRON
中得到帮助时,它工作得很好
现在的问题是它创建了沉重的 docker 图像。我想为高山转换这个相同的例子,但找不到完美的帮助。找了很多网站都没有什么收获。
主要任务:-
我的主要任务是通过docker执行一个javajar文件,并定期执行那个jar文件
到目前为止,我一直在尝试创建一个简单的 docker 文件和一个 crontab 文件,以便定期打印消息。
我面临的主要问题是在 alpine 上安装 cron。
DOCKERFILE (Docker文件)
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(定时任务)
* * * * * 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-jre-alpine 图片库示例:
Docker 文件:
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
终于完成了使用 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 放在同一个文件夹中或根据您的要求放置。
# 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
我想使用带有 cron(定期执行任务)的 alpine(因为它创建一个轻量级图像)创建一个 docker 文件,作为一个新手,我最初尝试使用 ubuntu当我从这个 link UbuntuExample with CRON
中得到帮助时,它工作得很好现在的问题是它创建了沉重的 docker 图像。我想为高山转换这个相同的例子,但找不到完美的帮助。找了很多网站都没有什么收获。
主要任务:-
我的主要任务是通过docker执行一个javajar文件,并定期执行那个jar文件
到目前为止,我一直在尝试创建一个简单的 docker 文件和一个 crontab 文件,以便定期打印消息。
我面临的主要问题是在 alpine 上安装 cron。
DOCKERFILE (Docker文件)
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(定时任务)
* * * * * 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-jre-alpine 图片库示例:
Docker 文件:
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
终于完成了使用 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 放在同一个文件夹中或根据您的要求放置。
# 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