2017-02-17 13 views
1

Я пытаюсь закрепить некоторые приложения Tomcat, но я никогда не прикасаюсь к Java-приложению, так что отсутствие понимания его действительно затрудняет понимание того, что мне делать.Как подключить приложение tomcat

До сих пор у меня есть это, но он не работает, и я не, если это правильный путь, а

FROM tomcat:6 

ENV APP_ROOT /app_name 

RUN apt-get update && apt-get install -y default-jdk 

COPY . $APP_ROOT/ 
WORKDIR $APP_ROOT 

RUN jar -cvf app_name.war * 

# this fail for some reason, when I do `ls` the file is there but if fail to copy it 
COPY app_name.war $CATALINA_BASE/webapps/app_name.war 

Я просто собираюсь на петле на это, потому что я не понимаю, и Google Поиск не очень помогает мне (я не знаю, как спросить).

Должен ли я использовать команду jar в сборке? Если нет, я думаю, мне нужно построить его локально и просто убедиться, что .war есть правильно ?!

Как работает приложение Java с приложением Tomcat? и как интегрироваться с Docker?

Извините за слишком общий характер, но я ничего не понимаю о Java

+0

'$ CATALINA_BASE' не является переменной окружения в вашем Dockerfile, это? –

+0

Кроме того, tomcat 6 действительно старый ... –

+0

Все, что вы сделали до сих пор, настраивается, ищите CMD и ENTRYPOINT в качестве директив для файла Docker – user2915097

ответ

2

Глядя на ваш код этого является то, что я мог бы мерцать:

  • Вы некоторые ява файлы, хранящиеся в текущем каталоге (.)
  • При вызове COPY скопировать все эти содержимое /app_name
  • Вы создаете файл .war по файлу

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

Что вы на самом деле после того, как это: RUN cp app_name.war $CATALINA_BASE/webapps/app_name.war

Это будет выглядеть следующим образом: Dockerfile

FROM tomcat:6 
ENV APP_ROOT /app_name 
RUN apt-get update && apt-get install -y default-jdk 
COPY . $APP_ROOT/ 
WORKDIR $APP_ROOT 
RUN jar -cvf app_name.war * 
RUN cp app_name.war $CATALINA_BASE/webapps/app_name.war 

Добавление ссылки докер COPY здесь, как это объясняет команду в деталях. Она также может быть полезна для вас, чтобы сделать скрипт называется provision.sh, то сделать что-то вроде:

COPY provision.sh /tmp/provision.sh 
RUN sh /tmp/provision.sh 

Таким образом, вы можете поместить все свои здания, настройку и другие в одном сценарии, которые можно проверить на месте (опять же, если это помогает)

EDIT: Добавление упоминания о создании на местном уровне и копирование в dockerfile

Вы можете построить .war на вашей машине, используйте COPY поставить на машину. Dockerfile

FROM tomcat:6 
ENV APP_ROOT /app_name 
RUN apt-get update && apt-get install -y default-jdk 

COPY app_name.war $CATALINA_BASE/webapps/app_name.war 
WORKDIR $APP_ROOT 

Вышеприведенные копирует файл app_name.war добавить его в файловую систему контейнера на пути $CATALINA_BASE/webapps/app_name.war. Так что вы делаете это:

  1. Построить .war на вашей машине с Явы
  2. Поместите .war в каталог с Dockerfile
  3. COPY app_name.war в файловой системе контейнера
+0

Это имеет смысл, что объясняет почему я не смог его скопировать.Я хочу попробовать. Должен ли я продолжать делать .war внутри моей сборки? Я не хочу, чтобы люди понимали, как работает Java, поэтому я не хочу просто монтировать том. –

+1

Вы можете сделать это несколько способов, вы можете (1) построить '.war' снаружи, а затем просто' COPY app_name.war/app_name/'или (2) создать его на изображении, но тогда вы можете удалить создайте инструменты для java, чтобы сохранить изображение маленьким. В тех случаях люди, использующие приложение, просто сделают «докер» pull your_image и не должны знать специфику использования. – jrbeverly

