Есть ли способ автоматизировать создание Docker Image? - PullRequest
1 голос
/ 03 февраля 2020

Мне нужно было создать Docker образ приложения Springboot, и я добился этого, создав Dockerfile и встроив его в образ. Затем я использовал "docker run", чтобы вызвать контейнер. Этот контейнер используется для всех действий, для которых было написано мое приложение.

Однако моя проблема заключается в том, что используемый мной JAR-файл нуждается в постоянных изменениях и требует, чтобы я каждый раз перестраивал образ Docker , Кроме того, мне нужно взять содержимое ранее запущенного Docker контейнера и перенести его в контейнер, созданный из вновь созданного образа.

Я знаю, что весь этот процесс можно записать в виде сценария оболочки и выполнять каждый время у меня есть изменения в моем файле JAR. Но есть ли какой-нибудь инструмент, который я могу использовать, чтобы каким-то образом автоматизировать его?

Вот мой Dockerfile:

FROM java:8
WORKDIR /app 
ADD ./SuperApi ./SuperApi 
ADD ./config ./config 
ADD ./Resources ./Resources 
EXPOSE 8000 
CMD java -jar SuperApi/SomeName.jar --spring.config.location=SuperApi/application.properties

Ответы [ 2 ]

1 голос
/ 03 февраля 2020

Если у вас есть JAR-файл, который необходимо скопировать в другое статическое c Docker изображение, вы можете использовать привязку, чтобы сохранить необходимость повторной сборки. Это позволяет совместно использовать каталоги с хоста в контейнер.

Скажите, что каталог вашего проекта (место компоновки, где находится файл JAR) на хост-компьютере равен /home/vishwas/projects/my_project, и вам нужно иметь содержимое помещено в /opt/my_project внутри контейнера. При запуске контейнера из командной строки используйте флаг -v:

docker run -v /home/vishwas/projects/my_project:/opt/my_project [...]

Изменения, внесенные в локальные файлы в /home/vishwas/projects/my_project, будут видны непосредственно внутри контейнера 1 , поэтому нет необходимости перестраивать (и, вероятно, не нужно перезапускать) контейнер.

Если используется docker -compose, это можно выразить с помощью volumes раздела под списком сервисов для этого контейнера:

volumes:
    - type: bind
      source: /home/vishwas/projects/my_project
      target: /opt/my_project

Это работает для разработки, но позже, скорее всего, вы захотите связать файл JAR в образ вместо того, чтобы делиться с хост-системой (чтобы его можно было запустить в производство). Когда наступит это время, просто пересоберите образ и добавьте директиву COPY в Dockerfile:

COPY /home/vishwas/projects/my_project  /opt/my_project

1: Стоит отметить, что по умолчанию он предназначен для чтения / записи, поэтому контейнер также сможет изменять файлы вашего проекта. Для монтирования только для чтения используйте: docker run -v /home/vishwas/projects/my_project:/opt/my_project:ro

0 голосов
/ 03 февраля 2020

Вы ищете docker compose

Вы можете создавать и запускать контейнеры с помощью одной команды, используя compose.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...