1. 使用 Docker 部署 Spring Boot 項(xiàng)目,帶勁!!

        共 4564字,需瀏覽 10分鐘

         ·

        2020-11-25 11:11

        6267a25fe3c9a3e9d48e8796b161d030.webp

        Java技術(shù)棧

        www.javastack.cn

        關(guān)注閱讀更多優(yōu)質(zhì)文章



        上一篇:年輕人的第一個(gè) Docker 應(yīng)用

        Docker 一次構(gòu)建、處處運(yùn)行及快速啟停的特性,在微服務(wù)架構(gòu)中有著舉足輕重的地位,具體的概念性的東西就不介紹了,不懂的點(diǎn)擊這里閱讀 Docker 基礎(chǔ)教程。

        本篇棧長主要介紹下如何通過 IntelliJ IDEA、Maven 來操作 Docker 部署 Spring Boot 項(xiàng)目,這也是我們 Java 程序員最關(guān)心的開發(fā)實(shí)戰(zhàn)。

        一、Maven 插件配置

        首先在 Maven pom.xml 配置文件中加入 Docker 的 Maven 插件。

        我看網(wǎng)上很多人還在用 docker-maven-plugin 插件:


        ????docker



        ????
        ????????
        ????????????com.spotify
        ????????????docker-maven-plugin
        ????????????1.2.2
        ????????????
        ????????????????${docker.image.prefix}/${project.artifactId}
        ????????????????src/main/docker
        ????????????????
        ????????????????????
        ????????????????????????/
        ????????????????????????${project.build.directory}
        ????????????????????????${project.build.finalName}.jar
        ????????????????????

        ????????????????

        ????????????

        ????????

        ????


        你們還在用這個(gè)插件嗎?

        棧長從官方倉庫看到,這個(gè)插件官方已經(jīng)不維護(hù)了:

        822416d1dd8ae8576de0a5730d83d618.webp

        所以這個(gè)插件我就不推薦大家使用了,而是推薦官方的另外一個(gè)插件:dockerfile-maven


        ????
        ????????
        ????????????com.spotify
        ????????????dockerfile-maven-plugin
        ????????????1.4.13
        ????????????
        ????????????????
        ????????????????????default
        ????????????????????
        ????????????????????????build
        ????????????????????????push
        ????????????????????

        ????????????????

        ????????????

        ????????????
        ????????????????javastack/${project.name}
        ????????????????${project.version}
        ????????????????
        ????????????????????${project.build.finalName}.jar
        ????????????????

        ????????????????src/main/docker/Dockerfile
        ????????????

        ????????

        ????


        這個(gè)插件使用簡單,功能更強(qiáng)大。

        新插件地址:

        https://github.com/spotify/dockerfile-maven

        最新版插件的環(huán)境要求:

        • JDK 7+

        • Apache Maven 3.5.2+

        這個(gè)插件的牛逼之處在于:

        1、從插件名稱就可以知道,這個(gè)插件是基于 Dockerfile 文件進(jìn)行構(gòu)建 Docker 項(xiàng)目的,專注 Dockerfile 文件,所以需要一個(gè) Dockerfile 文件,Dockerfile 也是構(gòu)建 Docker 項(xiàng)目的基石。

        2、把 Docker 的構(gòu)建過程集成到了 Maven 的構(gòu)建過程之中,如果使用默認(rèn)的配置,使用 mvn package 命令就能打包成一個(gè) Docker 鏡像,使用 mvn deploy 命令就能推送到 Docker 倉庫。

        3、使我們的構(gòu)建目標(biāo)更明確,如我們先使用 mvn dockerfile:build 然后再 mvn dockerfile:tag,然后再 mvn dockerfile:push,也可以滿足同時(shí)構(gòu)建再推送的場景,如:mvn dockerfile:build dockerfile:push,這都沒問題的。

        4、與 Maven 構(gòu)建集成,我們可以在一個(gè)項(xiàng)目中依賴另外一個(gè)項(xiàng)目的 Docker 鏡像,Maven 將以正確的順序構(gòu)建項(xiàng)目。當(dāng)我們運(yùn)行涉及多個(gè)服務(wù)的集成測試用例時(shí),這很有用的。

        二、Docker 配置

        Dockerfile 是創(chuàng)建 Docker 鏡像的基本配置文件,本身是一個(gè)文本文件。

        插件默認(rèn)加載位置為項(xiàng)目所在根目錄,因?yàn)槲以谏厦娴?Maven 插件配置中指明了路徑。所以,在 src/main/docker/ 目錄下添加一個(gè) Dockerfile 文件:

        #?添加?Java?8?鏡像來源
        FROM?java:8

        #?添加參數(shù)
        ARG?JAR_FILE

        #?添加?Spring?Boot?包
        ADD?target/${JAR_FILE}?app.jar

        #?執(zhí)行啟動(dòng)命令
        ENTRYPOINT?["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

        值得說一下的是,上面的 JAR_FILE 參數(shù)就是從 Docker Maven 插件中指定的構(gòu)建參數(shù),這也是這個(gè)插件的強(qiáng)大之處,可以翻到文章上面去看一下。

        具體的 Dockerfile 文件細(xì)節(jié)比較多,這里就不展開詳細(xì)介紹了,后面我再開一篇單獨(dú)介紹,關(guān)注公眾號(hào)Java技術(shù)棧第一時(shí)間推送。

        三、添加測試接口

        添加一個(gè)測試接口,以便后面部署測試。

        package?cn.javastack.springboot.docker;

        import?org.springframework.boot.Banner;
        import?org.springframework.boot.SpringApplication;
        import?org.springframework.boot.autoconfigure.SpringBootApplication;
        import?org.springframework.boot.builder.SpringApplicationBuilder;
        import?org.springframework.web.bind.annotation.GetMapping;
        import?org.springframework.web.bind.annotation.RestController;

        /**
        ?*?微信公眾號(hào):Java技術(shù)棧
        ?*/
        @RestController
        @SpringBootApplication
        public?class?DockerApplication?{

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

        ????@GetMapping("/docker/hello")
        ????public?String?helloDocker()?{
        ????????return?"hello?docker";
        ????}

        }

        Spring Boot 基礎(chǔ)性的知識(shí)和搭建過程就不介紹了,不熟悉的可以關(guān)注公眾號(hào)Java技術(shù)棧,在后臺(tái)回復(fù)關(guān)鍵字 "boot" 閱讀我之前寫的系列教程。

        所有 Spring Boot 教程實(shí)戰(zhàn)源碼在下面?zhèn)€倉庫:

        https://github.com/javastacks/spring-boot-best-practice

        本篇所有實(shí)戰(zhàn)源碼到時(shí)也會(huì)全部同步到上面,大家 Star 一下吧!

        四、構(gòu)建 Docker 鏡像

        配置了 Maven 插件和 Dockerfile 文件后就可以開始構(gòu)建 Docker 鏡像了。

        上面也說了,Docker 構(gòu)建過程已經(jīng)集成到了 Maven 的構(gòu)建過程之中,那么可以直接使用 mvn package 就可以同時(shí)打包和構(gòu)建 Docker 鏡像了。

        在 IDEA 中可以直接點(diǎn)擊插件對應(yīng)的命令運(yùn)行:

        00d49c8296f8d10dbb5a0bba79f575e1.webpb58f5176d45cde202b3c5815959683a5.webp

        插件會(huì)根據(jù) Dockerfile 文件構(gòu)建,文件中有多少條命令,就分為幾個(gè)步驟構(gòu)建,如果沒問題就會(huì)構(gòu)建成功。

        五、IDEA 怎么操作 Docker?

        一旦我們創(chuàng)建了 Dockerfile 文件,IDEA 就會(huì)自動(dòng)識(shí)別并提示我們創(chuàng)建 Docker 連接,當(dāng)然,我們也可以調(diào)出 Services 面板進(jìn)行手動(dòng)創(chuàng)建。

        打開 IDEA 中的 Services 面板:

        0faf7d3b573d60fe4a45c208e3c4a04c.webp

        然后點(diǎn)擊 Add service > Docker Connection 來添加一個(gè) Docker 連接:

        bf10d70b49e25033aa3df16ee6b7be72.webp

        創(chuàng)建完后會(huì)自動(dòng)連接上,點(diǎn)擊展開會(huì)顯示 Docker 本地所有鏡像和容器:

        3bed17a27eea6a313d94eb560dad8de3.webp

        如上圖所示,就是我們剛構(gòu)建的鏡像。

        六、創(chuàng)建并運(yùn)行容器

        右擊上面的鏡像,選擇 "Create Container" 菜單來創(chuàng)建并運(yùn)行一個(gè)容器。

        75430950f253ac70704b338b62881042.webp

        填寫相應(yīng)的運(yùn)行參數(shù),再點(diǎn)擊運(yùn)行按鈕,容器即開始運(yùn)行。

        然后在 Build Log 和 Log 面板中可以看到容器運(yùn)行日志和應(yīng)用程序運(yùn)行日志:

        00fa793c0a2e974380444d91c24f348c.webp09aaa6e85dd05010ef29c7547d4329f8.webp

        項(xiàng)目在 Docker 中運(yùn)行起來了,然后再訪問下上面寫的測試接口:

        http://localhost:8080/docker/hello

        de51d67c5e19852a358917ec4a34bc1d.webp

        OK,到這里就部署并運(yùn)行成功了。

        七、總結(jié)

        本文棧長使用 IntelliJ IDEA、Maven 用 Docker 部署了一個(gè) Spring Boot 項(xiàng)目,雖然只是一個(gè)簡單的示例,但同時(shí)為了配合寫文章,全程硬是肝了幾個(gè)小時(shí)。

        本文只是一個(gè)簡單的示例,所以過程并不復(fù)雜,想要構(gòu)建更加復(fù)雜的應(yīng)用,我們需要學(xué)習(xí) Dockerfile 文件的編寫,這個(gè)下期再分享吧,關(guān)注公眾號(hào)Java技術(shù)棧第一時(shí)間推送,不要走開。

        如果只是運(yùn)行一個(gè) Spring Boot 應(yīng)用確實(shí)沒有必要用到 Docker,本文也是為了演示而上了 Docker。

        但在實(shí)際工作中,Docker 就很有用了,Docker 一次將應(yīng)用代碼、JDK、環(huán)境變量、配置文件、以及其他配置信息都打包到一個(gè)鏡像里面了,一次構(gòu)建,處處運(yùn)行,所以再也不用擔(dān)心環(huán)境和配置問題了,開發(fā)測試運(yùn)維都爽死。

        好了,本文就到這里了,后續(xù)棧長還會(huì)帶來更多 Docker 實(shí)用性的教程,比如 Docker 私庫的搭建及其他實(shí)用的玩法等,關(guān)注公眾號(hào)Java技術(shù)棧第一時(shí)間推送。

        本文所有實(shí)戰(zhàn)源碼已上傳到這個(gè)倉庫:

        https://github.com/javastacks/spring-boot-best-practice

        覺得不錯(cuò),在看、分享轉(zhuǎn)發(fā)一下,寫文章不易,需要你們的鼓勵(lì),感謝各位老鐵們!

        版權(quán)申明:本文系公眾號(hào) "Java技術(shù)棧" 原創(chuàng),原創(chuàng)實(shí)屬不易,轉(zhuǎn)載、引用本文內(nèi)容請注明出處,禁止抄襲、洗稿,請自重,尊重他人勞動(dòng)成果和知識(shí)產(chǎn)權(quán)。

        5bb9aae57c4555fd80d58585df353429.webp


        982740124ac3106f9896497d9f4e7264.webp

        75b2e9d65e5576cf8c9075a29fdc84c1.webp
        b0eeee5616e1d0ca819ed2bc3a11b57c.webpf8c3a40b3b4c44951f5d0fa2f52b3f89.webp9233377409e202743de63dd56dda0158.webp
        621e0d15f902791f9360e6d1dc6668d2.webp



        關(guān)注Java技術(shù)棧看更多干貨



        d8b6075cc69287a34c7ee607bfee3388.webp戳原文,獲取精選面試題!
        瀏覽 38
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評論
        圖片
        表情
        推薦
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
          
          

            1. 亚洲男女激情 | 日本三级电影在线播放 | 成人免费无码激情AV片 | aa黄色成人电影 | 无码成人免费网站在线观看 |