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

1、在IDEA工具中开发代码

2、代码打成jar包

3、部署到Linux服务器上

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

5、构建镜像

6、运行容器

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

1、Docker开启远程访问

修改Docker服务文件

1vim /lib/systemd/system/docker.service

修改这一行

1/usr/bin/dockerd-current -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock \

mark 2、重新加载配置文件

1systemctl daemon-reload

3、重启Docker服务

1systemctl restart docker

4、查看端口是否开启

1netstat -nlpt

5、关闭防火墙

1systemctl stop firewalld.service

6、禁止防火墙开机启动

1systemctl disable firewalld.service

7、直接curl看看是否生效

1curl http://127.0.0.1:2375/info

mark

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

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

 1<?xml version="1.0" encoding="UTF-8"?>
 2<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 3         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
 4    <modelVersion>4.0.0</modelVersion>
 5    <parent>
 6        <groupId>org.springframework.boot</groupId>
 7        <artifactId>spring-boot-starter-parent</artifactId>
 8        <version>2.2.2.RELEASE</version>
 9        <relativePath/> <!-- lookup parent from repository -->
10    </parent>
11    <groupId>edu.xpu</groupId>
12    <artifactId>docker</artifactId>
13    <version>0.0.1-SNAPSHOT</version>
14    <name>docker</name>
15    <description>Demo project for Spring Boot</description>
16
17    <properties>
18        <java.version>1.8</java.version>
19        <!-- Docker镜像上传的用户名 -->
20        <docker.image.prefix>zouchanglin</docker.image.prefix>
21    </properties>
22
23    <dependencies>
24        <dependency>
25            <groupId>org.springframework.boot</groupId>
26            <artifactId>spring-boot-starter-web</artifactId>
27        </dependency>
28
29        <dependency>
30            <groupId>org.springframework.boot</groupId>
31            <artifactId>spring-boot-starter-test</artifactId>
32            <scope>test</scope>
33            <exclusions>
34                <exclusion>
35                    <groupId>org.junit.vintage</groupId>
36                    <artifactId>junit-vintage-engine</artifactId>
37                </exclusion>
38            </exclusions>
39        </dependency>
40    </dependencies>
41
42    <build>
43        <plugins>
44            <plugin>
45                <groupId>org.springframework.boot</groupId>
46                <artifactId>spring-boot-maven-plugin</artifactId>
47            </plugin>
48
49            <plugin>
50                <groupId>com.spotify</groupId>
51                <artifactId>docker-maven-plugin</artifactId>
52                <version>1.0.0</version>
53                <configuration>
54                    <!-- 镜像名称 -->
55                    <imageName>${docker.image.prefix}/${project.artifactId}</imageName>
56                    <!-- 指定标签 -->
57                    <imageTags>
58                        <imageTag>latest</imageTag>
59                    </imageTags>
60                    <!-- 基础镜像版本JDK1.8 -->
61                    <baseImage>java</baseImage>
62                    <!-- 作者本人信息 -->
63                    <maintainer>zouchanglin zchanglin3@gmail.com</maintainer>
64                    <!-- 切换到ROOT目录 -->
65                    <workdir>/ROOT</workdir>
66                    <cmd>["java", "-version"]</cmd>
67                    <entryPoint>["java", "-jar", "${project.build.finalName}.jar"]</entryPoint>
68
69                    <!-- 指定 DockerFile路径 -->
70                    <!-- <dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>-->
71                    <!-- 指定远程 Docker api地址 -->
72                    <dockerHost>http://192.168.70.128</dockerHost>
73
74                    <!-- 复制Jar包到指定的Docker容器 -->
75                    <resources>
76                        <resource>
77                            <targetPath>/ROOT</targetPath>
78                            <!-- 用于指定用于复制的根目录 -->
79                            <directory>${project.build.directory}</directory>
80                            <!-- 用于指定需要复制的文件 -->
81                            <include>${project.build.finalName}.jar</include>
82                        </resource>
83                    </resources>
84                </configuration>
85                <executions>
86                    <!-- 当执行maven package时执行maven clean package:build-->
87                    <execution>
88                        <id>build-image</id>
89                        <phase>package</phase>
90                        <goals>
91                            <goal>build</goal>
92                        </goals>
93                    </execution>
94                </executions>
95            </plugin>
96        </plugins>
97    </build>
98
99</project>

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

 1FROM java
 2
 3MAINTAINER zouchanglin zchanglin3@gmail.com
 4
 5WORKDIR /ROOT
 6
 7ADD /ROOT/docker-0. 0.1-SNAPSHOT. jar /ROOT/
 8
 9ENTRYPOINT ["java", "-jar", "docker-0.0. 1-SNAPSHOT. jar"]
10
11CMD ["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的时候就完成镜像的打包

 1<executions>
 2 <!-- 当执行maven package时,执行maven clean package:build -->
 3	<execution>
 4	    <id>build-image</id>
 5    	<phase>package</phase>
 6    	<goals>
 7    		<goal>build</goal>
 8    	</goals>
 9    </execution>
10</executions>