javascript
docker java镜像_Springboot整合MongoDB的Docker开发,其它应用也类似
1 前言
Docker是容器開發的事實標準,而Springboot是Java微服務常用框架,二者必然是會走到一起的。本文將講解如何開發Springboot項目,把它做成Docker鏡像,并運行起來。
2 把Springboot打包成Docker鏡像
Springboot的Web開發非常簡單,本次使用之前講解過的Springboot整合MongoDB的項目,請參考《實例講解Springboot整合MongoDB進行CRUD操作的兩種方式》,文章中有源碼;MongoDB的安裝請參考:《【MongoDB】用Docker安裝一個MongoDB最新版玩玩》。
2.1 修改配置文件,讓容器內部連接宿主機服務
修改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是運行在Docker容器里面的,有網絡隔離。查看Docker的network,有以下三個,默認使用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,但不建議這樣做,這相當于容器與宿主機共享網絡,會有風險。
對于Mac和Windows,如果Docker版本在v18.03或以上,就可以使用host.docker.internal。建議使用新版本,就不用考慮更早版本的方案了,哈哈。
2.2 通過Dockerfile生成鏡像
通過Dockerfile來生成鏡像是很常用的方式,必須要掌握的,文件具體內容如下:
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應用,所以我們找了一個帶JDK環境的鏡像。這就非常靈活了,有非常多帶Java環境的鏡像,即使沒有合適的,也可以自己做一個;
- ARG:Dockerfile構建時的參數;
- ENV:環境變量;
- COPY:把文件復制到新的鏡像內;
- EXPOSE:暴露端口,這樣外部才能訪問;
- ENTRYPOINT:啟動命令。
準備好了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 啟動應用
應用Springboot前請先確保已經成功啟動了MongoDB并創建好了相關用戶。
啟動應用如下:
$?docker?run?-d?--name?pkslow-springboot?-p?8080:8080?pkslow/springboot-mongo:0.0.3ee479efc132b7839cf4973c5b78164554485f733489835f8888dcc726d2e1c3f
會返回一個容器ID,可以查看其信息。
查看Docker容器運行狀態,說明它正常運行:
$?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應用已經正常啟動,并成功連接MongoDB。
用Postman做一個簡單的測試,成功插入一條數據:
4 總結
雖然案例講的是Springboot的Docker開發,但其它應用也是類似的。
這是微軟關于Docker微服務的開發流程圖,大體就是應用代碼——Dockerfile——生成鏡像——容器編排服務——運行——測試——提交,前面幾步都一樣的,后面的我們將會采用Kubernetes,后續再講解。
歡迎訪問南瓜慢說 www.pkslow.com獲取更多精彩文章!
歡迎關注微信公眾號<南瓜慢說>,將持續為你更新...
多讀書,多分享;多寫作,多整理。
總結
以上是生活随笔為你收集整理的docker java镜像_Springboot整合MongoDB的Docker开发,其它应用也类似的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 下周二油价或再上涨 距天花板还有多远:中
- 下一篇: 【转】进阶 JavaScript 必知的