[轉(zhuǎn)載]?daoCould文檔
在 Docker 中使用 Java Spring Boot 框架
在 Docker 中使用 Java Spring Boot 框架
目標(biāo):用 Docker 的方式搭建一個(gè) Java Spring Boot 應(yīng)用
本項(xiàng)目代碼維護(hù)在DaoCloud/docker-demo-spring-boot項(xiàng)目中。
您可以在 GitHub 找到本項(xiàng)目并獲取本文中所提到的所有代碼文件。
Java 一直是企業(yè)應(yīng)用開發(fā)的大頭尖坤,在互聯(lián)網(wǎng)時(shí)代冬耿,在云計(jì)算、大數(shù)據(jù)的推動(dòng)下冯勉,Java 又煥發(fā)了新生澈蚌。
Spring Framework 是 Java 應(yīng)用開發(fā)中應(yīng)用最廣泛的框架,基于 AOP 及 IOC 的思想灼狰,讓它能與任何 Java 第三方框架進(jìn)行非常便利的集成宛瞄。
Spring Boot 是由 Pivotal 團(tuán)隊(duì)提供的全新框架,其設(shè)計(jì)目的是用來(lái)簡(jiǎn)化新 Spring 應(yīng)用的初始搭建以及開發(fā)過(guò)程交胚。該框架使用了特定的方式來(lái)進(jìn)行配置份汗,從而使開發(fā)人員不再需要定義樣板化的配置。通過(guò)這種方式蝴簇,Spring Boot 致力于在蓬勃發(fā)展的快速應(yīng)用開發(fā)領(lǐng)域(Rapid application development)成為領(lǐng)導(dǎo)者杯活。
Maven 自從公布以來(lái),在 Java 應(yīng)用構(gòu)建和管理中一直處于最重要的地位熬词,基于 Project Object Model 的概念管理項(xiàng)目旁钧。
鏡像是 Docker 應(yīng)用的靜態(tài)表示,是應(yīng)用的交付件互拾,鏡像中包含了應(yīng)用運(yùn)行所需的所有依賴:包括應(yīng)用代碼均践、應(yīng)用依賴庫(kù)、應(yīng)用運(yùn)行時(shí)和操作系統(tǒng)摩幔。
Dockerfile 是一個(gè)描述文件彤委,描述了產(chǎn)生 Docker 鏡像的過(guò)程。詳細(xì)文檔請(qǐng)參見Dockerfile文檔
容器是鏡像運(yùn)行時(shí)的動(dòng)態(tài)表示或衡,如果把鏡像想象為一個(gè) Class 那么容器就是這個(gè) Class 的 instance 實(shí)例焦影。
一個(gè)應(yīng)用 Docker 化的第一步就是通過(guò) Dockerfile 產(chǎn)生應(yīng)用鏡像车遂。
創(chuàng)建 Spring Boot 項(xiàng)目
訪問(wèn)http://start.spring.io站點(diǎn),根據(jù)需要建立自己的應(yīng)用斯辰。
在整個(gè) Java 教程中舶担,我們將基于 Spring Boot 開發(fā)一個(gè) RESTful API 應(yīng)用,使用 MongoDB 來(lái)持久化我們的數(shù)據(jù)彬呻,項(xiàng)目使用 Maven 構(gòu)建衣陶。
現(xiàn)在,我們先建立一個(gè) RESTful API 應(yīng)用闸氮。
所以剪况,我們?cè)?Dependencies 中填寫 Web ,然后點(diǎn)擊 Generate Project 按鈕蒲跨,將會(huì)下載回來(lái)一個(gè)基于 Maven 的項(xiàng)目模板译断。
編輯src/main/java/io/daocloud/demo/DockerDemoSpringBootApplication.java文件,添加一個(gè)方法或悲,加上@RequestMapping注解孙咪,并添加類注解@RestController。
@RestControllerpublicclassDockerDemoSpringBootApplication{publicstaticvoidmain(String[] args){? ? ? ? SpringApplication.run(DockerDemoSpringBootApplication.class, args);? ? }@RequestMapping("")publicStringhello(){return"Hello! Docker!";? ? }}
在應(yīng)用根目錄下建立 Dockerfile 文件巡语,內(nèi)容如下:
FROM maven:3.3.3ADD pom.xml /tmp/build/RUNcd/tmp/build && mvn -q dependency:resolveADD src /tmp/build/src#構(gòu)建應(yīng)用RUNcd/tmp/build && mvn -q -DskipTests=truepackage \#拷貝編譯結(jié)果到指定目錄&& mv target/*.jar /app.jar \#清理編譯痕跡&&cd/ && rm -rf /tmp/buildVOLUME /tmpEXPOSE8080ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
由于項(xiàng)目使用 Maven 構(gòu)建翎蹈,故本次基礎(chǔ)鏡像選用maven:3.3.3官方鏡像。
官方維護(hù)的 Maven 鏡像依賴于 Java 鏡像構(gòu)建男公,所以我們不需要使用 Java 鏡像荤堪。
因?yàn)?Spring Boot 框架打包的應(yīng)用是一個(gè)包含依賴的 jar 文件,內(nèi)嵌了 Tomcat 和 Jetty 支持理澎,所以我們只需要使用包含 Java 的 Maven 鏡像即可逞力,不需要 Tomcat 鏡像。
為了減少鏡像大小糠爬,在執(zhí)行 Maven 構(gòu)建之后寇荧,清理了構(gòu)建痕跡。
在 Dockerfile 文件的最后执隧,使用ENTRYPOINT指令執(zhí)行啟動(dòng) Java 應(yīng)用的操作揩抡。
Dockerfile 具體語(yǔ)法請(qǐng)參考:Dockerfile。
在一切準(zhǔn)備好之后镀琉,在應(yīng)用根目錄執(zhí)行如下命令峦嗤,構(gòu)建 Docker 鏡像:
dockerbuild -t docker-demo-spring-boot .
最后,讓我們從鏡像啟動(dòng)容器:
dockerrun -d -p8080:8080docker-demo-spring-boot
打開瀏覽器,或者使用 curl 訪問(wèn)如下地址:
http://127.0.0.1:8080
將會(huì)看到Hello! Docker!文字。
如果看到這段字符串抖单,那么就說(shuō)明你成功將一個(gè)基于 Spring Boot 的應(yīng)用 Docker 化了逸尖。
歡迎來(lái)到 Docker 的世界,這個(gè)世界有你意想不到的精彩魔招!
本文由 DaoCloud 社區(qū)用戶譚文科提供