Springboot整合MongoDB的Docker開發(fā)教程全解
1 前言
Docker
是容器開發(fā)的事實標準,而Springboot
是Java
微服務常用框架,二者必然是會走到一起的。本文將講解如何開發(fā)Springboot
項目,把它做成Docker
鏡像,并運行起來。
2 把Springboot打包成Docker鏡像
Springboot
的Web
開發(fā)非常簡單,本次使用之前講解過的Springboot
整合MongoDB
的項目,請參考
實例講解Springboot整合MongoDB進行CRUD操作的兩種方式,文章中有源碼;MongoDB
的安裝請參考:用Docker安裝一個MongoDB最新版玩玩。
2.1 修改配置文件,讓容器內(nèi)部連接宿主機服務
修改Springboot
的配置文件,主要是MongoDB
的連接信息:
server.port=8080
spring.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
容器里面的,有網(wǎng)絡隔離。查看Docker
的network
,有以下三個,默認使用bridge
,這時就無法通過localhost
訪問。
$ docker network ls NETWORK ID NAME DRIVER SCOPE 8560aacda859 bridge bridge local 2a276c0230a3 host host local 0eeb101bcf52 none null local
對于Linux
,network
可以切換成host
模式,這可以直接使用localhost
,但不建議這樣做,這相當于容器與宿主機共享網(wǎng)絡,會有風險。
對于Mac
和Windows
,如果Docker
版本在v18.03
或以上,就可以使用host.docker.internal
。建議使用新版本,就不用考慮更早版本的方案了,哈哈。
2.2 通過Dockerfile生成鏡像
通過Dockerfile
來生成鏡像是很常用的方式,必須要掌握的,文件具體內(nèi)容如下:
FROM adoptopenjdk/openjdk8-openj9 VOLUME /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
環(huán)境的鏡像。這就非常靈活了,有非常多帶Java
環(huán)境的鏡像,即使沒有合適的,也可以自己做一個;
ARG
:Dockerfile
構建時的參數(shù);ENV
:環(huán)境變量;COPY
:把文件復制到新的鏡像內(nèi);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-mongo REPOSITORY 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
前請先確保已經(jīng)成功啟動了MongoDB
并創(chuàng)建好了相關用戶。
啟動應用如下:
$ docker run -d --name pkslow-springboot -p 8080:8080 pkslow/springboot-mongo:0.0.3 ee479efc132b7839cf4973c5b78164554485f733489835f8888dcc726d2e1c3f
會返回一個容器ID,可以查看其信息。
查看Docker
容器運行狀態(tài),說明它正常運行:
$ 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
應用已經(jīng)正常啟動,并成功連接MongoDB
。
用Postman
做一個簡單的測試,成功插入一條數(shù)據(jù):
4 總結
雖然案例講的是Springboot
的Docker
開發(fā),但其它應用也是類似的。
這是微軟關于Docker
微服務的開發(fā)流程圖,大體就是應用代碼
——Dockerfile
——生成鏡像
——容器編排服務
——運行
——測試
——提交
,前面幾步都一樣的,后面的我們將會采用Kubernetes
,后續(xù)再講解。
總結
到此這篇關于Springboot整合MongoDB的Docker開發(fā)教程全解的文章就介紹到這了,更多相關Springboot整合MongoDB內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
- SpringBoot整合MongoDB的步驟詳解
- SpringBoot輕松整合MongoDB的全過程記錄
- springboot配置mongodb連接池的方法步驟
- Docker mongoDB 4.2.1 安裝并收集springboot日志的步驟詳解
- 詳解在SpringBoot中使用MongoDb做單元測試的代碼
- SpringBoot整合MongoDB的示例
- SpringBoot配置MongoDB多數(shù)據(jù)源的方法步驟
- SpringBoot+MongoDB實現(xiàn)物流訂單系統(tǒng)的代碼
- Java springboot Mongodb增刪改查代碼實例
- Springboot整合MongoDB進行CRUD操作的兩種方式(實例代碼詳解)
- SpringBoot整合MongoDB實現(xiàn)文件上傳下載刪除
相關文章
springcloud gateway如何實現(xiàn)路由和負載均衡
這篇文章主要介紹了springcloud gateway如何實現(xiàn)路由和負載均衡的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07Java?嵌入數(shù)據(jù)引擎從?SQLite?到?SPL詳解
這篇文章主要介紹了Java?嵌入數(shù)據(jù)引擎:從?SQLite?到?SPL,SQLite架構簡單,其核心雖然是C語言開發(fā)的,但封裝得比較好,對外呈現(xiàn)為一個小巧的Jar包,能方便地集成在Java應用中,本文給大家介紹的非常詳細,需要的朋友參考下2022-07-07Java調取創(chuàng)藍253短信驗證碼的實現(xiàn)代碼
這篇文章主要介紹了Java調取創(chuàng)藍253短信驗證碼的實現(xiàn)代碼,需要的朋友可以參考下2018-04-04