docker部署SpringBoot項目


一、需求

通常,部署微服務到docker有以下方式:

  1. 手動部署:本地IDE打包成jar,在docker環境中創建java環境容器,將jar包使用命令行拷貝至docker容器中,啟動。
  2. 自動部署:通過Maven插件配置參數自動部署。(優先選這個)

二、安裝docker及jdk容器

安裝docker方法請瀏覽前面的文章。

安裝jdk容器:docker pull openjdk:11

 三、開放docker遠程部署端口

1,編輯docker配置文件:vim /lib/systemd/system/docker.service

2,修改ExecStart,添加參數(CentOS7): -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock

tcp://0.0.0.0:2375表示:表示允許任何遠程客戶端通過 2375 端口連接 Docker Daemon。

unix://var/run/docker.sock表示:本地客戶端將通過這個來連接 Docker Daemon

備注:該方法有漏洞,容易被黑客遠程放入挖礦機鏡像,開啟需做好防范,最好使用防火牆限制ip

3,重啟docker服務以刷新配置

systemctl daemon-reload
systemctl restart docker

防火牆配置:firewall-cmd --zone=public --add-port=2375/tcp --permanent 

測試遠程訪問是否生效:curl http://127.0.0.1:2375/info

四、Springboot項目配置

1,添加docker的maven依賴

 1 <plugin>
 2     <groupId>com.spotify</groupId>
 3     <artifactId>docker-maven-plugin</artifactId>
 4     <version>1.2.2</version>
 5     <configuration>
 6         <!-- 鏡像名稱 -->
 7         <imageName>docker/${project.artifactId}</imageName>
 8         <!-- Dockerfile文件存放目錄 -->
 9         <dockerDirectory>src/main/docker</dockerDirectory>
10         <!-- docker遠程服務器地址 -->
11         <dockerHost>http://172.19.45.12:2375</dockerHost>
12         <resources>
13             <resource>
14                 <targetPath>/</targetPath>
15                 <directory>${project.build.directory}</directory>
16                 <include>${project.build.finalName}.war</include>
17             </resource>
18         </resources>
19     </configuration>
20 </plugin>

2,在目錄src/main/docker下創建 Dockerfile 文件

 1 # 基於openjdk 鏡像  2 FROM openjdk:11
 3 # 將本地文件夾掛在到當前容器  4 VOLUME /tmp  5 # 復制文件到容器  6 ADD centerbusiness.war app.war  7 # 聲明需要暴露的端口  8 EXPOSE 8080 8443
 9 # 配置容器啟動后執行的命令 10 ENTRYPOINT ["sh", "-c", "java $PARAMS -Djava.security.egd=file:/dev/urandom -jar /app.war"]

FROM:使用的基礎鏡像名稱,如果鏡像不是本地的會從 DockerHub 進行下載。

VOLUME:VOLUME 指向了一個/tmp的目錄,由於 Spring Boot 使用內置的Tomcat容器,Tomcat 默認使用/tmp作為工作目錄。這個命令的效果是:在宿主機的/var/lib/docker目錄下創建一個臨時文件並把它鏈接到容器中的/tmp目錄。

ADD:拷貝文件並且重命名。

EXPOSE:在Dockerfile中聲明了那些端口是需要開放的,在構建容器時通過 -P (大寫的P)可以隨機映射端口,如果EXPOSE沒有指定端口,那么使用 -P 參數無效。本配置只是聲明,一般我們需要在構建docker容器時使用-p(小寫的p)指定開放的端口。

ENTRYPOINT :sh -c用來指定后面執行的一整行命令都具有執行者的權限,例如針對root執行echo  1 > 1.txt,可以讓echo和>兩個命令都具有root權限,$PARAMS參數用來占位,在構建docker容器時可以使用-e傳入參數,-Djava.security.egd=file:/dev/urandom,用來指定Java的java.security.SecureRandom綁定unix系統的/dev/urandom文件,生成高質量隨機數。

3,執行mvn package docker:build

直接執行maven命令,如果是idea開發環境,可以使用圖形化maven插件

 執行結果:

五、啟動docker鏡像

使用 docker images 查看打包的鏡像

構建docker容器,這里將命令報錯為了app.sh。

docker run -d -p 8080:8080 -p 8443:8443 --name centerbusiness docker/centerbusiness

當然這里也可以使用-e添加參數,docker run -e PARAMS=’-Xms128m -Xmx256m’ -p 8080:8080 docker/centerbusiness,此時的 PARAMS就會傳遞啟動jar的參數。

使用 docker ps 查看運行的鏡像,有則說明部署成功。

 

六、放開防火牆端口

firewall-cmd --zone=public --add-port=8080/tcp --permanent  開放8080端口

firewall-cmd --zone=public --add-port=8443/tcp --permanent  開放8443端口

systemctl restart firewalld

七、查看日志

日常維護需要不時查看項目日志,這時可以使用docker logs -f centerbusiness來查看所有在docker容器控制台中的輸出內容。


免責聲明!

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



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