+0

Не могли бы вы добавить комментарий в ответ, пожалуйста, –

2

Я не использую докер, я использую аналогичный продукт под названием AWS codedeploy для инициализации экземпляров, так что я скажу вам, что я делаю для Tomcat настройки в моих сценариях обеспечения. Должно быть легко переносить докеры, как просто команды bash.

1) Построить WAR Большинство приложений java в наши дни построены с использованием Maven, но Gradle догоняет. Maven и плагин WAR используются для превращения Java-кода в WAR-файл, который можно развернуть на Tomcat. Но похоже, что у вас уже есть ВОЙНА, построенная кем-то другим? В любом случае, вы не запускаете войну напрямую, вы кладете ее в Tomcat, если только вы не включили Tomcat в приложение, и в этом случае это будет JAR, но давайте не будем говорить об этом ... Простое решение - построить из Java-кода, используя инструмент построения, например Maven или Gradle. По построению, я имею в виду превратить его из исходного кода в двоичный.

2) Установить Tomcat

ням установить tomcat6,7,8 и т.д. и т.п. (в зависимости от версии вам нужно)

Затем включите его

начала службы tomcat8

3) Разверните войну Чтобы запустить войну, поместите ее в папку webapps установки Tomcat. Обычно мне нравится закрывать tomcat, когда я это делаю, но вы можете это сделать, пока он работает. Через несколько секунд WAR, который на самом деле является только zip-файлом, будет взорван/распакован для создания каталога.

4) Доступ к приложению/сайту Если вы переименовать войну ROOT.war, то вы можете получить доступ к applicaition в http://localhost:8080, если ваша конфигурация, чтобы он прослушивает 8080. Если война названа pets.war то ваш URL веб-адреса будет http://localhost:8080/pets. Вы настраиваете, какой порт для Tomcat должен прослушиваться в файле server.xml в папке conf.

Важнейший Документация Tomcat очень хорошая, как только вы знаете, что искать. Основными файлами конфигурации являются web.xml, context.xml и server.xml. Центральные справочники tomcat объясняют каждый компонент https://tomcat.apache.org/tomcat-7.0-doc/setup.html, вам просто нужно найти документ, соответствующий вашей версии Tomcat.

3

Вы можете попробовать сделать это «вручную», прежде чем пытаться автоматизировать его, это должно помочь понять процесс. Вам не нужно распространять официальный образ tomcat, чтобы иметь возможность развернуть войну на докционированном tomcat, вы можете использовать изображение напрямую, если вам не нужно настраивать разрешения и пользователей (в процессе производства вам нужно).

Если вам нужен Tomcat 6.x, потому что ваш веб-приложение реализует сервлет API < 3, сделайте следующее:

sudo docker run --name tomcat --detach --port 8080:8080 tomcat:6 

Теперь ваш Tomcat работает в фоновом режиме (--detach), ожидая развертывания.Вы экспортировали порт 8080 из контейнера и сопоставили его с портом 8080 с вашего хоста, поэтому приложение будет доступно по адресу http://localhost:8080/ на вашем хосте.

Теперь, если вы скопировать .war в/USR/местные/кот/WebApps в контейнер, приложение будет развернуто:

sudo docker cp app_name.war tomcat:/usr/local/tomcat/webapps/ 
+1

Я пытаюсь сделать его простым для людей, которые не понимают докеров и/или Java. Вот почему я хочу сохранить весь строительный процесс в сборке, поэтому вам не нужно иметь дело с этим. Ни установка Java на ваш компьютер, ни какой-либо SDK для создания войны или что-то делать после сборки, например, mount volumen или эта задача –

+1

Подход @Tristan очень хорош для тестирования вашего 'app_name.war', чтобы убедиться, что он работает. Когда у вас есть все детализированные детали, вы можете просто переключиться на использование 'COPY app_name.war/to/path', поскольку он будет следовать аналогичному процессу с его выше. – jrbeverly