[英]fabric8 springboot full example
我想弄清楚如何使用fabric8 docker-maven-plugin 构建一个spring boot docker镜像。 该文档包含位和字节,我显然遗漏了一些东西。 有人有完整的 pom.xml 示例吗?
如果您只是想快速入门,fabric8-maven-plugin 文档很难深入挖掘,因此这里有一个快速示例,说明构建 Docker 映像所需的一切。
首先,确保docker
在您的路径上并且 Docker 守护程序正在运行。 运行docker ps
并确保响应如下:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
将此添加到您的 pom.xml 并使用mvn clean package docker:build
运行它
<build>
<plugins>
<plugin>
<groupId>io.fabric8</groupId>
<artifactId>fabric8-maven-plugin</artifactId>
<configuration>
<verbose>true</verbose>
<images>
<image>
<!-- Replace your-project-name -->
<name>your-project-name:${project.version}</name>
<build>
<!-- This is the same FROM used in a Dockerfile -->
<from>vixns/java8</from>
<!-- This is the same ENTRYPOINT used in a Dockerfile -->
<entryPoint>
<exec>
<arg>java</arg>
<!-- This extra argument is so Tomcat can start faster due to lack of entropy -->
<arg>-Djava.security.egd=file:/dev/./urandom</arg>
<arg>-jar</arg>
<!-- /maven/ is the default dir that the plugin copies your artifact to -->
<arg>/maven/${project.artifactId}.${project.packaging}</arg>
</exec>
</entryPoint>
<assembly>
<!-- This is a predefined assembly.xml that will only copy your final artifact to the Docker image -->
<descriptorRef>artifact</descriptorRef>
</assembly>
</build>
</image>
</images>
</configuration>
</plugin>
</plugins>
</build>
注意:如果你想使用mvn docker:start
命令,你需要额外的设置。 您不必使用它,如果您愿意,可以使用标准的docker
命令。
这是使用fabric8的工作示例之一。 该项目使用 spring boot docker 镜像,然后将其链接到 mongodb。
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>io.fabric8</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.20.0</version>
<configuration>
<!--<dockerHost>tcp://REMOTE_IP:2375</dockerHost> -->
<images>
<image>
<name>springboot-mongo-dockerimage:${project.version}</name>
<alias>springboot-mongo-dockerimage</alias>
<build>
<dockerFileDir>${project.basedir}</dockerFileDir>
</build>
<run>
<namingStrategy>alias</namingStrategy>
<dependsOn>
<container>mongo</container>
</dependsOn>
<links>
<link>mongo</link>
</links>
<ports>
<port>8080:8080</port>
</ports>
</run>
</image>
</images>
</configuration>
<executions>
<execution>
<id>start</id>
<phase>pre-integration-test</phase>
<goals>
<goal>stop</goal>
<goal>build</goal>
<goal>start</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
您可以按照此链接获取分步说明
但是,您可以使用我发现使用起来更方便的 Dockerfile,而不是从 fabric8 maven 插件构建 Image,这就是您会注意到的原因
<build>
<dockerFileDir>${project.basedir}</dockerFileDir>
</build>
文件
FROM java:8
VOLUME /tmp
ADD target/Boot-0.0.1-SNAPSHOT.jar app.jar
EXPOSE 8080
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-Dspring.data.mongodb.uri=mongodb://mongo/test", "-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
如果要将图像推送到 Docker 中心注册表,则可以使用此链接。
如果您不必使用该插件,我建议您使用 spotify 的docker-maven-plugin
。 设置后,您可以执行mvn clean package docker:build
来构建 docker 映像。
你的pom.xml
看起来像这样:
...
<properties>
<docker.image.prefix>springio</docker.image.prefix>
</properties>
<build>
<plugins>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.11</version>
<configuration>
<imageName>${docker.image.prefix}/${project.artifactId}</imageName>
<dockerDirectory>src/main/docker</dockerDirectory>
<buildArgs>
<finalName>${project.build.finalName}.jar</finalName>
</buildArgs>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
</build>
...
你在src/main/docker
Dockerfile
中的Dockerfile
看起来像这样:
FROM openjdk:8u102-jre
ARG finalName
ADD $finalName /my-app.jar
ENTRYPOINT ["java","-jar","/my-app.jar"]
参考资料:
这是内联汇编配置的示例
将此行添加到您的 pom 文件中,并使用 mvn docker:build
<plugin>
<groupId>io.fabric8</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.20.0</version>
<configuration>
<verbose>true</verbose>
<images>
<image>
<name>demo/helloworld</name>
<build>
<from>openjdk</from>
<tags>
<tag>latest</tag>
<tag>${project.version}</tag>
</tags>
<assembly>
<descriptorRef>artifact</descriptorRef>
</assembly>
<cmd>java -jar maven/${project.artifactId}-${project.version}.jar</cmd>
</build>
</image>
</images>
</configuration>
</plugin>
Dockerfile:
...
ADD target/<file-name>.jar <dest-dir>
...
Dockerfile 的位置:src/main/docker
Maven io.fabric8 docker 插件配置
<configuration>
<images>
<image>
<name>${docker.image.prefix}/${docker.image.name}</name>
<alias>${project.artifactId}</alias>
<build>
<contextDir>${project.basedir}</contextDir>
<tags>
<tag>latest</tag>
</tags>
</build>
</image>
</images>
<resources>
<resource>
<targetPath>${project.basedir}</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.war</include>
</resource>
</resources>
</configuration>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.