<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Spring Boot 應用容器化之 Docker、Gradle

          共 9320字,需瀏覽 19分鐘

           ·

          2020-06-25 23:21

          本文演示了如何用 Docker、Gradle 來構(gòu)建、運行、發(fā)布來一個 Spring Boot 應用。

          Docker 簡介

          Docker 是一個 Linux 容器管理工具包,具備“社交”方面,允許用戶發(fā)布容器的 image (鏡像),并使用別人發(fā)布的 image。Docker image 是用于運行容器化進程的方案,在本文中,我們將構(gòu)建一個簡單的 Spring Boot 應用程序。

          有關(guān) Docker 的詳細介紹,可以移步至 《簡述 Docker》

          前置條件
          • JDK 1.8+

          • Gradle 2.3+

          • Docker 最新版。有關(guān) Docker 在的安裝,可以參閱 《Docker 在 CentOS 下的安裝、使用》。如果你的電腦不是 Linux 系統(tǒng),最好裝個虛擬機,在虛擬機里面裝個 Linux ,因為 Docker 的依賴 Linux。

          用 Gradle 構(gòu)建項目

          創(chuàng)建目錄結(jié)構(gòu)
          項目的目錄結(jié)構(gòu)因符合 Gradle 的約定。

          在 *nix 系統(tǒng)下執(zhí)行 mkdir -p src/main/java/docker_spring_boot ,生產(chǎn)如下結(jié)構(gòu) :

          └── src
              └── main
                  └── java
                      └── com
                          └── waylau
                              └── docker_spring_boot
          創(chuàng)建 Gradle 構(gòu)建文件
          build.gradle

          buildscript {
              repositories {
                  mavenCentral()
              }
              dependencies {
                  classpath('org.springframework.boot:spring-boot-gradle-plugin:1.3.3.RELEASE')

                  classpath('se.transmode.gradle:gradle-docker:1.2')

              }
          }

          apply plugin: 'java'
          apply plugin: 'eclipse'
          apply plugin: 'idea'
          apply plugin: 'spring-boot'

          apply plugin: 'docker'



          group = 'gregturn'

          jar {
              baseName = 'docker-spring-boot-gradle'
              version =  '1.0.0'
          }


          task buildDocker(type: Docker, dependsOn: build{
            push = true
            applicationName = jar.baseName
            dockerfile = file('src/main/docker/Dockerfile')
            doFirst {
              copy {
                from jar
                into stageDir
              }
            }
          }


          repositories {
              mavenCentral()
          }

          sourceCompatibility = 1.8
          targetCompatibility = 1.8

          dependencies {
              compile("org.springframework.boot:spring-boot-starter-web"
              testCompile("org.springframework.boot:spring-boot-starter-test")
          }

          task wrapper(type: Wrapper{
              gradleVersion = '2.3'
          }

          Spring Boot gradle plugin 提供了很多方便的功能:

          它收集的類路徑上所有 jar 文件,并構(gòu)建成一個單一的、可運行的“über-jar”(德語,相關(guān)解釋可以移步至 http://stackoverflow.com/questions/11947037/what-is-an-uber-jar),這使得它更方便地執(zhí)行和傳輸服務(wù)。

          編寫 Spring Boot 應用

          編寫一個簡單的 Spring Boot 應用 :

          src/main/java/com/waylau/docker_spring_boot/Application.java:

          package com.waylau.docker_spring_boot;

          import org.springframework.boot.SpringApplication;
          import org.springframework.boot.autoconfigure.SpringBootApplication;
          import org.springframework.web.bind.annotation.RequestMapping;
          import org.springframework.web.bind.annotation.RestController;


          @SpringBootApplication
          @RestController
          public class Application {

              @RequestMapping("/")
              public String home() {
                  return "Hello Docker World."
                          + " Welcome to  waylau.com" ;
              }

              public static void main(String[] args) {
                  SpringApplication.run(Application.class, args);
              }

          }

          解釋下上面的代碼:

          類用 @SpringBootApplication @RestController 標識,可用 Spring MVC 來處理 Web 請求。

          @RequestMapping 將 / 映射到 home() ,并將”Hello Docker World” 文本作為響應。

          main() 方法使用 Spring Boot 的 SpringApplication.run() 方法來啟動應用。

          運行程序

          使用 Gradle
          編譯:

          gradle build

          運行:

          java -jar build/libs/docker-spring-boot-gradle-1.0.0.jar

          訪問項目

          如果程序正確運行,瀏覽器訪問 http://localhost:8080/,可以看到頁面 “Hello Docker World.” 字樣。

          將項目容器化

          Docker 使用 Dockerfile 文件格式來指定 image 層,

          創(chuàng)建文件 src/main/docker/Dockerfile:

          FROM frolvlad/alpine-oraclejdk8:slim
          VOLUME /tmp
          ADD docker-spring-boot-gradle-1.0.0.jar app.jar
          ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

          解釋下這個配置文件:

          VOLUME 指定了臨時文件目錄為/tmp。其效果是在主機 /var/lib/docker 目錄下創(chuàng)建了一個臨時文件,并鏈接到容器的/tmp。改步驟是可選的,如果涉及到文件系統(tǒng)的應用就很有必要了。/tmp目錄用來持久化到 Docker 數(shù)據(jù)文件夾,因為 Spring Boot 使用的內(nèi)嵌 Tomcat 容器默認使用/tmp作為工作目錄

          項目的 jar 文件作為 “app.jar” 添加到容器的

          ENTRYPOINT 執(zhí)行項目 app.jar。為了縮短 Tomcat 啟動時間,添加一個系統(tǒng)屬性指向 “/dev/urandom” 作為 Entropy Source

          構(gòu)建 Docker Image

          執(zhí)行構(gòu)建成為 docker image:

          gradle build buildDocker

          運行
          運行 Docker Image

          docker run -p 8080:8080 -t waylau/docker-spring-boot-gradle
          [root@waylau spring-boot]# docker run -p 8080:8080 -t waylau/docker-spring-boot-gradle

            .   ____          _            __ _ _
           /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
          ( ( )\___ | '
          _ | '_| | '_ \/ _` | \ \ \ \
           \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
            '  |
          ____| .__|_| |_|_| |_\__, | / / / /
           =========|_|==============|___/=/_/_/_/
           :: Spring Boot ::        (v1.3.3.RELEASE)

          2016-03-20 08:45:51.276  INFO 1 
          2016-03-20 08:45:51.289  INFO 1 
          2016-03-20 08:45:51.722  INFO 1 
          2016-03-20 08:45:54.874  INFO 1 
          2016-03-20 08:45:57.893  INFO 1 
          2016-03-20 08:45:57.982  INFO 1 
          2016-03-20 08:45:57.984  INFO 1 
          2016-03-20 08:45:58.473  INFO 1 
          2016-03-20 08:45:58.473  INFO 1 
          2016-03-20 08:45:59.672  INFO 1 
          2016-03-20 08:45:59.695  INFO 1 
          2016-03-20 08:45:59.701  INFO 1 
          2016-03-20 08:45:59.703  INFO 1 
          2016-03-20 08:45:59.703  INFO 1 
          2016-03-20 08:46:00.862  INFO 1 
          2016-03-20 08:46:01.166  INFO 1 
          2016-03-20 08:46:01.189  INFO 1 
          2016-03-20 08:46:01.190  INFO 1 
          2016-03-20 08:46:01.302  INFO 1 
          2016-03-20 08:46:01.302  INFO 1 
          2016-03-20 08:46:01.438  INFO 1 
          2016-03-20 08:46:01.833  INFO 1 
          2016-03-20 08:46:02.332  INFO 1 
          2016-03-20 08:46:02.343  INFO 1 
          訪問項目

          如果程序正確運行,瀏覽器訪問 http://localhost:8080/,可以看到頁面 “Hello Docker World.” 字樣。

          推送 image 到 Docker Hub
          首先,你在 Docker Hub 要有注冊賬號,且創(chuàng)建了相應的庫;

          其次,docker 推送前,先要登錄,否則報unauthorized: access to the requested resource is not authorized的錯誤

          執(zhí)行:

          docker login

          輸出為:

          [root@waylau spring-boot]
          Username: waylau
          Password: 
          Email: [email protected]
          WARNING: login credentials saved in /root/.docker/config.json
          Login Succeeded

          執(zhí)行推送

          docker push waylau/docker-spring-boot-gradle
          [root@waylau spring-boot]
          The push refers to a repository [docker.io/waylau/docker-spring-boot-gradle]
          751d29eef02e: Layer already exists 
          4da3741f39c7: Pushed 
          5f70bf18a086: Layer already exists 
          7e4d0cb13643: Layer already exists 
          8f045733649f: Layer already exists 
          latest: digest: sha256:eb4d5308ba1bb27489d808279e74784bda6761b3574f4298d746abba59b35164 size: 9415
          鏡像加速器

          Docker Hub 在國外,有時候拉取 Image 極其緩慢,可以使用國內(nèi)的鏡像來實現(xiàn)加速

          阿里云

          echo "DOCKER_OPTS=\"--registry-mirror=https://yourlocation.mirror.aliyuncs.com\"" | sudo tee -a /etc/default/docker
          sudo service docker restart

          其中 https://yourlocation.mirror.aliyuncs.com 是您在阿里云注冊后的專屬加速器地址:

          DaoCloud

          sudo echo “DOCKER_OPTS=\”\$DOCKER_OPTS –registry-mirror=http:
          sudo service docker restart
          其中 http://your-id.m.daocloud.io 是您在 DaoCloud 注冊后的專屬加速器地址:
          源碼

          獲取項目源碼, https://github.com/waylau/docker-demos 中的 samples/spring-boot-gradle

          獲取項目鏡像, 執(zhí)行

          docker pull waylau/docker-spring-boot-gradle
          參考引用
          • http://spring.io/guides/gs/spring-boot-docker/

          • https://hub.docker.com/r/waylau/docker-spring-boot-gradle/

          作者:waylau
          來源:https://waylau.com/docker-spring-boot-gradle/

          
           
          
           

          文末福利

          免費分享一套我親自寫的10萬字Springboot學習筆記(帶完整目錄)以及源碼,下圖是pdf版本的部分截圖。

          a74c7dde745a1c5aabfdbde3f6467aed.webp

          
           


          獲取方式:

          掃描下方二維碼,回復筆記

          ?長按上方二維碼 2 秒回復「筆記」即可獲取資料


          希望大家拿去好好學習,如果覺得不錯,也可以把文章分享給其他小伙伴,一起學習!


          點贊是最大的支持 cca12e8da48cfdba8f2f438f4deac27d.webp

          瀏覽 21
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产钟合自拍 | 五月丁香永久网站 | 日韩av高清无码 五月天婷婷丁香网 | 爱婷婷五月丁香 | 久久爆乳一区二区三区 |