Docker
是容器開發的事實標準,而Springboot
是Java
微服務經常使用框架,兩者必然是會走到一塊兒的。本文將講解如何開發Springboot
項目,把它作成Docker
鏡像,並運行起來。java
Springboot
的Web
開發很是簡單,本次使用以前講解過的Springboot
整合MongoDB
的項目,請參考spring
實例講解Springboot整合MongoDB進行CRUD操做的兩種方式,文章中有源碼;MongoDB
的安裝請參考:用Docker安裝一個MongoDB最新版玩玩。mongodb
修改Springboot
的配置文件,主要是MongoDB
的鏈接信息:docker
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
訪問。springboot
$ docker network ls NETWORK ID NAME DRIVER SCOPE 8560aacda859 bridge bridge local 2a276c0230a3 host host local 0eeb101bcf52 none null local
對於Linux
,network
能夠切換成host
模式,這能夠直接使用localhost
,但不建議這樣作,這至關於容器與宿主機共享網絡,會有風險。bash
對於Mac
和Windows
,若是Docker
版本在v18.03
或以上,就能夠使用host.docker.internal
。建議使用新版本,就不用考慮更早版本的方案了,哈哈。微信
經過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
包放到鏡像裏,打成新的鏡像。dom
成功後查看鏡像列表:
$ 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
應用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
作一個簡單的測試,成功插入一條數據:
雖然案例講的是Springboot
的Docker
開發,但其它應用也是相似的。
這是微軟關於Docker
微服務的開發流程圖,大致就是應用代碼
——Dockerfile
——生成鏡像
——容器編排服務
——運行
——測試
——提交
,前面幾步都同樣的,後面的咱們將會採用Kubernetes
,後續再講解。
歡迎訪問南瓜慢說 www.pkslow.com獲取更多精彩文章!
歡迎關注微信公衆號<南瓜慢說>,將持續爲你更新...
多讀書,多分享;多寫做,多整理。