SpringBoot項目部署初體驗【Docker】

前言

一個微服務項目,小到幾個模塊,大到十幾二十幾個模塊,每一個模塊都是單獨的SpringBoot工程,這麼多模塊的部署,部署成本真的很高,並且每一個服務的部署,都是手動部署,打成war或者jar ?,一個一個的部署也是至關的麻煩,介於此:html

我前段時間倒騰了一個博客系統,昨天測試基本功能已經跑通了,可能再過段時間我就要買服務器架設本身的博客系統了,這個系統由SpringBoot支撐,咱們就把它看成一個微服務項目的一個一個模塊,進行學習微服務項目的部署java

北京人原始部署:全程手動

基於前面的介紹,測試項目採用SpringBoot開發,咱們將該服務打成一個jar,而後再Docker中運行該jar便可mysql

整個流程咱們豪爽的分爲下面兩步:linux

  1. SpringBoot項目打包jar 【maven插件支持,不然找不到main方法入口】git

  2. 建立Docker鏡像、容器、並啓動容器,訪問測試github

SpringBoot項目打包成jar

沒有其餘要說的,就是一個maven插件,這裏說明一下,這個插件必須有,不然打成的jar不能運行spring

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

經過idea分別執行clean package打包命令,而後咱們就能夠在項目內的target目錄下找我打成的jar包sql

【小提示】:能夠在本地運行該jar,測試功能是否暢通,功能測試無缺再作下一步深刻入入入...docker

  • java -jar jar包全名稱數據庫

經過Dockerfile文件構建鏡像

Dockerfile編寫規則

在本地磁盤中找到該jar,並將其上傳到咱們的Linux服務器:

上傳到咱們的Linux服務器後,咱們就在該jar的同等路徑下,編寫Dockerfil文件,注意在同一路徑下!

下面對上面的命令作一個簡單的解釋:

  • jdk:8   :構建一個jdk8鏡像的新鏡像,若是本地不具備,docker回去中央倉庫下載

  • ADD 這一欄將當前目錄下的這個jar ,複製到鏡像內的根目錄下

  • 最後一欄表示 完成上面操做後將進行的命令,相似於CMD 也就是啓動該jar的腳本命令

而後就是鏡像構建了: docker build -t 'ninjablog:1.0' .

下面仍然作一個簡單的解釋:

  • 【docker build -t 'ninjablog:1.0' . 】 :表示構建一個鏡像取名爲ninjablo,版本號爲1.0

  • 這裏我須要注意的是,鏡像名字千萬不要使用大寫字母,會構建失敗的,我也不知道爲何

  • 構建完成以後,經過docker images 查看本地鏡像,就會看到咱們剛剛構建的那個鏡像大搖大擺的出如今了列表中

鏡像就算是已經構建成功,下面咱們建立基於該鏡像的容器

中途夭折心酸故事

而後我建立容器,並運行容器,這個時候經過 docker logs -f 容器名/id 查看到一堆有一堆的異常,我炸了

通過30分鐘的排查後,我以爲多是mysql的配置錯了。我配置的localhost:3306,明顯個人容器中沒有這玩意兒,

通過一番折騰,我再次打包、上傳。作鏡像。開容器,...再打包....再打包......

一個小時後!啊,個人天啊,怎麼回事啊?Linux上都能遠程鏈接Windows上的mysql,爲何你個SpringBoot鏈接不上

  • 我嘗試使用ip:port的方式用navicat鏈接本地數據庫,鏈接失敗

  • 開啓本地數據庫遠程鏈接功能,開放全部數據庫訪問權限,Linux完美鏈接,項目報異常

  • 忽然想起個人docker上好像有mysql誒?立刻折騰,啓動容器,建立數據庫,導數據,容器重啓,OJBK

基於該鏡像建立容器

兩種方式建立容器

好了,幾經波折,終於到了咱們最後的環節了,創鏡像,起容器,訪項目!

這裏我用數據庫容器,以及一個由項目構建的鏡像啓動的容器,兩個容器排排站:

而後就是測試訪問了!,而後就是404,我靠!,經過docker logs -f myblog 查看日誌,又是一堆異常!

再次夭折心酸故事

此次沒上次折騰的久,安裝docker的機器的防火牆未關,在上一步中,我用了mysql容器,致使被牆了

首先全局關閉防火牆,啓動容器,發現報錯,不能啓動,重啓docker,刷新配置,再次重啓。

守的雲開見月明

再次查看咱們容器的啓動日誌,沒有異常,刷新兩哈 docker ps ,發現咱們的myblog容器一直在線,並無宕掉

而後啓動瀏覽器,進行項目訪問測試:

