IDEA遠程快速部署SpringBoot項目到Docker環境


一:基礎准備

1.首先在linux服務器安裝Docker環境,具體安裝步驟及Docker使用參考官網或網絡資料(這里重點是快速部署項目到Docker環境)

2.配置Docker遠程連接端口

1.vim /usr/lib/systemd/system/docker.service
2.找到ExecStar 在后面添加 -H tcp://0.0.0.0:2375

3.重啟Docker

 systemctl daemon-reload
 systemctl start docker

4.如果防火牆已經打開則需要開放2375端口

firewall-cmd --zone=public --add-port=2375/tcp --permanent

5.Idea安裝Docker插件並配置連接Docker

  

 6.連接成功會列出遠程的容器和鏡像,並且可以直接右鍵快速啟動、關閉、刪除容器或鏡像

 二:構建Springboot項目

1.pom文件在plugin添加docker-maven-plugin、maven-antrun-plugin插件

<build>
        <finalName>study-demo</finalName>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
                <includes>
                    <include>application.properties</include>
                    <include>**/*.xml</include>
                    <include>**/*.json</include>
                </includes>
            </resource>
            <resource>
                <directory>src/main/java</directory>
                <filtering>true</filtering>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>1.0.0</version>
                <configuration>
                    <dockerDirectory>src/main/docker</dockerDirectory>
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <directory>${project.build.directory}</directory>
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-antrun-plugin</artifactId>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <configuration>
                            <tasks>
                                <copy todir="src/main/docker" file="target/${project.build.finalName}.${project.packaging}"></copy>
                            </tasks>
                        </configuration>
                        <goals>
                            <goal>run</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

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

這里給出了一個Dockerfile幾個重要指令比較詳細的參考說明

FROM java:8

#維護者信息
MAINTAINER boris@email.com

#添加元數據到鏡像,LABEL是以鍵值對形式
LABEL maintainer="bo.zou <boris@email.com>"
LABEL copyright="2015 ~ 2020 www.boris.com Inc. All rights reserved."
LABEL version="1.0.0"
LABEL declaration="Boris Test Dockerfile"

#ENV設置環境變量 timezone
ENV TIMEZONE Asia/Shanghai

#設置容器的工作目錄
# WORKDIR
#RUN指令:用於指定 docker build 過程中要運行的命令
RUN mkdir /usr/local/boris
WORKDIR /usr/local/boris

#復制指令,從上下文目錄中復制文件或者目錄到容器里指定路徑
#ADD 指令和 COPY 的使用格式一致(同樣需求下,官方推薦使用 COPY)
#將jar包添加到容器中並更名為app.jar
COPY *.jar /usr/local/boris/app.jar

#定義匿名數據卷。在啟動容器時忘記掛載數據卷,會自動掛載到匿名卷。
#可以在鏡像中創建掛載點,只要通過該鏡像創建的容器都有了掛載點
#作用是和docker run命令的-v是一樣,將宿主機和容器的目錄做映射
#區別是:通過 VOLUME 指令創建的掛載點,無法指定宿主機上對應的目錄,是自動生成的。可以通過查看容器的信息查看到,例:docker inspect 容器ID
#VOLUME ["/usr/local/boris/dockerlog"]

###聲明啟動端口號
EXPOSE 8080

#CMD 和 ENTRYPOINT 在docker run 時運行(啟動容器時執行),主要用來指定容器默認執行的命令.
#CMD作用:當Docker鏡像被啟動后Docker容器將會默認執行的命令,CMD 指令指定的程序會被 docker run 命令行參數中指定要運行的程序所覆蓋
#ENTRYPOINT作用:類似於 CMD 指令,區別在於不會被 docker run 的命令行參數指定的指令所覆蓋,而且這些命令行參數會被當作參數送給 ENTRYPOINT 指令指定的程序
#一個Dockerfile中只能有一個CMD或ENTRYPOINT命令,多個僅最后一個生效。多數情況下它們應該是單獨使用的。
#配合使用時:
#• 如果 ENTRYPOINT 使用了 shell 模式,CMD 指令會被忽略。
#• 如果 ENTRYPOINT 使用了 exec 模式,CMD 指定的內容被追加為 ENTRYPOINT 指定命令的參數。
#• 如果 ENTRYPOINT 使用了 exec 模式,CMD 也應該使用 exec 模式。
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","app.jar"]

3.創建springboot項目controller和啟動類做測試

 

4.增加配置

說明:

Dockerfile:指定你的Dockerfile文件 

Image tag : 指定鏡像名稱和tag,冒號分隔

Bind ports : 綁定宿主機端口到容器內部端口。格式為[宿主機端口]:[容器內部端口]

Bind mounts : 將宿主機目錄掛到到容器內部目錄中。格式為[宿主機目錄]:[容器內部目錄]

Contaner name:取一個容器名稱,不填默認會隨機生成一個名稱

5.打包並運行

 6.成功,可以看到創建的容器和鏡像並且運行成功

 

 

 

 

結束,EDN。


免責聲明!

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



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