八、springboot 簡單優雅的通過docker-compose 構建
前言
這個專案有一段時間沒有更新了,不過我可沒有偷懶喲,是偷偷準備了一個大招,現在是時候展示啦哈哈。
我們今天要做的,就是將我們的專案通過docker-compose 構建成映象執行。為什麼要這樣做呢?比我我前面的這些教程,用到了mysql,如果你們想要執行我的程式,就必須在自己電腦上裝mysql 資料庫才行,也就是專案用依賴了哪些環境,都必須先將這些環境部署好才能執行專案,那我們要做的,只用安裝docker和docke-compose ,然後執行就完事了,不用管什麼環境的。
初一聽,好像還行,但是根本沒有接觸docker-compose 怎麼辦?不要慌,一個專題帶你飛,雖不能讓你所向披靡,但也足你叱吒江湖啦
還有我檢視專案發現竟然沒有配置Redis,但是Redis 使用也是很廣泛的,我之前的文章有詳細的講解springboot專案怎麼使用redis。我這裡只是簡單的將他配上去確保架構的完整性,就不做更多的講解,需要詳細瞭解的可以參考Redis--從零開始隨筆
好了,前面說了這麼多無非是想表達這篇文章分兩個大部分,部署Redis和通過docker-compose 搭建。
配置Redis
增加配置
在pom.xml檔案中增加Redis的依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
在application.properties 中存在redis 連線資訊。
#配置redis # Redis資料庫索引(預設為0) spring.redis.database=0 # Redis伺服器地址 spring.redis.host=192.168.252.53 # Redis伺服器連線埠 spring.redis.port=6389 # Redis伺服器連線密碼(預設為空) spring.redis.password= # 連線池最大連線數(使用負值表示沒有限制) 預設 8 spring.redis.lettuce.pool.max-active=8 # 連線池最大阻塞等待時間(使用負值表示沒有限制) 預設 -1 spring.redis.lettuce.pool.max-wait=-1 # 連線池中的最大空閒連線 預設 8 spring.redis.lettuce.pool.max-idle=8 # 連線池中的最小空閒連線 預設 0 spring.redis.lettuce.pool.min-idle=0
簡單使用
配置好了,我們還是說一下簡單使用,這些在之前也有講,程式碼也是差不多的。我們在controller 層建立一個 redis 包,在Redis包下建立一個RedisController類。
程式碼如下:
@RestController
@RequestMapping("/redis")
@Slf4j
public class RedisController {
@Autowired
private StringRedisTemplate stringRedisTemplate;
@RequestMapping(value = "/add",method = RequestMethod.GET)
public String add(@RequestParam(value="key")String key,@RequestParam(value = "value") String value){
ValueOperations ops=stringRedisTemplate.opsForValue();
ops.set(key,value);
return "success";
}
@RequestMapping(value = "/get",method = RequestMethod.GET)
public String get(@RequestParam(value = "key")String key){
ValueOperations ops=stringRedisTemplate.opsForValue();
return (String) ops.get(key);
}
}
好了專案整合Redis 就這麼多了,至於測試我們待會後面部署好了一起測試。接下來開始重頭戲。
docker-compose 部署
我們現在有一個springboot專案,現在怎麼構建成一個映象放在伺服器上執行呢?
我們一步步來,首先是增加配置。
pom.xml
還是我們熟悉的pom.xml 我們需要在pom.xml 中 build-->plugins 中增加配置:
<!-- Docker -->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<!-- 將外掛繫結在某個phase執行 -->
<executions>
<execution>
<id>build-image</id>
<!-- 使用者只需執行mvn package ,就會自動執行mvn docker:build -->
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
<configuration>
<!-- 指定生成的映象名 -->
<imageName>${docker.image.prefix}/${project.artifactId}:${project.version}</imageName>
<!-- 指定標籤 -->
<imageTags>
<imageTag>${project.version}</imageTag>
</imageTags>
<!-- 指定 Dockerfile 路徑 -->
<dockerDirectory>src/main/docker</dockerDirectory>
<!-- 指定遠端 docker api地址 -->
<dockerHost>http://127.0.0.1:2375</dockerHost>
<resources>
<resource>
<targetPath>/</targetPath>
<!-- jar包所在的路徑此處配置的對應target目錄 -->
<directory>${project.build.directory}</directory>
<!-- 需要包含的jar包,這裡對應的是Dockerfile中新增的檔名 -->
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
上面都有註釋沒有什麼好講的,其中指定生成映象名的${docker.image.prefix} 的值在properties 中配置。
Dockerfile
我們在專案的src-->main 建立一個docker 包,包下建立一個Dockerfile 問價 ,內容如下:
FROM java:8
VOLUME /tmp
ADD zlflovemm-1.0.0.jar zlflovemm-1.0.0.jar
ENTRYPOINT ["java","-jar","/zlflovemm-1.0.0.jar"]
mvn package
接下來我們使用maven package 打包,就可以將專案打包成映象併發送到我們配置的伺服器上。可以看到我們的映象已經到我們的伺服器了。
docker-compose.yml
我們現在專案映象有了,現在需要通過docker-compose.yml 將專案,mysql .redis 都管理起來。
我們建立一個docker-compose.yml 內容如下:
version: "3"
services:
webapp:
image: quellanan/zlflovemm:1.0.0
ports:
- "9001:9090"
volumes:
- "/data"
depends_on:
- redis
- mysql
redis:
image: redis:latest
restart: always
ports:
- "6389:6379"
volumes:
- /redis/redis.conf:/etc/redis/redis.conf
command: redis-server /etc/redis/redis.conf
mysql:
image: mysql:latest
restart: always
environment:
MYSQL_ROOT_PASSWORD: "123456"
MYSQL_USER: 'root'
MYSQL_PASS: '123456'
ports:
- "3306:3306"
volumes:
- "./db:/var/lib/mysql"
- "./conf/my.cnf:/etc/my.cnf"
- "./init:/docker-entrypoint-initdb.d/"
webapp 和Redis 配置我就不說了,上一篇文章已經說了,這裡我們說一下mysql 的配置。
image:mysql:laster 我們選擇最新的版本的mysql 映象。
environment:
MYSQL_ROOT_PASSWORD: "123456"
MYSQL_USER: 'root'
MYSQL_PASS: '123456'
environment 配置的是mysql 的root 使用者密碼普通的使用者及密碼。
配置我們自定義的mysql 配置,如果使用的預設的,這裡的資料卷其實可以不用指定。
volumes:
- "./db:/var/lib/mysql"
- "./conf/my.cnf:/etc/my.cnf"
- "./init:/docker-entrypoint-initdb.d/"
我們建立好了docker-compose 後,在同級目錄下執行
docker-compose up
就可以看到映象容器已經啟動了。專案包含三個映象,現在我們來驗證一下專案正常啟動沒有。
測試
由於我們使用了docker映象的mysql 。所以之前的專案使用的資料庫需要重新執行一次,我們程式碼中有,我就不貼出來了。專案的介面我們現在調一下看看。
# 檢測專案正常啟動沒有
http://192.168.252.53:9001/zlflovemm/
# 檢測mysql 是否正常
http://192.168.252.53:9001/zlflovemm/user/list
# 檢測Redis 是否正常
http://192.168.252.53:9001/zlflovemm/redis/add?key=a&value=123
http://192.168.252.53:9001/zlflovemm/redis/get?key=a
番外
到此為止,將springboot專案構建成映象完成啦,感覺整篇檔案將的比較粗糙,這篇主要是整合,詳細的都在前面的部落格已經講了,所以這裡就沒有再講了。
好了,就說這麼多啦
程式碼上傳到github:
https://github.com/QuellanAn/zlflovemm
後續加油♡
歡迎大家關注個人公眾號 "程式設計師愛酸奶"
分享各種學習資料,包含java,linux,大資料等。資料包含視訊文件以及原始碼,同時分享本人及投遞的優質技術博文。
如果大家喜歡記得關注和分享喲❤