Выполните простое Java-приложение, используя Docker

Новый для реализации докера, пытаясь после R&D.

ЗАДАЧА, ЧТОБЫ ДОСТИГНУТЬ:- Запустить докер после запланированного времени (т. Е. 5 минут), написав CRON.

Я написал простое Java-приложение, которое просто содержит оператор println. Я хочу выполнить проект с помощью Docker.

мой Dockerfile:

FROM openjdk:8-jre-alpine
RUN mkdir /etc/test/
RUN chmod 777 /etc/test/
COPY /home/administrator/Documents/LearningWorkspace/DockerTesting/target/DockerTesting-0.0.1-SNAPSHOT.jar /etc/test/
CMD java -Xmx500M -jar /etc/test/DockerTesting-0.0.1-SNAPSHOT.jar

Я выполнил эту команду на CMD:- sudo docker build Documents / DockerTest

Обработка на cmd:-

Sending build context to Docker daemon 7.159 MB
Step 1/5 : FROM openjdk:8-jre-alpine
 ---> b1bd879ca9b3
Step 2/5 : RUN mkdir /etc/test/
 ---> Using cache
 ---> 4720a4e8fa67
Step 3/5 : RUN chmod 777 /etc/test/
 ---> Using cache
 ---> 91426c394ae4
Step 4/5 : COPY /home/administrator/Documents/LearningWorkspace/DockerTesting/target/DockerTesting-0.0.1-SNAPSHOT.jar /etc/test/
lstat home/administrator/Documents/LearningWorkspace/DockerTesting/target/DockerTesting-0.0.1-SNAPSHOT.jar: no such file or directory

В чем проблема именно с этим файлом Docker.

ПРОБЛЕМА 2 -

Теперь мой файл Docker был успешно выполнен, и при запуске образа Docker оператор println приложения java печатается на консоли.

Теперь я хочу выполнить задание cron на образе докера, т.е. запустить конкретный докер через фиксированное время.

я изменил свой докер на это путем большего количества поиска и попытки:-

CRONTAB ФАЙЛ:-

*/10 * * * * root java -jar /etc/test/DockerTesting-0.0.1-SNAPSHOT.jar 2>&1

ОБНОВЛЕННЫЙ ФАЙЛ DOCKER:-

FROM openjdk:8-jre-alpine
RUN mkdir /etc/test/
RUN chmod 777 /etc/test/
ADD crontab /etc/cron
ADD jar/ /etc/test/
RUN chmod 0600 /etc/cron
CMD java -Xmx500M -jar /etc/test/DockerTesting-0.0.1-SNAPSHOT.jar

Но это не работает, это печатает заявление только один.

Есть ли что-то, чего я до сих пор не нашел в файле Docker?

Ссылки, на которые я ссылался на ссылку 1 Ссылка 2

2 ответа

Решение

Это происходит потому, что вы не можете добавить какие-либо файлы в контейнер Docker вне контекста сборки:

Расширенное описание

Команда сборки docker создает образы Docker из Dockerfile и "контекста". Контекст сборки - это набор файлов, расположенных в указанном PATH или URL. Процесс сборки может ссылаться на любой из файлов в контексте. Например, ваша сборка может использовать инструкцию COPY для ссылки на файл в контексте.

Рядом с вашим Dockerfile создать каталог под названием jars например, поместите файл JAR, а затем:

ADD jars/DockerTesting-0.0.1-SNAPSHOT.jar /etc/test/

или просто вы можете скопировать все банки оттуда:

ADD jars/ /etc/test/

Таким образом, вы должны получить контейнер с /etc/test/DockerTesting-0.0.1-SNAPSHOT.jar внутри. В любом случае, любая причина, по которой вы помещаете исполняемые файлы в /etc каталог? Я имею в виду, что это будет работать, но люди ожидают, что там будут только файлы конфигурации системы. Более подходящее место будет /var или же /usr/shareили, может быть, даже /app;)

Вот мое решение для запуска Java из контейнера Fastapi Docker (происходит от tiangolo/uvicorn-gunicorn:python3.8):

      FROM tiangolo/uvicorn-gunicorn:python3.8

LABEL version="1.0"
LABEL description="Install any package using SDKMan"

ENV SDKMAN_DIR /root/.sdkman
# ENV GRAILS_VERSION 3.3.9
ENV JAVA_VERSION 8.0.282-open

RUN apt-get update && apt-get install -y zip curl
RUN rm /bin/sh && ln -s /bin/bash /bin/sh
RUN curl -s "https://get.sdkman.io" | bash
RUN chmod a+x "$SDKMAN_DIR/bin/sdkman-init.sh"

RUN set -x \
    && echo "sdkman_auto_answer=true" > $SDKMAN_DIR/etc/config \
    && echo "sdkman_auto_selfupdate=false" >> $SDKMAN_DIR/etc/config \
    && echo "sdkman_insecure_ssl=false" >> $SDKMAN_DIR/etc/config

WORKDIR $SDKMAN_DIR
RUN [[ -s "$SDKMAN_DIR/bin/sdkman-init.sh" ]] && source "$SDKMAN_DIR/bin/sdkman-init.sh" && exec "$@"

RUN source /root/.bashrc
RUN source "$SDKMAN_DIR/bin/sdkman-init.sh" && sdk list java && sdk install java $JAVA_VERSION
# RUN source "$SDKMAN_DIR/bin/sdkman-init.sh" && sdk install grails $GRAILS_VERSION

# RUN curl -s "https://get.sdkman.io" | bash
# RUN source "$HOME/.sdkman/bin/sdkman-init.sh"

# RUN sdk install java 8.0.181-oracle

COPY ./app /app
ENV PATH="/root/.sdkman/candidates/java/current/bin/:${PATH}"

WORKDIR /app
RUN pip install -r requirements.txt
Другие вопросы по тегам