Spring boot項目打包到docker中並動態傳遞啟動參數


一、安裝docker

  •   網上很多,直接搜就可以了。

二、修改相關配置文件

/usr/lib/systemd/system/docker.service

中的ExecStart選項,將原來的

ExecStart=/usr/bin/dockerd
修改成:
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock

mac OS由於沒有docker.service文件,所以需要執行命令 brew install socat,用來輔助docker開啟遠程api模塊。

 安裝完成之后首先需要在~/.bash_profile中提示信息插入到文件中,然后執行source ~/.bash_profile

export LDFLAGS="-L/usr/local/opt/readline/lib"
export CPPFLAGS="-I/usr/local/opt/readline/include"

然后執行

socat -d TCP-LISTEN:2375,range=127.0.0.1/32,reuseaddr,fork UNIX:/var/run/docker.sock

並保持Terminal不關閉。

查看是否開啟docker remote API是否成功,可以在瀏覽器輸入http://ip:2375/version,注意要開啟服務器端口。

三、修改項目

  一共有三種方式部署docker,前兩種為maven配合dockerfile,后一種則是直接通過dockerfile構建。

  • maven中直接配置插件,將dockerfile中的信息填入插件,不需要dockerfile
<plugin>
   <groupId>com.spotify</groupId>
     <artifactId>docker-maven-plugin</artifactId>
     <version>1.0.0</version>
     <configuration>
       <imageName>irh/${project.artifactId}</imageName>
       <dockerHost>http://127.0.0.1:2375 </dockerHost>  #修改成自己docker所在服務器ip
       <baseImage>java:8</baseImage>
        <entryPoint>["java", "-jar","/irh-registry-1.0-SNAPSHOT-execute.jar"]</entryPoint> 
           <resources>
              <resource>
                <targetPath>/</targetPath>
                  <directory>${project.build.directory}</directory>
                  <include>${project.build.finalName}.jar</include> 
         </resource>
       </resources>
   </configuration>
</plugin>
  • maven配合dockerfile文件

  pom.xml文件

            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>1.0.0</version>
                <configuration>
                    <imageName>irh/${project.artifactId}</imageName>
                    <dockerHost>http://127.0.0.1:2375</dockerHost>
                    <dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>   #dockerfile在項目中的位置
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <directory>${project.build.directory}</directory>
                            <include>irh-registry-1.0-SNAPSHOT-execute.jar</include>
                        </resource>
                    </resources>
                </configuration>
            </plugin>

  

在項目中的main文件夾下新建docker文件夾,並新增Dockerfile文件

 Dockerfile內容:

# Docker image for springboot file run
# 基礎鏡像使用java
FROM java:8
# VOLUME 指定了臨時文件目錄為/tmp。
# 其效果是在主機 /var/lib/docker 目錄下創建了一個臨時文件,並鏈接到容器的/tmp
VOLUME /tmp
# 將jar包添加到容器中並更名為app.jar
ADD irh-registry-1.0-SNAPSHOT-execute.jar app.jar
# 運行jar包
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

 其中,ADD 命令行的意思是將宿主機器中的jar拷貝到容器中根目錄下,並改名為app.jar,進入容器后截圖

四、部署

在項目根目錄執行 mvn package docker:build

 查看docker中的鏡像:

 執行 docker run -d -p 本機端口:項目端口 --name=運行后容器名稱 鏡像id即可創建容器並啟動。

docker run -d -p 10086:10086 --name=irh-registry fcd81a5b5cc0

五、動態傳遞參數

構建的Spring boot項目中,可能存在多個環境,本地環境和線上環境,這個時候可以通過在通過鏡像構建容器時傳遞對應的參數就可以實現在不同環境下部署

  • 修改Dockerfile 

 

主要就是新增了一個名為「ENVIR」的參數,並在「ENTRYPOINT」后面賦值給一個「--spring.prifiles.active」。

 刪除之前存在的使用maven構建;先刪除容器,再刪除鏡像

然后執行命令

docker run -d -p --name 自定義名稱  -e Dockerfile中定義的變量名="XXX" 鏡像id

 有多個變量則重復 「 -e 變量名=賦值 」這種格式。

 


免責聲明!

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



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