版權聲明:本文為部落客原創文章,未經部落客允許不得轉載。 https://blog.csdn.net/u010046908/article/details/56008445
1. Docker 簡介
Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然後釋出到任何流行的 Linux 機器上,也可以實作虛拟化。容器是完全使用沙箱機制,互相之間不會有任何接口。Docker image 是用于運作容器化程序的方案,在本文中,我們将建構一個簡單的 Spring Boot 應用程式。
2.環境搭建
- JDK 1.8+
- Maven 3.0+
- Docker 最新版。
3.用 Maven 建構項目
3.1 建立目錄結構
mkdir -p src/main/java/com/lidong/demo
在linux或者mac系統中。
3.2 建立 pom.xml 檔案
<?xml version="1.0" encoding="UTF-8"?>
<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.lidong.demo</groupId>
<artifactId>lidong-spring-boot-demo</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.1.RELEASE</version>
<relativePath/>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<docker.image.prefix>springio</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>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</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>0.4.13</version>
<configuration>
<imageName>${docker.image.prefix}/${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>
注意:
-
Spring Boot Maven plugin 提供了很多友善的功能:
1)它收集的類路徑上所有 jar 檔案,并建構成一個單一的、可運作的jar,這使得它更友善地執行和傳輸服務。
2)它搜尋的 public static void main() 方法來标記為可運作的類。
3)它提供了一個内置的依賴解析器,用于設定版本号以比對 Spring Boot 的依賴。您可以覆寫任何你想要的版本,但它會預設選擇的 Boot 的版本集。
-
Spotify 的 docker-maven-plugin 插件是用于建構 Maven 的 Docker Image
1)imageName指定了鏡像的名字,本例為 springio/lidong-spring-boot-demo
2)dockerDirectory指定 Dockerfile 的位置
3)resources是指那些需要和 Dockerfile 放在一起,在建構鏡像時使用的檔案,一般應用 jar 包需要納入。
4.編寫 第一個Spring Boot 應用
編寫一個簡單的 Spring Boot 應用 :
src/main/java/com/lidong/demo/SampleController.java:
package com.lidong.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
/**
* @項目名稱:lidong-dubbo
* @類名:SampleController
* @類的描述:
* @作者:lidong
* @建立時間:2017/2/19 上午9:34
* @公司:chni
* @QQ:1561281670
* @郵箱:[email protected]
*/
@Controller
@SpringBootApplication
public class SampleController {
@ResponseBody
@RequestMapping(value = "/")
String home(){
return "Hello Docker World";
}
public static void main(String[] args) {
SpringApplication.run(SampleController.class,"--server.port=8081");
}
}
- 類用 @SpringBootApplication @RestController 辨別,可用 Spring MVC 來處理 Web 請求。
- @RequestMapping 将 / 映射到 home() ,并将”Hello Docker World” 文本作為響應。
- main() 方法使用 Spring Boot 的 SpringApplication.run() 方法來啟動應用。
5.運作程式
5.1使用Maven指令
mvn package
運作:
java -jar target/lidong-spring-boot-demo-1.0-SNAPSHOT.jar
通路項目
如果程式正确運作,浏覽器通路
http://localhost:8081/,可以看到頁面 “Hello Docker World.” 字樣。
5.2 使用IDEA 插件
6.将項目容器化
Docker 使用 Dockerfile 檔案格式來指定 image 層,
建立檔案 src/main/docker/Dockerfile:
FROM frolvlad/alpine-oraclejdk8:slim
VOLUME /tmp
ADD lidong-spring-boot-demo-1.0-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" ]
解釋下這個配置檔案:
VOLUME 指定了臨時檔案目錄為/tmp。其效果是在主機 /var/lib/docker 目錄下建立了一個臨時檔案,并連結到容器的/tmp。改步驟是可選的,如果涉及到檔案系統的應用就很有必要了。/tmp目錄用來持久化到 Docker 資料檔案夾,因為 Spring Boot 使用的内嵌 Tomcat 容器預設使用/tmp作為工作目錄
項目的 jar 檔案作為 “app.jar” 添加到容器的
ENTRYPOINT 執行項目 app.jar。為了縮短 Tomcat 啟動時間,添加一個系統屬性指向 “/dev/urandom” 作為 Entropy Source
建構 Docker Image
執行建構成為 docker image:
mvn package docker:build
運作
運作 Docker Image
docker run -p 8081:8081 -t springio/lidong-spring-boot-demo
看到這個Spring的圖示。就以為這我們在docker 上釋出Spring boot 程式已經完成。
接下來去通路在浏覽器通路
參考資料:
http://spring.io/guides/gs/spring-boot-docker/在這裡是一個簡單的spring boot的入門。後面會詳細介紹Spring-boot 建構微服務一些具體的知識。