Springboot整合MongoDB的Docker開發,其它應用也類

TigerJin發表於2021-09-09

1 前言

Docker是容器開發的事實標準,而SpringbootJava微服務常用框架,二者必然是會走到一起的。本文將講解如何開發Springboot專案,把它做成Docker映象,並執行起來。

2 把Springboot打包成Docker映象

SpringbootWeb開發非常簡單,本次使用之前講解過的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

MongoDBhost需要修改為host.docker.internal,而不能是localhost或者127.0.0.1。因為Springboot是執行在Docker容器裡面的,有網路隔離。檢視Dockernetwork,有以下三個,預設使用bridge,這時就無法透過localhost訪問。

$ docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
8560aacda859        bridge              bridge              local
2a276c0230a3        host                host                local
0eeb101bcf52        none                null                local

對於Linuxnetwork可以切換成host模式,這可以直接使用localhost,但不建議這樣做,這相當於容器與宿主機共享網路,會有風險。

對於MacWindows,如果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環境的映象,即使沒有合適的,也可以自己做一個;
  • ARGDockerfile構建時的引數;
  • 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

先用mavenSpringboot打成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 總結

雖然案例講的是SpringbootDocker開發,但其它應用也是類似的。

圖片描述

這是微軟關於Docker微服務的開發流程圖,大體就是應用程式碼——Dockerfile——生成映象——容器編排服務——執行——測試——提交,前面幾步都一樣的,後面的我們將會採用Kubernetes,後續再講解。


歡迎訪問獲取更多精彩文章!

多讀書,多分享;多寫作,多整理。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2144/viewspace-2825793/,如需轉載,請註明出處,否則將追究法律責任。

相關文章