简体   繁体   English

fabric8 springboot 完整示例

[英]fabric8 springboot full example

I am trying to figure out how to build a spring boot docker image using fabric8 docker-maven-plugin.我想弄清楚如何使用fabric8 docker-maven-plugin 构建一个spring boot docker镜像。 The documentation contains bit and bytes and I'm obviously missing something.该文档包含位和字节,我显然遗漏了一些东西。 Does anyone have a full pom.xml example for it?有人有完整的 pom.xml 示例吗?

The fabric8-maven-plugin documentation is pretty hard to dig through if you just want to get started quickly, so here's a quick example for everything you need to get a Docker image built.如果您只是想快速入门,fabric8-maven-plugin 文档很难深入挖掘,因此这里有一个快速示例,说明构建 Docker 映像所需的一切。

First, make sure docker is on your path and the Docker daemon is running.首先,确保docker在您的路径上并且 Docker 守护程序正在运行。 Run docker ps and ensure a response like this:运行docker ps并确保响应如下:

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

Add this to your pom.xml and run this with mvn clean package docker:build将此添加到您的 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>

Note: you'll need additional setup if you want to use the mvn docker:start command.注意:如果你想使用mvn docker:start命令,你需要额外的设置。 You don't have to use it, you can use the standard docker command if you'd like.您不必使用它,如果您愿意,可以使用标准的docker命令。

Here is one of Working example using fabric8. 这是使用fabric8工作示例之一。 This project uses spring boot docker image and then link it to mongodb.该项目使用 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>

You can follow this link for step by step instructions您可以按照此链接获取分步说明

However rather than building Image from fabric8 maven plugin, you can use the Dockerfile which I find more convenient using and that is why you would notice但是,您可以使用我发现使用起来更方便的 Dockerfile,而不是从 fabric8 maven 插件构建 Image,这就是您会注意到的原因

<build>
   <dockerFileDir>${project.basedir}</dockerFileDir>
</build>

DockerFile文件

    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"]

If you want to push your images to Docker hub registry then you can use this link .如果要将图像推送到 Docker 中心注册表,则可以使用此链接

if you don't have to use that plugin, I recommend spotify's docker-maven-plugin .如果您不必使用该插件,我建议您使用 spotify 的docker-maven-plugin after you setup, you can do mvn clean package docker:build to build the docker image.设置后,您可以执行mvn clean package docker:build来构建 docker 映像。

your pom.xml looks like this:你的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>
...

Your Dockerfile in src/main/docker looks something like this:你在src/main/docker Dockerfile中的Dockerfile看起来像这样:

FROM openjdk:8u102-jre
ARG finalName
ADD $finalName /my-app.jar
ENTRYPOINT ["java","-jar","/my-app.jar"]

References:参考资料:

https://spring.io/guides/gs/spring-boot-docker https://spring.io/guides/gs/spring-boot-docker

https://github.com/spotify/docker-maven-plugin https://github.com/spotify/docker-maven-plugin

Here is an example of an inline assembly configuration 是内联汇编配置的示例

Add this lines to your pom file, and use mvn docker:build将此行添加到您的 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> 
...

Location of Dockerfile: src/main/docker Dockerfile 的位置:src/main/docker
Maven io.fabric8 docker plugin configuration 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM