用 Docker 的方式搭建一個(gè) Java Spring Boot 應(yīng)用

[轉(zhuǎn)載]?daoCould文檔

Java 開發(fā)者的 Docker 之旅

在 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)用的關(guān)鍵元素

鏡像是 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)目模板译断。

添加項(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!";? ? }}

添加 Dockerfile

在應(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

進(jìn)入 Docker 的世界

在一切準(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ū)用戶譚文科提供

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末舱污,一起剝皮案震驚了整個(gè)濱河市胰默,隨后出現(xiàn)的幾起案子恋谭,更是在濱河造成了極大的恐慌糠睡,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,509評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件疚颊,死亡現(xiàn)場(chǎng)離奇詭異狈孔,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)材义,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門均抽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人母截,你說(shuō)我怎么就攤上這事到忽¢辖蹋” “怎么了清寇?”我有些...
    開封第一講書人閱讀 163,875評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)护蝶。 經(jīng)常有香客問(wèn)我华烟,道長(zhǎng),這世上最難降的妖魔是什么持灰? 我笑而不...
    開封第一講書人閱讀 58,441評(píng)論 1 293
  • 正文 為了忘掉前任盔夜,我火速辦了婚禮,結(jié)果婚禮上堤魁,老公的妹妹穿的比我還像新娘喂链。我一直安慰自己,他們只是感情好妥泉,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評(píng)論 6 392
  • 文/花漫 我一把揭開白布椭微。 她就那樣靜靜地躺著,像睡著了一般盲链。 火紅的嫁衣襯著肌膚如雪蝇率。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,365評(píng)論 1 302
  • 那天刽沾,我揣著相機(jī)與錄音本慕,去河邊找鬼。 笑死侧漓,一個(gè)胖子當(dāng)著我的面吹牛锅尘,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播布蔗,決...
    沈念sama閱讀 40,190評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼藤违,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼忙菠!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起纺弊,我...
    開封第一講書人閱讀 39,062評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤牛欢,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后淆游,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體傍睹,經(jīng)...
    沈念sama閱讀 45,500評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評(píng)論 3 335
  • 正文 我和宋清朗相戀三年犹菱,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了拾稳。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,834評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡腊脱,死狀恐怖访得,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情陕凹,我是刑警寧澤悍抑,帶...
    沈念sama閱讀 35,559評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站杜耙,受9級(jí)特大地震影響搜骡,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜佑女,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評(píng)論 3 328
  • 文/蒙蒙 一记靡、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧团驱,春花似錦摸吠、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至贩幻,卻和暖如春轿腺,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背丛楚。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工族壳, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人趣些。 一個(gè)月前我還...
    沈念sama閱讀 47,958評(píng)論 2 370
  • 正文 我出身青樓仿荆,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子拢操,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理锦亦,服務(wù)發(fā)現(xiàn),斷路器令境,智...
    卡卡羅2017閱讀 134,656評(píng)論 18 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,810評(píng)論 6 342
  • Docker — 云時(shí)代的程序分發(fā)方式 要說(shuō)最近一年云計(jì)算業(yè)界有什么大事件杠园?Google Compute Engi...
    ahohoho閱讀 15,532評(píng)論 15 147
  • 回憶若能下酒,往事便可作一場(chǎng)宿醉舔庶,一醉方休抛蚁。 有人說(shuō),回憶是個(gè)很奇妙的東西惕橙,它能讓你在上一秒揚(yáng)起嘴角瞧甩,也能在下一秒...
    一個(gè)人_木偶閱讀 426評(píng)論 1 0
  • 春暖了時(shí)光,亦染了塵世弥鹦!昨天還是春深似海肚逸、風(fēng)月無(wú)邊,今日竟是春意闌珊彬坏、風(fēng)雨兼程朦促。老天也懂得,人間四月天苍鲜,清明雨漣漣...
    哲語(yǔ)細(xì)細(xì)閱讀 654評(píng)論 33 27