Springboot整合MongoDB的Docker開發(fā)教程全解
1 前言
Docker
是容器開發(fā)的事實標(biāo)準(zhǔn),而Springboot
是Java
微服務(wù)常用框架,二者必然是會走到一起的。本文將講解如何開發(fā)Springboot
項目,把它做成Docker
鏡像,并運行起來。
2 把Springboot打包成Docker鏡像
Springboot
的Web
開發(fā)非常簡單,本次使用之前講解過的Springboot
整合MongoDB
的項目,請參考
實例講解Springboot整合MongoDB進行CRUD操作的兩種方式,文章中有源碼;MongoDB
的安裝請參考:用Docker安裝一個MongoDB最新版玩玩。
2.1 修改配置文件,讓容器內(nèi)部連接宿主機服務(wù)
修改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)絡(luò)隔離。查看Docker
的network
,有以下三個,默認(rèn)使用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
,但不建議這樣做,這相當(dāng)于容器與宿主機共享網(wǎng)絡(luò),會有風(fē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
應(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-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 啟動應(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.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
應(yīng)用已經(jīng)正常啟動,并成功連接MongoDB
。
用Postman
做一個簡單的測試,成功插入一條數(shù)據(jù):
4 總結(jié)
雖然案例講的是Springboot
的Docker
開發(fā),但其它應(yīng)用也是類似的。
這是微軟關(guān)于Docker
微服務(wù)的開發(fā)流程圖,大體就是應(yīng)用代碼
——Dockerfile
——生成鏡像
——容器編排服務(wù)
——運行
——測試
——提交
,前面幾步都一樣的,后面的我們將會采用Kubernetes
,后續(xù)再講解。
總結(jié)
到此這篇關(guān)于Springboot整合MongoDB的Docker開發(fā)教程全解的文章就介紹到這了,更多相關(guān)Springboot整合MongoDB內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 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)文件上傳下載刪除
相關(guān)文章
Java將字符串轉(zhuǎn)化為數(shù)組的兩種方法
Java中的String類是一種特殊的字符串,它可以被用于處理字符串,Java中的String類也可以將字符串轉(zhuǎn)換為數(shù)組,下面這篇文章主要給大家介紹了關(guān)于Java將字符串轉(zhuǎn)化為數(shù)組的兩種方法,需要的朋友可以參考下2023-05-05springcloud gateway如何實現(xiàn)路由和負(fù)載均衡
這篇文章主要介紹了springcloud gateway如何實現(xiàn)路由和負(fù)載均衡的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07關(guān)于SpringBoot自定義條件注解與自動配置
這篇文章主要介紹了關(guān)于SpringBoot自定義條件注解與自動配置,Spring Boot的核心功能就是為整合第三方框架提供自動配置,而本文則帶著大家實現(xiàn)了自己的自動配置和Starter,需要的朋友可以參考下2023-07-07Java?嵌入數(shù)據(jù)引擎從?SQLite?到?SPL詳解
這篇文章主要介紹了Java?嵌入數(shù)據(jù)引擎:從?SQLite?到?SPL,SQLite架構(gòu)簡單,其核心雖然是C語言開發(fā)的,但封裝得比較好,對外呈現(xiàn)為一個小巧的Jar包,能方便地集成在Java應(yīng)用中,本文給大家介紹的非常詳細(xì),需要的朋友參考下2022-07-07Java調(diào)取創(chuàng)藍(lán)253短信驗證碼的實現(xiàn)代碼
這篇文章主要介紹了Java調(diào)取創(chuàng)藍(lán)253短信驗證碼的實現(xiàn)代碼,需要的朋友可以參考下2018-04-04