Как это спутировать dockerfile-maven-plugin использует "docker-compose build"?
В документации https://github.com/spotify/dockerfile-maven говорится:
Например, docker-compose.yml может выглядеть так:
service-a:
build: a/
ports:
- '80'
service-b:
build: b/
links:
- service-a
Теперь docker-compose up и docker-compose build будут работать как положено.
Но как написать pom.xml
файл, все еще как будто не используя compose? Поставить цель "построить"?
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<executions>
<execution>
<id>default</id>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
</plugin>
1 ответ
Вы не можете создавать изображения, начиная с файла docker-compose.yml, используя плагин spotify. В readme упоминается, что целью проекта было:
Не делай ничего особенного. Dockerfiles - это то, как вы строите проекты Docker; это то, что использует этот плагин.
В этом разделе документов, которые вы процитировали, на самом деле говорится, что в многомодульной структуре проекта maven можно легко использовать другие инструменты сборки, такие как docker-compose
,
Тем не менее, есть способы построить с Maven из docker-compose.yml
, Один с Maven-Exec
Для рассматриваемого файла:
version: "2"
services:
service-a:
build: a/
image: imga
service-b:
build: b/
image: imgb
links:
- service-a
соответствующая часть pom.xml
будет что-то вроде следующего:
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.6.0</version>
<executions>
<execution>
<id>docker-build</id>
<phase>package</phase>
<goals>
<goal>exec</goal>
</goals>
<configuration>
<executable>docker-compose</executable>
<workingDirectory>${project.basedir}</workingDirectory>
<arguments>
<argument>build</argument>
</arguments>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
Другое решение заключается в использовании ткани8
<build>
<plugins>
<plugin>
<groupId>io.fabric8</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.26.0</version>
<executions>
<execution>
<id>docker-build</id>
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
<configuration>
<images>
<image>
<external>
<type>compose</type>
<basedir>${project.basedir}</basedir>
<composeFile>docker-compose.yml</composeFile>
</external>
</image>
</images>
</configuration>
</plugin>
</plugins>
</build>
Используйте тот, который подходит вам лучше всего.