僅想在Docker裏運行一個Spring Boot項目,搗鼓了許久。。。java
本文主要適用於Windows環境下的Dockergit
空空如也。。。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); } }
參考: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"]
咱們定製鏡像,須要以一個鏡像爲基礎,FROM 指代的就是。docker
openjdk:8-jdk-alpine瀏覽器
由於不知道爲啥是這個,畢竟也是第一次見,就先試試其餘的。oracle
依次下載了他們,openjdk、oracle/openjdk 和 openjdk:8-jdk-alpineapp
差別很明顯吧,鏡像小了874MB(......)dom
<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>
你剛開始百度到的命令多是: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,就不會有上邊的錯誤。這個仇先記下了。。。
接下來,開始運行了,覺得正常了。
[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。
[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
瀏覽器內訪問: