Springboot整合MongoDB的Docker開發,其它應用也類
1 前言
Docker
是容器開發的事實標準,而Springboot
是Java
微服務常用框架,二者必然是會走到一起的。本文將講解如何開發Springboot
專案,把它做成Docker
映象,並執行起來。
2 把Springboot打包成Docker映象
Springboot
的Web
開發非常簡單,本次使用之前講解過的Springboot
整合MongoDB
的專案,請參考
,文章中有原始碼;MongoDB
的安裝請參考:。
2.1 修改配置檔案,讓容器內部連線宿主機服務
修改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
容器裡面的,有網路隔離。檢視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
,但不建議這樣做,這相當於容器與宿主機共享網路,會有風險。
對於Mac
和Windows
,如果Docker
版本在v18.03
或以上,就可以使用host.docker.internal
。建議使用新版本,就不用考慮更早版本的方案了,哈哈。
2.2 透過Dockerfile生成映象
透過Dockerfile
來生成映象是很常用的方式,必須要掌握的,檔案具體內容如下:
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
環境的映象。這就非常靈活了,有非常多帶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-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
前請先確保已經成功啟動了MongoDB
並建立好了相關使用者。
啟動應用如下:
$ docker run -d --name pkslow-springboot -p 8080:8080 pkslow/springboot-mongo:0.0.3
ee479efc132b7839cf4973c5b78164554485f733489835f8888dcc726d2e1c3f
會返回一個容器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
,後續再講解。
歡迎訪問獲取更多精彩文章!
多讀書,多分享;多寫作,多整理。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2144/viewspace-2825793/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SpringBoot 整合 dockerSpring BootDocker
- MongoDB 整合SpringBoot實踐MongoDBSpring Boot
- SpringBoot應用Docker化Spring BootDocker
- SpringBoot 整合 Spring Data Mongodb 操作 MongoDB 詳解Spring BootMongoDB
- SpringBoot2.1版本的個人應用開發框架 - 整合Druid + MybatisPlusSpring Boot框架UIMyBatis
- Spring Boot + MongoDB 應用的 Docker 化實踐Spring BootMongoDBDocker
- SpringBoot整合Redis開發Spring BootRedis
- java~springboot~gradle裡的docker整合JavaSpring BootGradleDocker
- SpringBoot整合Mongodb文件資料庫Spring BootMongoDB資料庫
- SpringBoot2.1版本的個人應用開發框架 - 整合Redis快取Spring Boot框架Redis快取
- springboot+shiro 整合與基本應用Spring Boot
- SpringBoot應用整合微服務元件NacosSpring Boot微服務元件
- SpringBoot2.0應用(五):SpringBoot2.0整合MyBatisSpring BootMyBatis
- SpringBoot2.0應用(二):SpringBoot2.0整合ActiveMQSpring BootMQ
- SpringBoot2.0應用(三):SpringBoot2.0整合RabbitMQSpring BootMQ
- Docker下Nacos配置應用開發Docker
- springboot 如何使用MongoDB整合 shedlock-springSpring BootMongoDB
- springboot 整合 Shiro 配置類Spring Boot
- SpringBoot2.1版本的個人應用開發框架 - 使用Docker + Nginx部署專案Spring Boot框架DockerNginx
- 自開發Web應用和SAPCustomerDataCloudIdentity服務的整合WebCloudIDE
- springboot+mybatis+mybaits plus 整合與基本應用Spring BootMyBatisAI
- SpringBoot整合Redis開發RESTful API介面Spring BootRedisRESTAPI
- SpringBoot開發祕籍 - 整合Graphql QuerySpring Boot
- 使用Docker容器化SpringBoot+Dubbo應用的實踐DockerSpring Boot
- SpringBoot應用使用自定義的ApplicationContext實現類Spring BootAPPContext
- Docker開發例項之應用場景Docker
- Jenkins + Docker + Gitee自動化部署SpringBoot應用JenkinsDockerGiteeSpring Boot
- HarmonyOS 5.0應用開發——ArkTS容器類
- 企業級 SpringBoot 教程 (二十四)springboot整合dockerSpring BootDocker
- JavaFX 整合 Sqlite 和 Hibernate 開發爬蟲應用JavaSQLite爬蟲
- SpringBoot2.1版本的個人應用開發框架 - 整合vue實現前後端分離Spring Boot框架Vue後端
- springboot整合redis及其註解式開發Spring BootRedis
- 使用Docker桌面開發環境功能開發SpringBoot - itnextDocker開發環境Spring Boot
- GO語言————3、編輯器、整合開發環境與其它工具Go開發環境
- SpringBoot整合MongoDB(實現一個簡單快取)Spring BootMongoDB快取
- Springboot整合MongoDB儲存檔案、讀取檔案Spring BootMongoDB
- Kotlin和SpringBoot開發的六邊形架構應用案例KotlinSpring Boot架構
- 使用MongoDB 應用MongoDB