容器化Spring Boot应用的两种方法 - swlh


在本文中,我们看到了两个如何容器化Spring Boot应用程序的示例。第一种选择是使用Dockerfile。第二个选项是docker-maven-plugin,它可以为我们完成所有工作。该插件可帮助您构建Docker映像和管理容器,尤其是对于集成测试。
您可以在GitHub存储库中找到应用程序的源代码;docker-maven-plugin的存储库
 
Docker的Spring Boot
先决条件


 
1. Docker文件
们使用具有简单格式的Dockerfile。让我们在Spring Boot应用程序的根目录中创建一个新文件,名称为Dockerfile:
FROM openjdk:14-alpine

ARG WAR_FILE=./target/*.war

COPY ${WAR_FILE} webapp.war

CMD ["java", "-Dspring.profiles.active=docker", "-jar", "webapp.war"]

  • FROM — 此关键字显示基于创建容器的镜像。在本例中,我们使用openjdk:14-alpine。您可以在dockerhub中浏览所有可能的镜像。
  • ARG—该ARG指令定义了一个变量,用户可以在构建时docker build使用带有--build-arg <varname>=<value>标志的命令通过该变量将其传递给构建器。
  • COPY —此操作将指定的文件或目录复制到容器
  • CMD — CMD命令是为执行中的容器提供默认值

要检查我们的容器,让我们使用终端。此时,应该已经安装并运行了docker 。我们需要创建一个.war文件,以后将其放置在容器中。为此,请运行以下命令
mvn clean install
 
2. docker-maven-plugin
借助此插件,我们将docker集成到了maven的生命周期中。该插件应pom.xml在build标签中添加到我们的文件中。
 
<build>
        <plugins>
            <!--io.fabric8 plugin start-->
            <plugin>
                <groupId>io.fabric8</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>0.34.1</version>
                <extensions>true</extensions>
                <configuration>
                    <verbose>true</verbose>
                    <images>
                        <image>
                            <name>${project.artifactId}</name>
                            <build>
                                <contextDir>${project.basedir}</contextDir>

                                <assembly>
                                    <descriptorRef>artifact</descriptorRef>
                                </assembly>
                                <tags>
                                    <tag>latest</tag>
                                    <tag>${project.version}</tag>
                                </tags>
                            </build>
                            <run>
                                <ports>
                                    <port>8080:8080</port>
                                </ports>
                            </run>
                        </image>
                    </images>
                </configuration>

                <!-- each time the 'package' command is run, the 'docker:build' command will be triggered -->
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>build</goal>
                        </goals>
                    </execution>
                </executions>

            </plugin>
            <!--io.fabric8 plugin end-->

        </plugins>

  </build>

让我们看一些标签。
  • <name>标签-这个标签用于指定镜像的名称。
  • 所述<contextDir>标签-指定含有Dockerfile将被用于创建镜像的目录。

如果您不想使用docker文件,则可以在<build>标记中指定所有必需的设置。在这种情况下,请在<contextDir>插入以下代码,而不是标签。
<from>openjdk:14-alpine</from>
<entryPoint>
    <exec>
        <args>java</args>
        <args>-jar</args>
        <args>/maven/${project.artifactId}-${project.version}.war</args>
    </exec>
</entryPoint>

为了自动创建镜像,让我们在<configuration>标记后添加以下代码。

<executions>
    <execution>
        <phase>package</phase>
        <goals>
            <goal>build</goal>
        </goals>
    </execution>
</executions>

每次mvn package执行命令时,都会创建一个docker镜像。
该插件还支持通过docker-compose文件进行配置,尤其是对于运行中指定的容器docker-compose.yml。Docker Compose处理也可以作为外部配置提供程序使用。
您可以在此处阅读文档— docker-compose>https://dmp.fabric8.io/docker-compose

将io.fabric8插件添加到pom.xml文件后,我们可以使用新命令: