天天看點

IDEA內建docker插件實作SpringBoot項目一鍵部署

虛拟機centos7.X,docker1.3.X,Win10 Idea2018.1

預設Idea已經下載下傳了Docker插件

預設虛拟機docker已經裝了jdk

打開docker配置檔案,開放2375端口

在ExecStart=/usr/bin/dockerd-current 後面加上

-H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
           

重新加載配置檔案

systemctl daemon-reload
           

重新開機docker

systemctl start docker
           

檢視程序

netstat -tulp
           
PS:Centos7沒有netstat,是以要先下載下傳。
yum install net-tools
           

防火牆開放2375端口号

重新開機防火牆

Idea連接配接虛拟機docker

打開小扳手(setting)找到docker,輸入虛拟機ip

IDEA內建docker插件實作SpringBoot項目一鍵部署

Springboot項目添加docker-maven-plugin插件.

<!--使用docker-maven-plugin插件-->
<plugin>
    <groupId>com.spotify</groupId>
    <artifactId>docker-maven-plugin</artifactId>
    <version>1.0.0</version>
    <!--将插件綁定在某個phase執行-->
    <executions>
        <execution>
            <id>build-image</id>
            <!--将插件綁定在package這個phase上。也就是說,使用者隻需執行mvn package ,就會自動執行mvn docker:build-->
            <phase>package</phase>
            <goals>
                <goal>build</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <!--指定生成的鏡像名-->
        <imageName>hsz1992/${project.artifactId}</imageName>
        <!--指定标簽-->
        <imageTags>
            <imageTag>latest</imageTag>
        </imageTags>
        <!-- 指定 Dockerfile 路徑-->
        <dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
        <!--指定遠端 docker api位址-->
        <dockerHost>http://192.168.159.130:2375</dockerHost>
        <!-- 這裡是複制 jar 包到 docker 容器指定目錄配置 -->
        <resources>
            <resource>
                <targetPath>/</targetPath>
                <!--jar 包所在的路徑  此處配置的 即對應 target 目錄-->
                <directory>${project.build.directory}</directory>
                <!-- 需要包含的 jar包 ,這裡對應的是 Dockerfile中添加的檔案名 -->
                <include>${project.build.finalName}.jar</include>
            </resource>
        </resources>
    </configuration>
</plugin>
           

完整的pom:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.3.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.qwx</groupId>
    <artifactId>docker</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <properties>
        <java.version>1.8</java.version>
        <docker.image.prefix>docker</docker.image.prefix>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>1.0.0</version>

                <!--将插件綁定在某個phase執行-->
                <executions>
                    <execution>
                        <id>build-image</id>
                        <!--将插件綁定在package這個phase上。也就是說,使用者隻需執行mvn package ,就會自動執行mvn docker:build-->
                        <phase>package</phase>
                        <goals>
                            <goal>build</goal>
                        </goals>
                    </execution>
                </executions>

                <configuration>
                    <!--指定生成的鏡像名-->
                    <imageName>hsz1992/${project.artifactId}</imageName>
                    <!--指定标簽-->
                    <imageTags>
                        <imageTag>latest</imageTag>
                    </imageTags>
                    <!-- 指定 Dockerfile 路徑-->
                    <dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>

                    <!--指定遠端 docker api位址-->
                    <dockerHost>http://192.168.100.104:2375</dockerHost>

                    <!-- 這裡是複制 jar 包到 docker 容器指定目錄配置 -->
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <!--jar 包所在的路徑  此處配置的 即對應 target 目錄-->
                            <directory>${project.build.directory}</directory>
                            <!-- 需要包含的 jar包 ,這裡對應的是 Dockerfile中添加的檔案名 -->
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
           

建立docker檔案夾和Dockerfile檔案,docker要在src/main裡

IDEA內建docker插件實作SpringBoot項目一鍵部署

Dockerfile:

FROM java:8
VOLUME /tmp
ADD docker-1.0-SNAPSHOT.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
           
此處深坑:
ADD 後的jar包名必須和打包後的名字一樣,看到配置成功後的鏡像名以shaxxx開頭,請回頭
           

FROM:選擇的jdk

EXPOSE 是端口号和server.port=8082一緻

ADD:第一個jar是打包的項目名 第二個是别名

在idea的右邊找到Maven Projects,找到Lifecycle,輕按兩下package打包

build success 則說明打包成功,此時聚焦docker視圖,images會多出一個鏡像

建立容器,找到剛剛生成的鏡像,點選建立容器

IDEA內建docker插件實作SpringBoot項目一鍵部署

Image ID 是打包生成的那個鏡像

Container name 容器名字随便取

Bind ports 8081是docker對外開放的端口,8080是項目端口

設定好後,啟動容器,啟動成功後去虛拟機檢視是否啟動成功

通路虛拟機ip+端口号

http://192.168.100.104:8081/test/docker
           
IDEA內建docker插件實作SpringBoot項目一鍵部署

END

繼續閱讀