使用到的命令集合

  • docker build -t 'ninjablog:1.0' . :構建一個名爲ninjablog的鏡像,版本爲1.0,能夠缺省版本設置

  • docker run -d -p 8888:8888 --name myblog ninjablog:建立並運行一個容器,參數不少,詳見我給的資料

  • docker rm 容器Name/Id :根據名字或者id刪除該容器

  • docker rmi 鏡像名字/id :根據鏡像名字或者id刪除鏡像

  • firewall-cmd --state :CentOS7查看當前系統的防火牆狀態

  • firewall-cmd --permanent --zone=public --add-port=3306/tcp :在防火牆開啓狀態下,開放3306端口,自行修改

  • docker logs -f myblog :查看myblog容器的運行日誌,有版本號配置的話須要補全

  • systemctl restart docker:重啓docker

  • docker start 容器Name/id :根據名字或者id啓動一個容器

  • docker ps :查看全部的容器,後跟 -a 查看當前正在運行的容器

好的這種山頂洞人的原始部署方式到此結束,咱們翻開下一個篇章

山頂洞人半自動化:Maven插件自動構建鏡像

編寫Dockerfile

Dockerfile以前咱們已經編寫過了,這裏就是 拿來即用便可,把Dockerfile從Linux上拷下來,放到資源文件Resource下便可

編寫pom_docker.xml

複製本項目的pom.xml文件,命名爲pom_docker.xml,其餘數據不用更改,只是再原來的基礎上再加一個插件:

這個插件添在maven打包插件的然後面便可,可酌情修改相關數據

 <!--自動構建鏡像相關: 依賴docker環境-->
           <plugin>
               <groupId>com.spotify</groupId>
               <artifactId>docker‐maven‐plugin</artifactId>
               <version>1.0.0</version>
               <!--docker鏡像相關的配置信息-->
               <configuration>
                   <!--鏡像名,這裏用工程名-->
                   <imageName>${project.artifactId}‐${project.version}</imageName>
                   <!--Dockerfile文件所在目錄-->
                   <dockerDirectory>${project.basedir}/src/main/resources</dockerDirectory>
                   <!--TAG,這裏用工程版本號-->
                   <imageTags>
                       <imageTag>${project.version}</imageTag>
                   </imageTags>
                   <imageName>${project.artifactId}:${project.version}</imageName>
                   <!--構建鏡像的配置信息-->
                   <resources>
                       <resource>
                           <targetPath>/</targetPath>
                           <directory>${project.build.directory}</directory>
                           <include>${project.artifactId}‐${project.version}.jar</include>
                       </resource>
                   </resources>
               </configuration>
           </plugin>

【提示】:此插件依賴docker環境,因此若是本地沒有安裝docker環境,建議這樣操做一波

在裝有docker的機器上,使用git clone 克隆項目

咱們將項目推送到github或者碼雲上,而後再Linux上吧項目克隆一份便可

而後再經過一個命令,指定打包建立鏡像

項目推送github或者gitlab或者碼雲

項目克隆到linux本地

git 我能用,若是不能用,執行安裝環境

打包前的jdk、maven環境搭建

jdk環境我相信你們應該有的吧,這裏不作過多說明。

這裏也是須要maven的環境,我相信你們都沒有,簡單給一系列命令安裝一下

隨便找一個安裝目錄,依次執行下面的命令

yum -y install wget

wget http://mirror.bit.edu.cn/apache/maven/maven-3/3.6.1/binaries/apache-maven-3.6.1-bin.tar.gz

tar -zxvf apache-maven-3.6.1-bin.tar.gz

修改setting文件,將依賴源改成國內的:而後將倉庫等玩意兒也部署上【剛搬家,還沒牽寬帶,有寬帶的不用管】

vi /etc/profile :加入環境變量,路徑寫本身的解壓路徑便可

export JAVA_HOME=/usr/local/jdk8/jdk1.8.0_171 export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/jre/lib/rt.jar export PATH=$PATH:$JAVA_HOME/bin

export MAVEN_HOME=/usr/local/apache-maven-3.6.1

export PATH=$MAVEN_HOME/bin:$PATH

source /etc/profile :刷新系統配置

最後測試一下 mvn -v:出現java版本、maven版本相關信息就能夠了

打包構鏡像一條龍服務

進入到Linux上咱們的工程內部,就是有pom_docker.xml文件的那個文件夾,執行下面這個命令便可

mvn ‐f pom_docker.xml clean package ‐DskipTests docker:build

果不其然報錯了,我費盡心思,暫時尚未找到解決的辦法,目前家裏沒寬帶,流量遭不住,過幾天再繼續

相關文章
相關標籤/搜索