在CentOS下的docker容器中部署spring boot應用的兩種方式


 

 

 

我們通常在 windows 環境下開發 Java,而通常是部署在Linux的服務器中,而CentOS通常是大多數企業的首選,基於Docker的虛擬化容器技術,多數Java應用選擇這種方式部署服務。本文章通過模擬這種場景部署一個Java的spring boot應用。

    

2. 環境

            安裝Docker的CentOS 7虛擬機,虛擬機安裝和使用可以參照:https://www.linuxidc.com/Linux/2014-10/108013.htm

       3. 工具

    遠程連接服務器工具:xshell5,xftp5,xshell可以通過命令遠程操作Linux服務器,跟終端輸入命令效過一樣,xftp可以遠程傳輸文件。這兩款工具的安裝和使用可以百度搜索

 下載安裝

4.操作過程

  1. xshell5 和 xftp5 配置

      Xshell:

       打開xshell主面板,點擊新建,彈出會話配置面板,按如下填上連接信息

       

       填完連接信息之后,點擊連接,輸入連接linux的用戶名和密碼即可登錄虛擬機系統。xshell出現一個命令行窗口

       

       可在命令行窗口輸入Linux命令操作該Linux系統。如果連接不上請檢查CentOS防火牆有沒有開放22端口(一般默認開放),有沒有運行

       sshd服務。

       XFTP5:

          打開xftp主面板,文件下新建一個會話,如圖配置相關連接信息,注意協議選擇 sftp和22端口

          

       打開選項卡【選項】,勾選“使用UTF-8”編碼,遷移類型選擇 Binary,(注意這里不能選擇ASCII,這是一個大坑,選擇該項傳輸jar包時會丟失class文件,

 編者曾試過這血的教訓),最后點擊確定建立連接(配置好之后重啟一下該工具,不重啟可能某些配置不起作用),這樣我們就可以通過鼠標拖曳的方式傳輸文件了。

    2. 創建一個 spring-boot 應用,接口可以返回“Hello world”信息,制定服務端口8040

        

    3. 服務部署

       3.1 以maven插件的方式部署

               3.1.1.確保docker服務開啟和防火牆開放2375端口

                  相關命令

#查看端口 成功返回yes
firewall-cmd --query-port=2375/tcp
#查看防火牆狀態
systemctl status firewalld.serice
#開啟防火牆
systemctl start firewalld.services
#解鎖防火牆進程
systemctl unmask firewalld.service
#開放服務端口firewall-cmd --add-port=2375/tcp

                     3.1.2.在工程maven中加入如下插件,並填寫相關配置信息

 <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <docker.image.prefix>springboot</docker.image.prefix>
    </properties>

                   

<plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>1.0.0</version>
                <configuration>
                    <dockerDirectory>src/main/docker</dockerDirectory>
                    <dockerHost>http://192.168.42.210:2375</dockerHost>
                    <imageName>${docker.image.prefix}/${project.artifactId}</imageName>
                    <imageTags>
                        <imageTag>${project.version}</imageTag>
                        <imageTag>latest</imageTag>
                    </imageTags>
                    <entryPoint>["java","-jar","/${project.build.finalName}.mvnjar"]</entryPoint>
                    <exposes>8040</exposes>
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <directory>${project.build.directory}</directory>
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                </configuration>
            </plugin>

                       3.1.3 在 工程 src/main/docker 目錄下新建Dockerfile 文件

    

FROM java
VOLUME /tmp
ADD hello-world-0.0.1-SNAPSHOT.jar app.jar
RUN bash -c 'touch /app.jar'
ENV JAVA_OPTS=""
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]

                         3.1.4 項目完成后,在控制台執行 在pom.xml根目錄下執行

                                    

mvn clean package docker:build

                       3.1.5 執行完命令后,在xshell中查看docker鏡像,會出現兩個springboot/hello-word 的鏡像(其實是同一個)

               

                        接着,我們在xshell中執行啟動命令

sudo docker run -d -p 8040:8040 --name hello-world 7c4a665ed17d

                       我們可以執行 命令查看是否啟動成功

sudo docker ps

       

           我們可以執行命令查看日志:

           

sudo docker logs hello-world

          3.1.6 我們在windows主機訪問該服務接口(參照3.1.1開放8040端口)

   

          3.2 通過 本地構建的方式部署應用。

               3.2.1 首先我們將打包好的 jar 包和Dockerfile文件通過xftp工具遠程傳輸到CentOS上放在同一個目錄中

               3.2.2 通過命令cd到該目錄執行如下命令構建鏡像

sudo docker build -t helloworld .

                      注意不要漏掉最后的“.",表市當前路徑,helloworld是鏡像名

              3.3.3 然后通過該鏡像可構建我們的容器、開放服務端口,方法同3.1中的操作

       PS:測試過程中可能使用到的命令

#關閉容器
sudo docker stop 容器名|容器ID
#查看運行的容器
sudo docker ps
# 查看所有的容器,包括停止的
sudo docker ps -a
# 刪除容器
sudo docker rm 容器名|容器ID
#刪除鏡像
sudo docker rmi 鏡像名:標簽 | 鏡像ID

 

 

           

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM