编辑
2020-01-30
服务端技术
00
请注意,本文编写于 1333 天前,最后修改于 105 天前,其中某些信息可能已经过时。

1、在IDEA工具中开发代码

2、代码打成jar包

3、部署到Linux服务器上

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

5、构建镜像

6、运行容器

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

1、Docker开启远程访问

修改Docker服务文件

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

修改这一行

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

mark 2、重新加载配置文件

bash
systemctl daemon-reload

3、重启Docker服务

bash
systemctl restart docker

4、查看端口是否开启

bash
netstat -nlpt

5、关闭防火墙

bash
systemctl stop firewalld.service

6、禁止防火墙开机启动

bash
systemctl disable firewalld.service

7、直接curl看看是否生效

bash
curl http://127.0.0.1:2375/info

mark

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

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

xml
<?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文件

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

然后通过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的时候就完成镜像的打包

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

本文作者:Tim

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!