Если у вас получается изображение Docker, которое может выполнять несколько задач, немного необычно создавать одно изображение для каждой задачи так, как вы описываете.Вы можете передать дополнительные параметры командной строки в docker run
или в большинстве других способов запуска контейнера, и вы можете использовать это для управления тем, что делает изображение.
Например, вы можете настроить изображениетак что вы можете запустить
docker run ... docker-p2p com.HelloWorld
, передав имя класса в качестве аргумента.Я написал бы сценарий точки входа, который обернул бы это в java
вызов, если это уместно (но прошел через не-классовые имена, такие как docker run ... sh
):
#!/bin/sh
set -e
case "$1" of
com.*) exec java "$@" ;;
*) exec "$@" ;;
esac
Соответствующий Dockerfile не принимает никакогоАРГУМЕНТЫ;это может быть
FROM java:8
# I prefer COPY to ADD, unless you explicitly want automatic
# HTTP fetches and/or tar file extraction.
COPY target/jar1.jar /p2p.jar
COPY ci/docker_entrypoint.sh /
# Globally set the class path. (A Docker image only does one thing.)
ENV CLASSPATH /p2p.jar
# Always launch the entrypoint script.
ENTRYPOINT ["/docker_entrypoint.sh"]
# Give a default command, which with our script is a class name.
CMD ["com.HelloWorld"]
Если вам действительно нужен контейнер для задачи, вы можете создать базовое изображение, содержащее все, вплоть до строки ENTRYPOINT
, а затем создать производные изображения FROM
того базового изображения, котороепросто установите другой CMD
.