
概述
當(dāng)下web服務(wù)端開發(fā)中最火的名詞中絕對有微服務(wù)的一席之地,其也成為當(dāng)下互聯(lián)網(wǎng)后端服務(wù)架構(gòu)演進(jìn)歷程中最閃亮的技術(shù)之一。微服務(wù)的基本思想在于考慮圍繞著業(yè)務(wù)領(lǐng)域組件來創(chuàng)建應(yīng)用,這些應(yīng)用可獨(dú)立地進(jìn)行開發(fā)、管理和加速。在分散的組件中使用微服務(wù)云架構(gòu)和平臺,使部署、管理和服務(wù)功能交付變得更加簡單。既然服務(wù)被分割和微小化了,我們很容易想到如果將其和docker結(jié)合,讓docker承載著一個個的微服務(wù)運(yùn)行,如此一來將會讓服務(wù)間耦合度降低,部署簡潔,同時系統(tǒng)的架構(gòu)也更加清晰,便于長期演進(jìn),基于此想法有了這篇文章的入門實踐!
注: 本文原載于 My Personal Blog:, CodeSheep · 程序羊 !
創(chuàng)建基于maven的spring bt項目
- pom.xml中加依賴:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.0.RELEASE</version>
</parent>
<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>
- 我們只需要在啟動類中添加一個簡單的restful接口就行了,為了后續(xù)瀏覽器能驗證一下,訪問/hello接口,能向瀏覽器返回一個
Hello Docker!的問好!
@RestController
public class DockerDemoSpringApplication {
public static void main(String[] args) {
SpringApplication.run(DockerDemoSpringApplication.class, args);
}
@RequestMapping("/hello")
public String hello(){
return "Hello! Docker!”;
}
}
編寫Dockerfile
我們在Spring Bt項目的根目錄下建立Dockerfile,用起來完成Docker鏡像構(gòu)建的編排:
FROM maven:3.3.3
ADD pom.xml /tmp/build/
RUN cd /tmp/build && mvn -q dependency:resolve
ADD src /tmp/build/src
#構(gòu)建應(yīng)用
RUN cd /tmp/build && mvn -q -DskipTests=true package \
#拷貝編譯結(jié)果到指定目錄
&& mv target/*.jar /app.jar \
#清理編譯痕跡
&& cd / && rm -rf /tmp/build
VOLUME /tmp
EXPOSE 8080
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar”]
進(jìn)入Docker的世界
-
0x01. 在Spring項目根目錄下根據(jù)Dockerfile來生成docker鏡像
`docker build -t springindocker .` 0x02. 從剛創(chuàng)建的鏡像來啟動容器
docker run -d -p 8080:8080 springindocker0x03. 打開瀏覽器,或者使用 curl 訪問
http://127.0.0.1:8080就可以看到web服務(wù)器里返回的Hello Docker!!!問好的字符了
至此就說明你成功將一個基于 Spring Boot 的應(yīng)用 Docker 化了。
本文雖然只是以一個Demo,但一個大型的web項目無非也就是由諸多這種Rest服務(wù),外加各種基礎(chǔ)設(shè)施、數(shù)據(jù)庫、通信、中間件以及調(diào)度來構(gòu)成,每個子元素的開發(fā)也依然遵循這里的基本流程。
后記
由于能力有限,若有錯誤或者不當(dāng)之處,還請大家批評指正,一起學(xué)習(xí)交流!