IDEA集成Docker实现一键打包部署

2,646 阅读2分钟

1、在IDEA工具中开发代码

2、代码打成jar包

3、部署到Linux服务器上

4、如果用Docker(编写Dockerfile文件)

5、构建镜像

6、运行容器

现在使用IDEA集成Docker实现一键打包部署

1、Docker开启远程访问

修改Docker服务文件 1 vim /lib/systemd/system/docker.service

修改这一行 1 /usr/bin/dockerd-current -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock \

image.png

2、重新加载配置文件

1 systemctl daemon-reload

3、重启Docker服务

1 systemctl restart docker

4、查看端口是否开启

1 netstat -nlpt

5、关闭防火墙

1 systemctl stop firewalld.service

6、禁止防火墙开机启动

1 systemctl disable firewalld.service

7、直接curl看看是否生效

1 curl http://127.0.0.1:2375/info

image.png 在IDEA中配置

image.png

image.png

image.png

image.png

传统过程中,打包、部署、上传到Linux、 编写Dockerfile、 构建镜像、创建容器运行。

而在持续集成过程中,项目工程一般使用Maven编译打包,然后生成镜像,通过镜像上线,能够大大提供上线效率,同时能够快速动态扩容,快速回滚,着实很方便。docker-maven-plugin 插件就是为了帮助我们在Maven工程中,通过简单的配置,自动生成镜像并推送到仓库中。

<?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 https://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.2.2.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>edu.xpu</groupId>
    <artifactId>docker</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>docker</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
        <!-- Docker镜像上传的用户名 -->
        <docker.image.prefix>zouchanglin</docker.image.prefix>
    </properties>

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </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>
                <configuration>
                    <!-- 镜像名称 -->
                    <imageName>${docker.image.prefix}/${project.artifactId}</imageName>
                    <!-- 指定标签 -->
                    <imageTags>
                        <imageTag>latest</imageTag>
                    </imageTags>
                    <!-- 基础镜像版本JDK1.8 -->
                    <baseImage>java</baseImage>
                    <!-- 作者本人信息 -->
                    <maintainer>zouchanglin zchanglin3@gmail.com</maintainer>
                    <!-- 切换到ROOT目录 -->
                    <workdir>/ROOT</workdir>
                    <cmd>["java", "-version"]</cmd>
                    <entryPoint>["java", "-jar", "${project.build.finalName}.jar"]</entryPoint>

                    <!-- 指定 DockerFile路径 -->
                    <!-- <dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>-->
                    <!-- 指定远程 Docker api地址 -->
                    <dockerHost>http://192.168.70.128</dockerHost>

                    <!-- 复制Jar包到指定的Docker容器 -->
                    <resources>
                        <resource>
                            <targetPath>/ROOT</targetPath>
                            <!-- 用于指定用于复制的根目录 -->
                            <directory>${project.build.directory}</directory>
                            <!-- 用于指定需要复制的文件 -->
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                </configuration>
                <executions>
                    <!-- 当执行maven package时执行maven clean package:build-->
                    <execution>
                        <id>build-image</id>
                        <phase>package</phase>
                        <goals>
                            <goal>build</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>

如果用上述maven插件则会构造出这样的Dockerfile文件

FROM java
MAINTAINER zouchanglin zchanglin3@gmail.com
WORKDIR /ROOT
ADD /ROOT/docker-0. 0.1-SNAPSHOT. jar /ROOT/
ENTRYPOINT ["java", "-jar", "docker-0.0. 1-SNAPSHOT. jar"]
CMD ["java", "-version"]

接下来使用命令构建镜像

mvn clean package docker:build

然后通过IDEA操作Docker去生成容器即可
绑定Docker命令道Maven各个阶段

我们可以绑定Docker命令到Maven各个阶段,我们可以把Docker分为buld、tag、 push ,然后分别绑定Maven的package、deploy 阶段,我们只需要执行mvn dep loy就可以完成整个build、tag、push操作了,当我们执行mvn build 就只完成build、tag 操作。

现在我们可以在mvn package的时候就完成镜像的打包

<executions>
 <!-- 当执行maven package时,执行maven clean package:build -->
	<execution>
	    <id>build-image</id>
    	<phase>package</phase>
    	<goals>
    		<goal>build</goal>
    	</goals>
    </execution>
</executions>