springboot與docker整合三步曲之專案打包部署
阿新 • • 發佈:2018-12-12
前面我們構建了jdk執行環境的映象,這裡我們只需要將springboot專案打包到該映象中,形成一個新的映象springboot-docker,到時候,利用這個映象啟動容器。再做埠對映,就可以訪問我們部署在docker中的springboot專案了。
1、構建springboot專案,編寫pom.xml檔案。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.xxx</groupId> <artifactId>springboot-docker</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>springboot-docker</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.4.RELEASE</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>1.1.1</version> <configuration> <imageName>local/${project.artifactId}</imageName> <dockerDirectory>src/main/docker</dockerDirectory> <resources> <resource> <targetPath>/</targetPath> <directory>${project.build.directory}</directory> <include>${project.build.finalName}.jar</include> </resource> </resources> </configuration> </plugin> </plugins> </build> </project>
專案結構:
2、編寫App.java啟動類,該啟動類還兼顧controller的角色。
package com.xxx.springbootwithdocker; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @SpringBootApplication @RestController public class App{ public static void main( String[] args ){ SpringApplication.run(App.class, args); } @GetMapping("/") public String index(){ return "{\"id\":\"1001\",\"content\":\"this is a docker\"}"; } }
3、準備打包的Dockerfile檔案。src/main目錄下新建docker資料夾,並新建Dockerfile檔案,檔案內容如下:
FROM local/centos7-jdk8
VOLUME /tmp
ADD springboot-docker-0.0.1-SNAPSHOT.jar app.jar
RUN sh -c 'touch /app.jar'
ENV JAVA_OPTS=""
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]
4、編譯打包映象。gitshell命令列切換到springboot-docker專案目錄下,執行mvn clean package docker:build
$ mvn clean package docker:build
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building springboot-docker 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-clean-plugin:3.0.0:clean (default-clean) @ springboot-docker ---
[INFO] Deleting d:\git\GameWorld\Service\springboot-docker\target
[INFO]
[INFO] --- maven-resources-plugin:3.0.2:resources (default-resources) @ springboot-docker ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory d:\git\GameWorld\Service\springboot-docker\src\main\resources
[INFO] skip non existing resourceDirectory d:\git\GameWorld\Service\springboot-docker\src\main\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.7.0:compile (default-compile) @ springboot-docker ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to d:\git\GameWorld\Service\springboot-docker\target\classes
[INFO]
[INFO] --- maven-resources-plugin:3.0.2:testResources (default-testResources) @ springboot-docker ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory d:\git\GameWorld\Service\springboot-docker\src\test\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.7.0:testCompile (default-testCompile) @ springboot-docker ---
[INFO] No sources to compile
[INFO]
[INFO] --- maven-surefire-plugin:2.21.0:test (default-test) @ springboot-docker ---
[INFO] No tests to run.
[INFO]
[INFO] --- maven-jar-plugin:3.0.2:jar (default-jar) @ springboot-docker ---
[INFO] Building jar: d:\git\GameWorld\Service\springboot-docker\target\springboot-docker-0.0.1-SNAPSHOT.jar
[INFO]
[INFO] --- spring-boot-maven-plugin:2.0.4.RELEASE:repackage (default) @ springboot-docker ---
[INFO]
[INFO] --- docker-maven-plugin:1.1.1:build (default-cli) @ springboot-docker ---
[INFO] Using authentication suppliers: [ConfigFileRegistryAuthSupplier]
[INFO] Copying d:\git\GameWorld\Service\springboot-docker\target\springboot-docker-0.0.1-SNAPSHOT.jar -> d:\git\GameWorld\Service\springboot-docker\ta
rget\docker\springboot-docker-0.0.1-SNAPSHOT.jar
[INFO] Copying src\main\docker\Dockerfile -> d:\git\GameWorld\Service\springboot-docker\target\docker\Dockerfile
[INFO] Building image local/springboot-docker
Step 0 : FROM local/centos7-jdk8
---> 526ac3c7d9bc
Step 1 : VOLUME /tmp
---> Running in 3e280a0ada9a
---> a5413101d40c
Removing intermediate container 3e280a0ada9a
Step 2 : ADD springboot-docker-0.0.1-SNAPSHOT.jar app.jar
---> fd445c67de28
Removing intermediate container 6c88bd797017
Step 3 : RUN sh -c 'touch /app.jar'
---> Running in 3848c1b364fe
---> 4a5ce0df766f
Removing intermediate container 3848c1b364fe
Step 4 : ENV JAVA_OPTS ""
---> Running in 7593b0bf0660
---> e91748a27f6c
Removing intermediate container 7593b0bf0660
Step 5 : ENTRYPOINT sh -c java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar
---> Running in 7f3b41d42b33
---> f6ee77cee236
Removing intermediate container 7f3b41d42b33
Successfully built f6ee77cee236
[INFO] Built local/springboot-docker
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 30.636 s
[INFO] Finished at: 2018-09-26T10:58:38+08:00
[INFO] Final Memory: 51M/458M
[INFO] ------------------------------------------------------------------------
構建成功,我們可以檢視映象,啟動容器。
啟動成功,需要做一個埠對映,我們就可以通過windows本機上的瀏覽器訪問springboot專案。
訪問 http://localhost:18080/
至此,springboot與docker整合,已經全部完成,整個過程基本都是在配置docker映象,構建docker映象。