javascript
docker java镜像_Springboot整合MongoDB的Docker开发,其它应用也类似
1 前言
Docker是容器開發(fā)的事實標(biāo)準(zhǔn),而Springboot是Java微服務(wù)常用框架,二者必然是會走到一起的。本文將講解如何開發(fā)Springboot項目,把它做成Docker鏡像,并運(yùn)行起來。
2 把Springboot打包成Docker鏡像
Springboot的Web開發(fā)非常簡單,本次使用之前講解過的Springboot整合MongoDB的項目,請參考《實例講解Springboot整合MongoDB進(jìn)行CRUD操作的兩種方式》,文章中有源碼;MongoDB的安裝請參考:《【MongoDB】用Docker安裝一個MongoDB最新版玩玩》。
2.1 修改配置文件,讓容器內(nèi)部連接宿主機(jī)服務(wù)
修改Springboot的配置文件,主要是MongoDB的連接信息:
server.port=8080spring.data.mongodb.authentication-database=admin
spring.data.mongodb.database=testdb
spring.data.mongodb.username=user
spring.data.mongodb.password=123456
spring.data.mongodb.host=host.docker.internal
spring.data.mongodb.port=27017
MongoDB的host需要修改為host.docker.internal,而不能是localhost或者127.0.0.1。因為Springboot是運(yùn)行在Docker容器里面的,有網(wǎng)絡(luò)隔離。查看Docker的network,有以下三個,默認(rèn)使用bridge,這時就無法通過localhost訪問。
$?docker?network?lsNETWORK?ID??????????NAME????????????????DRIVER??????????????SCOPE
8560aacda859????????bridge??????????????bridge??????????????local
2a276c0230a3????????host????????????????host????????????????local
0eeb101bcf52????????none????????????????null????????????????local
對于Linux,network可以切換成host模式,這可以直接使用localhost,但不建議這樣做,這相當(dāng)于容器與宿主機(jī)共享網(wǎng)絡(luò),會有風(fēng)險。
對于Mac和Windows,如果Docker版本在v18.03或以上,就可以使用host.docker.internal。建議使用新版本,就不用考慮更早版本的方案了,哈哈。
2.2 通過Dockerfile生成鏡像
通過Dockerfile來生成鏡像是很常用的方式,必須要掌握的,文件具體內(nèi)容如下:
FROM?adoptopenjdk/openjdk8-openj9VOLUME?/tmp
ARG?JAR_FILE=target/springboot-mongo-0.0.1-SNAPSHOT.jar
ARG?PORT=8080
ARG?TIME_ZONE=Asia/Shanghai
ENV?TZ=${TIME_ZONE}
ENV?JAVA_OPTS="-Xms64m?-Xmx256m"
COPY?${JAR_FILE}?pkslow.jar
EXPOSE?${PORT}
ENTRYPOINT?java?${JAVA_OPTS}?-Djava.security.egd=file:/dev/./urandom?-server?-jar?pkslow.jar
- FROM:指明我們基于某個鏡像來打包,因為需要啟動Java應(yīng)用,所以我們找了一個帶JDK環(huán)境的鏡像。這就非常靈活了,有非常多帶Java環(huán)境的鏡像,即使沒有合適的,也可以自己做一個;
- ARG:Dockerfile構(gòu)建時的參數(shù);
- ENV:環(huán)境變量;
- COPY:把文件復(fù)制到新的鏡像內(nèi);
- EXPOSE:暴露端口,這樣外部才能訪問;
- ENTRYPOINT:啟動命令。
準(zhǔn)備好了Dockerfile后,就可以開始打包了:
$?mvn?clean?package$?docker?build?-t?pkslow/springboot-mongo:0.0.3?.
Sending?build?context?to?Docker?daemon??23.43MB
Step?1/10?:?FROM?adoptopenjdk/openjdk8-openj9
?......
Step?10/10?:?ENTRYPOINT?java?${JAVA_OPTS}?-Djava.security.egd=file:/dev/./urandom?-server?-jar?pkslow.jar
?--->?Running?in?a1274810851f
Removing?intermediate?container?a1274810851f
?--->?4a56d8e1a93e
Successfully?built?4a56d8e1a93e
Successfully?tagged?pkslow/springboot-mongo:0.0.3
先用maven將Springboot打成jar包,然后把jar包放到鏡像里,打成新的鏡像。
成功后查看鏡像列表:
$?docker?image?ls?pkslow/springboot-mongoREPOSITORY????????????????TAG?????????????????IMAGE?ID????????????CREATED?????????????SIZE
pkslow/springboot-mongo???0.0.3???????????????4a56d8e1a93e????????46?minutes?ago??????346MB
pkslow/springboot-mongo???0.0.2???????????????3699f9106567????????3?hours?ago?????????346MB
pkslow/springboot-mongo???0.0.1???????????????37a35d2af376????????3?hours?ago?????????346MB
3 啟動應(yīng)用
應(yīng)用Springboot前請先確保已經(jīng)成功啟動了MongoDB并創(chuàng)建好了相關(guān)用戶。
啟動應(yīng)用如下:
$?docker?run?-d?--name?pkslow-springboot?-p?8080:8080?pkslow/springboot-mongo:0.0.3ee479efc132b7839cf4973c5b78164554485f733489835f8888dcc726d2e1c3f
會返回一個容器ID,可以查看其信息。
查看Docker容器運(yùn)行狀態(tài),說明它正常運(yùn)行:
$?docker?ps?-f?name=pkslow*CONTAINER?ID????????IMAGE???????????????????????????COMMAND??????????????????CREATED?????????????STATUS??????????????PORTS????????????????????NAMES
ee479efc132b????????pkslow/springboot-mongo:0.0.3???"/bin/sh?-c?'java?${…"???51?minutes?ago??????Up?51?minutes???????0.0.0.0:8080->8080/tcp???pkslow-springboot
查看容器日志命令為:docker logs 容器ID,如下:
說明Springboot應(yīng)用已經(jīng)正常啟動,并成功連接MongoDB。
用Postman做一個簡單的測試,成功插入一條數(shù)據(jù):
4 總結(jié)
雖然案例講的是Springboot的Docker開發(fā),但其它應(yīng)用也是類似的。
這是微軟關(guān)于Docker微服務(wù)的開發(fā)流程圖,大體就是應(yīng)用代碼——Dockerfile——生成鏡像——容器編排服務(wù)——運(yùn)行——測試——提交,前面幾步都一樣的,后面的我們將會采用Kubernetes,后續(xù)再講解。
歡迎訪問南瓜慢說 www.pkslow.com獲取更多精彩文章!
歡迎關(guān)注微信公眾號<南瓜慢說>,將持續(xù)為你更新...
多讀書,多分享;多寫作,多整理。
總結(jié)
以上是生活随笔為你收集整理的docker java镜像_Springboot整合MongoDB的Docker开发,其它应用也类似的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 下周二油价或再上涨 距天花板还有多远:中
- 下一篇: gradle idea java ssm