概述
當下web服務端開發中最火的名詞中絕對有微服務的一席之地,其也成為當下網際網路後端服務架構演進歷程中最閃亮的技術之一。微服務的基本思想在於考慮圍繞著業務領域元件來建立應用,這些應用可獨立地進行開發、管理和加速。在分散的元件中使用微服務雲架構和平臺,使部署、管理和服務功能交付變得更加簡單。既然服務被分割和微小化了,我們很容易想到如果將其和docker結合,讓docker承載著一個個的微服務執行,如此一來將會讓服務間耦合度降低,部署簡潔,同時系統的架構也更加清晰,便於長期演進,基於此想法有了這篇文章的入門實踐!
注: 本文首發於 My 公眾號 CodeSheep ,可 長按 或 掃描 下面的 小心心 來訂閱 ↓ ↓ ↓
建立基於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介面就行了,為了後續瀏覽器能驗證一下,訪問/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映象構建的編排:
FROM maven:3.3.3
ADD pom.xml /tmp/build/
RUN cd /tmp/build && mvn -q dependency:resolve
ADD src /tmp/build/src
#構建應用
RUN cd /tmp/build && mvn -q -DskipTests=true package \
#拷貝編譯結果到指定目錄
&& 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”]
複製程式碼
進入Docker的世界
-
0x01. 在Spring專案根目錄下根據Dockerfile來生成docker映象
`docker build -t springindocker .` 複製程式碼
-
0x02. 從剛建立的映象來啟動容器
docker run -d -p 8080:8080 springindocker
-
0x03. 開啟瀏覽器,或者使用 curl 訪問
http://127.0.0.1:8080
就可以看到web伺服器裡返回的Hello Docker!!!
問好的字元了
至此就說明你成功將一個基於 Spring Boot 的應用 Docker 化了。
本文雖然只是以一個Demo,但一個大型的web專案無非也就是由諸多這種Rest服務,外加各種基礎設施、資料庫、通訊、中介軟體以及排程來構成,每個子元素的開發也依然遵循這裡的基本流程。
後記
作者更多的SpringBt實踐文章在此:
- Spring Boot應用監控實戰
- SpringBoot應用部署於外接Tomcat容器
- ElasticSearch搜尋引擎在SpringBt中的實踐
- 初探Kotlin+SpringBoot聯合程式設計
- Spring Boot日誌框架實踐
- SpringBoot優雅編碼之:Lombok加持
如果有興趣,也可以抽點時間看看作者一些關於容器化、微服務化方面的文章:
- 利用K8S技術棧打造個人私有云 連載文章
- 從一份配置清單詳解Nginx伺服器配置
- Docker容器視覺化監控中心搭建
- 利用ELK搭建Docker容器化應用日誌中心
- RPC框架實踐之:Apache Thrift
- RPC框架實踐之:Google gRPC
- 微服務呼叫鏈追蹤中心搭建
- Docker容器跨主機通訊
- Docker Swarm叢集初探
- 高效編寫Dockerfile的幾條準則