Docker 部署 Spring Boot 項目初探

僅想在Docker裏運行一個Spring Boot項目,搗鼓了許久。。。java

本文主要適用於Windows環境下的Dockergit

1、運行環境

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

2、建立Spring Boot項目

空空如也。。。github

<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);
    }
}

3、建立一個Dockerfile

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

內容:和官方指南徹底同樣;下邊只說FROM,其餘幾個官網解釋的很好spring

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

一、什麼是FORM

咱們定製鏡像,須要以一個鏡像爲基礎,FROM 指代的就是。docker

二、官方用哪一個

openjdk:8-jdk-alpine瀏覽器

由於不知道爲啥是這個,畢竟也是第一次見,就先試試其餘的。oracle

依次下載了他們,openjdk、oracle/openjdk 和 openjdk:8-jdk-alpineapp

三、具體差別

3.1 使用 openjdk

3.2 使用 openjdk:8-jdk-alpine

差別很明顯吧,鏡像小了874MB(......)dom

4、修改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>

5、指南正文

一、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,就不會有上邊的錯誤。這個仇先記下了。。。

二、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。

三、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,接着以下圖

6、完

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

查看鏡像:docker images

運行鏡像:docker run -d -p 8088:8080 --name greet amos/greet

瀏覽器內訪問:

相關文章
相關標籤/搜索