知之愈明,則行之愈篤喘沿;行之愈篤,則知之益明.——朱熹(宋)
我們在平常學習了很多的知識闸度,但是如果沒有深入去實踐,知識掌握就不會牢固蚜印,所以需要通過實踐來鞏固≥航現(xiàn)在大多數(shù)的業(yè)務都切換到了Spring Boot,更加復雜和龐大的業(yè)務則使用Spring Cloud窄赋,當然也有用Dubbo哟冬,所以準備在Spring Boot中集成Docker楼熄,進行服務化。
創(chuàng)建項目進行集成
創(chuàng)建一個Spring Boot 項目
項目
模塊
增加項目對Docker的支持
- 修改pom.xml配置浩峡,增加對應的插件可岂,可以使用Maven進行打包
#Docker 鏡像前綴,放在<properties> 標簽中
<docker.image.prefix>devops</docker.image.prefix>
- 添加視圖模板支持
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
- 增加對應的maven 插件翰灾,插件有多種缕粹,這里采用 <groupId>com.spotify</groupId>
<build>
<finalName>devops</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!-- docker打包 -->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<configuration>
<serverId>docker-hosted</serverId>
<!-- docker倉庫地址,用于推送鏡像 -->
<registryUrl>${docker.repository}</registryUrl>
<!-- 設置為false纸淮,避免自動推送鏡像 -->
<pushImage>false</pushImage>
<!-- Dockerfile路徑 -->
<dockerDirectory>src/main/docker</dockerDirectory>
<!-- 構建的鏡像名稱 -->
<imageName>${docker.image.prefix}/${project.artifactId}</imageName>
<imageTags>
<imageTag>latest</imageTag>
</imageTags>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
</build>
- 修改Maven settings 文件配置(主要的目的是為了方便后面我們將自己的服務推送到自己的私服平斩,方便管理)
<pluginGroups>
<pluginGroup>com.spotify</pluginGroup>
</pluginGroups>
#本地私服的配置
</profiles>
<profile>
<id>nexus</id>
<properties>
<docker.repository>http://192.168.100.77:8081/repository/docker</docker.repository>
</properties>
</profile>
</profiles>
#激活私服配置
<activeProfiles>
<activeProfile>nexus</activeProfile>
</activeProfiles>
上面基本的pom配置就完成了,之后開始配置Docker相關的腳本
Docker腳本配置
在src/main 目錄下創(chuàng)建docker 文件夾咽块,剛剛上面的pom配置里聲明了Dockerfile的路徑
創(chuàng)建文件Dockerfile 绘面,注意文件沒有后綴,之后增加如下腳本
FROM java:8 #基本鏡像
VOLUME /tmp #掛載文件位置糜芳,/tmp 為臨時目錄
ADD devops.jar app.jar #添加對應的jar飒货,使用maven打包后會自動到target目錄找devops.jar 文件
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] # 程序啟動入口
打包、運行鏡像
創(chuàng)建對應的測試文件峭竣,打包
mvn clean package docker:build # 一氣呵成O(∩_∩)O~~
在運行docker命令前塘辅,先確認電腦上的docker環(huán)境是否配置成
docker version
# 會有如下顯示
Client:
Version: 17.12.0-ce
API version: 1.35
Go version: go1.9.2
Git commit: c97c6d6
Built: Wed Dec 27 20:03:51 2017
OS/Arch: darwin/amd64
Server:
Engine:
Version: 17.12.0-ce
API version: 1.35 (minimum version 1.12)
Go version: go1.9.2
Git commit: c97c6d6
Built: Wed Dec 27 20:12:29 2017
OS/Arch: linux/amd64
Experimental: true
上面說明Docker是正常啟動的
然后查看鏡像
docker images
鏡像
上圖說明我們的鏡像打包成功
然后運行一下雕蔽,檢查鏡像是否能夠正常啟動
#啟動鏡像 -d 表示后臺運行恐仑,-p 端口進行映射 --name docker服務名稱 devops/devops:latest 運行的鏡像
docker run -d -p 8080:8080 --name devops devops/devops:latest
#執(zhí)行docker ps 查看鏡像是否運行
WX20180227-203815.png
如果铣缠,說明服務是正常啟動了童太,之后請求
http://localhost:8080/index?name=World
WX20180227-204116.png
能夠請求成功徙缴,說明鏡像部署成功
停止釋放鏡像
# 養(yǎng)成好習慣锐墙,停止釋放鏡像
docker stop 2026e45bc2ce
docker rm 2026e45bc2ce