前言
因為公司項目已經集成了Docker,自動就運行在Docker上了,對Docker的了解僅限於:它是一個鏡像庫,可以將任何應用打包成鏡像並運行上Docker上,好處就是應用在任何平台上(window, linux)都是一樣的,換一個平台也不用重新部署,直接拉取鏡像跑起來就完事了。。突發想法,一個普通的springboot項目如何部署在dokcer上呢(小小的腦袋,大大的疑惑....),於是 百度輸入了自己的問題,發現都是在linux上部署的,暫時也沒那個條件,只能在window環境整整了。
正文
第一步:docker的安裝
https://blog.csdn.net/go_d_og/article/details/75675159 (win10安裝docker教程,轉載)
注:window虛擬化一定要開啟,不然docker啟動不了。
第二步:啟動Docker
如下圖代表Docker啟動好了。
第三步:配置國內鏡像加速器
DaoCloud加速器為例:https://www.daocloud.io/mirror
1 注冊后並登錄,右上角的 “小火箭” 按鈕點擊一下。
2 會跳轉到:https://www.daocloud.io/mirror 頁面,鼠標往下拉,拉到最下面找到window地址
3 復制地址至 Docker -> setting 配置頁面 (我下面的圖已經保存過了,記得apply..)
此時Docker會自動重啟,重啟好了在進行下一步。
第四步:創建一個Spring Boot應用
用idea 能快速創建,這個就省略了... 推薦:https://www.cnblogs.com/little-rain/p/11063967.html
隨便寫一個接口,能證明Spring Boot 應用跑起來的頁面。
上面都是准備工作,下面才是Spring Boot 中集成Docker。
第五步:Spring Boot 中集成Docker
1 Pom.xml添加Docker支持
<properties> <docker.image.prefix>springboot</docker.image.prefix> </properties>
2 plugins 中添加 Docker 構建插件
<plugins> <!-- docker配置 --> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <!-- Docker maven plugin --> <plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>1.0.0</version> <configuration> <imageName>${docker.image.prefix}/${project.artifactId}</imageName> <dockerDirectory>src/main/docker</dockerDirectory> <resources> <resource> <targetPath>/</targetPath> <directory>${project.build.directory}</directory> <include>${project.build.finalName}.jar</include> </resource> </resources> </configuration> </plugin> <!-- Docker maven plugin --> </plugins>
3 在目錄 src/main/docker 下創建 Dockerfile 文件,Dockerfile 文件用來說明如何來構建鏡像
FROM openjdk:8-jdk-alpine VOLUME /tmp ADD demo-0.0.1-SNAPSHOT.jar app.jar ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
這個 Dockerfile 文件很簡單,構建 Jdk 基礎環境,添加 Spring Boot Jar 到鏡像中,簡單解釋一下:
FROM ,表示使用 Jdk8 環境 為基礎鏡像,如果鏡像不是本地的會從 DockerHub 進行下載
VOLUME ,VOLUME 指向了一個 /tmp 的目錄,由於 Spring Boot 使用內置的Tomcat容器,Tomcat 默認使用 /tmp 作為工作目錄。這個命令的效果是:在宿主機的 /var/lib/docker 目錄下創建一個臨時文件並把它鏈接到容器中的 /tmp 目錄
ADD ,拷貝文件並且重命名
ENTRYPOINT ,為了縮短 Tomcat 的啟動時間,添加 java.security.egd 的系統屬性指向 /dev/urandom 作為 ENTRYPOINT
注意:上述的名字 demo-0.0.1-SNAPSHOT.jar 是我的項目打包后的名字
4 配置好之后啟動 看看項目能否啟動。如不能啟動 根據錯誤信息找原因...
5 停止應用,cmd切換到項目目錄。
6 檢查java , maven, Docker是否都安裝 且 環境變量無誤。
7 開始打包。如果這步報錯,自行搜索錯誤信息解決...
8 打包成功,會在target目錄生成jar。
9 將應用打包並上傳至鏡像倉庫。
10 使用Docker命令查看鏡像:docker images
11 運行鏡像: docker run -p 8080:8080 -t springboot/demo (我的應用的端口的8080)
12 用docker ps 查看正在運行的鏡像,發現已經安排上了。
13 測試一下接口 (沒毛病.)
參考了博客:https://blog.csdn.net/weixin_40804733/article/details/88710845 (寫的很詳細)