Разверните.war в образ Docker с помощью fabric8io docker-maven-plugin

Я очень новичок в Docker и ткань8io docker-maven-plugin, У меня трудные времена для развертывания.war в моем образе, полученном jboss/wildfly один. Я могу успешно построить свой образ, поставляемый с.war, из командной строки, но я не могу сделать то же самое с помощью уже упомянутого плагина. Насколько я читаю, как только вы дадите правильный контекст и Dockerfile это должно быть только вопросом:

<build>
  <finalName>${project.build.finalName}.${project.packaging}</finalName>
  ...
  <assembly>
    <descriptorRef>artifact</descriptorRef>
  </assembly>
</build>

но я получаю эту ошибку:

[INFO] <<< docker-maven-plugin:0.19.0:build (default-cli) < package @ YoOffer <<<
[INFO] 
[INFO] --- docker-maven-plugin:0.19.0:build (default-cli) @ YoOffer ---
[WARNING] Cannot include project artifact: edu.pezzati.yo:YoOffer:war:0.0.1-SNAPSHOT; it doesn't have an associated file or directory.
[WARNING] The following patterns were never triggered in this artifact inclusion filter:
o  'edu.pezzati.yo:YoOffer'

[ERROR] DOCKER> Failed to create assembly for docker image  (with mode 'dir'): Error creating assembly archive docker: You must set at least one file.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------

Вот моя песочница.

ОБНОВЛЕНИЕ: я убираю беспорядок в моем помпе. Теперь это выглядит так:

<images>
    <image>
        <alias>yowildfly</alias>
        <name>jboss/wildfly</name>
        <build>
        <!--
            <assembly>
                <descriptorRef>${project.basedir}/src/test/resources/DOCKER/assembly.xml</descriptorRef>
            </assembly>
        -->
            <args>
                <webapp>target/${project.build.finalName}.${project.packaging}</webapp>
            </args>
            <dockerFileDir>${project.basedir}</dockerFileDir>
            <dockerFile>src/test/resources/DOCKER/wildfly/Dockerfile</dockerFile>
            </build>
            <run>
                <ports>
                    <port>8080:8080</port>
                </ports>
            </run>
        </image>
...
</images>

Теперь я получаю эту ошибку:

...    
[ERROR] DOCKER> Unable to build image [jboss/wildfly]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 8.769 s
[INFO] Finished at: 2017-02-12T01:19:57+01:00
[INFO] Final Memory: 36M/271M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal io.fabric8:docker-maven-plugin:0.19.0:build (default-cli) on project YoOffer: Unable to build image [jboss/wildfly]: lstat target/YoOffer.war: no such file or directory -> [Help 1]
[ERROR]
...

Согласно документам, dockerFileDir используется вместе с dockerFile должен пометить контекст построения изображения.

2 ответа

Решение

Я неправильно понял документацию по плагину Docker для fabric8io. Вы можете использовать вместе dockerFileDir а также dockerFile но контекст построения не будет установлен в dockerFileDir значение. Развернуть мой артефакт из target Я должен поставить свой Dockerfile в корне моего проекта, установите dockerFileDir значение с корневым путем проекта, удалите dockerFile вход из моего pom, Моя песочница обновляется таким образом. Следующим шагом является достижение того же, более чистого использования assembly в build конф.

Вы должны быть в состоянии поставить Dockerfile везде, где вы хотите иметь его без каких-либо ограничений из-за того, как работает Docker. Поэтому в плагине io.fabric8 maven есть опция, которая позволяет вам копировать файлы, которые вам нужны во время создания образа Docker. Вот как это работает для меня:

  1. Я решил поставить свой Dockerfile в src / main / docker
  2. Мне нужны два файла во время сборки образа докера:
    • target/SomeName.war (это продукт пакета maven фазы)
    • src/main/resources/OtherFiles.xml (это просто еще один ресурс, который мне тоже нужен)

Конфигурация плагина io.fabric8 в pom.xml файл:

<plugin>
  <groupId>io.fabric8</groupId>
  <artifactId>docker-maven-plugin</artifactId>
  <version>0.24.0</version>
  <configuration>
    <images>
      <image>
        <name>some/name</name>
        <build>
          <dockerFileDir>${project.basedir}/src/main/docker</dockerFileDir>
          <dockerFile>Dockerfile</dockerFile>
          <assembly>
            <mode>dir</mode>
            <name>maven/</name>
            <inline xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
              <id>middleware-rest</id>
              <files>
                <file>
                  <source>${project.build.directory}/SomeName.war</source>
                  <outputDirectory>./</outputDirectory>
                  <destName>SomeName.war</destName>
                </file>
                <file>
                  <source>${project.basedir}/src/test/resources/OtherFiles.xml</source>
                  <outputDirectory>./</outputDirectory>
                  <destName>OtherFiles.xml</destName>
                </file>
              </files>
            </inline>
          </assembly>
        </build>
        <run>
          <ports>
            <port>8080:8080</port>
          </ports>
          <network>
            <mode>host</mode>
          </network>
          <wait>
            <log>.*WildFly .* \(WildFly .*\) started in [0-9]*ms - Started [0-9]* of [0-9]* services</log>
            <time>360000</time>
          </wait>
        </run>
      </image>
    </images>
    <showLogs>true</showLogs>
  </configuration>
  <!-- Connect start/stop to pre- and post-integration-test phase, respectively if you want to start your docker containers during integration tests -->
  <executions>
    <execution>
      <id>start</id>
      <phase>pre-integration-test</phase>
      <goals>
        <!-- "build" should be used to create the images with the artifact -->
        <goal>build</goal>
        <goal>start</goal>
      </goals>
    </execution>
    <execution>
      <id>stop</id>
      <phase>post-integration-test</phase>
      <goals>
        <goal>stop</goal>
      </goals>
    </execution>
  </executions>
</plugin>

И, наконец, как я ссылаюсь на эти файлы в Dockerfile:

ADD maven/SomeName.war /opt/jboss/wildfly/standalone/deployments/

Обратите внимание, что maven это имя, которое вы положили в pom.xml (<name>maven/</name>). Конечно, вы можете использовать все, что вы хотите вместо этого.

Другие вопросы по тегам