這個項目有一段時間沒有更新了,不過我可沒有偷懶喲,是偷偷準備了一個大招,如今是時候展現啦哈哈。java
咱們今天要作的,就是將咱們的項目經過docker-compose 構建成鏡像運行。爲何要這樣作呢?比我我前面的這些教程,用到了mysql,若是大家想要運行個人程序,就必須在本身電腦上裝mysql 數據庫才行,也就是項目用依賴了哪些環境,都必須先將這些環境部署好才能運行項目,那咱們要作的,只用安裝docker和docke-compose ,而後運行就完事了,不用管什麼環境的。mysql
初一聽,好像還行,可是根本沒有接觸docker-compose 怎麼辦?不要慌,一個專題帶你飛,雖不能讓你所向披靡,但也足你叱吒江湖啦 傳送門:docker自我修煉從0到1linux
還有我查看項目發現居然沒有配置Redis,可是Redis 使用也是很普遍的,我以前的文章有詳細的講解springboot項目怎麼使用redis。我這裏只是簡單的將他配上去確保架構的完整性,就不作更多的講解,須要詳細瞭解的能夠參考Redis--從零開始隨筆git
好了,前面說了這麼多無非是想表達這篇文章分兩個大部分,部署Redis和經過docker-compose 搭建。程序員
在pom.xml文件中增長Redis的依賴github
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
在application.properties 中存在redis 鏈接信息。web
#配置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類。 代碼以下:redis
@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 就這麼多了,至於測試咱們待會後面部署好了一塊兒測試。接下來開始重頭戲。spring
咱們如今有一個springboot項目,如今怎麼構建成一個鏡像放在服務器上運行呢? 咱們一步步來,首先是增長配置。sql
仍是咱們熟悉的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 中配置。
咱們在項目的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"]
接下來咱們使用maven package 打包,就能夠將項目打包成鏡像併發送到咱們配置的服務器上。能夠看到咱們的鏡像已經到咱們的服務器了。
咱們如今項目鏡像有了,如今須要經過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,大數據等。資料包含視頻文檔以及源碼,同時分享本人及投遞的優質技術博文。
若是你們喜歡記得關注和分享喲❤