docker部署springboot項目


 

1、項目結構

 

pom文件中加入:docker-maven-plugin

<plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>0.4.11</version>
                <configuration>
                    <imageName>${docker.image.prefix}/${project.artifactId}</imageName>
                    <dockerDirectory>src/main/docker</dockerDirectory>
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <directory>${project.build.directory}</directory>
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                </configuration>
            </plugin>

 

 

 

 2、創建Dockerfile文件

在src/main/docker文件夾下創建用於生成鏡像的文件

文件內容:

FROM frolvlad/alpine-oraclejdk8:slim
VOLUME /tmp
ADD kzng-thymeleaf.jar app.jar
RUN sh -c 'touch /app.jar'
ENV JAVA_OPTS=""
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]

  文件解釋:  

FROM為使用哪個鏡像

VOLUME為掛載路徑

ADD為復制文件到鏡像中

RUN為初始化時運行的命令

ENV為設置環境變量

  ENTRYPOINT為啟動時運行的命令  

VOLUME 指定了臨時文件目錄為/tmp。其效果是在主機 /var/lib/docker 目錄下創建了一個臨時文件,並鏈接到容器的/tmp。該步驟是可選的,如果涉及到文件系統的應用就很有必要了。/tmp目錄用來持久化到 Docker 數據文件夾,因為 Spring Boot 使用的內嵌 Tomcat 容器默認使用/tmp作為工作目錄

項目的 jar 文件作為 “app.jar” 添加到容器的

ENTRYPOINT 執行項目 app.jar。為了縮短 Tomcat 啟動時間,添加一個系統屬性指向 “/dev/urandom” 作為 Entropy Source

3、docker部署springboot項目

  • 在服務器創建mydocker文件夾,並且將上面寫好的Dockerfile文件和打包好的springboot項目放到該文件夾下

 

 

  • 構建項目鏡像

執行docker build命令,docker就會根據Dockerfile-kzng里你定義好的命令構建新的鏡像

在該mydocker目錄下,命名為kzng_app(注意后邊有個點)

docker build -f Dockerfile-kzng -t kzng-app .

    

  其中-f代表選擇的鏡像文件Dockerfile-kzng,-t代表要構建的鏡像的tag,.代表當前目錄,也就是Dockerfile-kzng文件所在的目錄。

  查看鏡像是否創建成功 docker images

  

 

 

 注:容器時間和宿主時間會不一致

  查看容器的時間:

docker exec [containerId] date

創建容器時注意與宿主機時間保持一致(-v /etc/timezone:/etc/timezone -v /etc/localtime:/etc/localtime)

docker run -v /etc/timezone:/etc/timezone -v /etc/localtime:/etc/localtime -d -p 5050:5050 kzng-app

此方法只修改了容器時間,但啟動的服務仍然還是差8小時 ,最好的方法直接在Dockfile文件中修改時間、時區

4、啟動項目

docker run -d -p 80:8888 kzng-app
-d參數是讓容器后台運行 -p 是做端口映射,此時將服務器中的80端口映射到容器中的80(項目中端口配置的是80)端口 建議應用系統設置一致

  當出現:docker: Error response from daemon: driver failed programming external connectivity on endpoint epic_kowalevski時重啟docker(systemctl restart docker)

 

 5、結尾

當docker運行部署好后,若只能在服務器端訪問,而不能在其它客戶端機器上訪問時,即(Linux 下 Docker 端口映射到宿主機后 外部無法訪問對應宿主機端口)

需要進行如下配置:

解決辦法:

# vi /etc/sysctl.conf

或者

# vi /usr/lib/sysctl.d/00-system.conf

添加如下代碼:

net.ipv4.ip_forward=1

重啟network服務

# systemctl restart network

查看是否修改成功

# sysctl net.ipv4.ip_forward

如果返回為“net.ipv4.ip_forward = 1”則表示成功了

 


免責聲明!

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



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