Docker 部署 Spring Boot 项目指南


声明:本文转载自https://my.oschina.net/AmosWang/blog/2088358,转载目的在于传递更多信息,仅供学习交流之用。如有侵权行为,请联系我,我会及时删除。

仅想在Docker里运行一个Spring Boot项目,捣鼓了许久。。。

本文主要适用于Windows环境下的Docker

一、运行环境

  • Windows 10
  • Maven 3.5
  • Docker 18.06.1-ce-win73 (19507)

二、创建Spring Boot项目

空空如也。。。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
@RestController
@SpringBootApplication
public class GreetApplication {

    @GetMapping("hello")
    public String hello() {
        return "Hello Docker!";
    }

    public static void main(String[] args) {
        SpringApplication.run(GreetApplication.class, args);
    }
}

三、创建一个Dockerfile

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

内容:和官方指南完全一样;下边只说FROM,其他几个官网解释的很好

FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG JAR_FILE
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

1、什么是FORM

我们定制镜像,需要以一个镜像为基础,FROM 指代的就是。

2、官方用哪个

openjdk:8-jdk-alpine

因为不知道为啥是这个,毕竟也是第一次见,就先试试其他的。

依次下载了他们,openjdk、oracle/openjdk 和 openjdk:8-jdk-alpine

3、具体差异

3.1 使用 openjdk

3.2 使用 openjdk:8-jdk-alpine

差异很明显吧,镜像小了874MB(......)

四、修改pom.xml配置

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
    <skipTests>true</skipTests>
    <docker.image.prefix>amos</docker.image.prefix>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>


<build>
    <finalName>greet</finalName>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
        <plugin>
            <groupId>com.spotify</groupId>
            <artifactId>dockerfile-maven-plugin</artifactId>
            <version>1.3.6</version>
            <configuration>
                <repository>${docker.image.prefix}/${project.artifactId}</repository>
                <buildArgs>
                    <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
                </buildArgs>
            </configuration>
        </plugin>
    </plugins>
</build>

五、指南正文

1、Maven 不识别 docker:build

你刚开始百度到的命令可能是:mvn clean package docker:build,然后运行,接着就失败了...

[ERROR] No plugin found for prefix 'docker' in the current project and in the plugin groups...

解决办法是修改 maven 的配置文件 settings.xml。( pluginGroups 在 settings.xml 中的位置很靠上)

<pluginGroups>
    <pluginGroup>com.spotify</pluginGroup>
</pluginGroups>

后来,你可能会发现,使用mvn clean package dockerfile:build,就不会有上边的错误。这个仇先记下了。。。

2、Must specify baseImage if dockerDirectory

接下来,开始运行了,以为正常了。

[ERROR] ... Exception caught: Must specify baseImage if dockerDirectory is null -> [Help 1]

翻到https://github.com/spotify/dockerfile-maven,你会发现应该使用mvn clean package dockerfile:build,而不是mvn clean package docker:build。

3、Connect to localhost:2375 ... failed

[ERROR] ... Connect to localhost:2375 [localhost/127.0.0.1, localhost/0:0:0:0:0:0:0:1] failed: Connection refused: connect

右键运行中的docker,Settings,接着如下图

六、完

生成镜像到本地:mvn package dockerfile:build

查看镜像:docker images

运行镜像:docker run -d -p 8088:8080 --name greet amos/greet

浏览器内访问:

本文发表于2018年09月21日 13:00
(c)注:本文转载自https://my.oschina.net/AmosWang/blog/2088358,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如有侵权行为,请联系我们,我们会及时删除.

阅读 5888 讨论 1 喜欢 1

抢先体验

扫码体验
趣味小程序
文字表情生成器

闪念胶囊

万稳万当,不如一默。任何一句话,你不说出来便是那句话的主人,你说了出来,便是那句话的奴隶。

你要过得好哇,这样我才能恨你啊,你要是过得不好,我都不知道该恨你还是拥抱你啊。

直抵黄龙府,与诸君痛饮尔。

那时陪伴我的人啊,你们如今在何方。

不出意外的话,我们再也不会见了,祝你前程似锦。

快捷链接
网站地图
提交友链
Copyright © 2016 - 2021 Cion.
All Rights Reserved.
京ICP备2021004668号-1