微服务部署 docker-compose
1、docker-maven-plugin 介绍
在我们持续集成过程中,项目工程一般使用 Maven 编译打包,然后生成镜像,通过镜像上线,能够大大提供上线效率,同时能够快速动态扩容,快速回滚,着实很方便。docker-maven-plugin 插件就是为了帮助我们在Maven工程中,通过简单的配置,自动生成镜像并推送到仓库中。
dockerfile提供了两种配置方式,一种是通过Dockerfile文件,一种是直接在pom.xml配置。
你可以直接在pom.xml文件中指定base image,entry point, cmd, maintainer 和files,而不用通过Dockerfile的方式。
当然通过pom.xml文件的方式支持一些简单的命令,如果你需要VOLUMN
命令(或者其他pom.xml不支持使用的命令),还是需要通过将命令写入Dockerfile,并通过在pom中配置dockerDirectory
来引入该Dockerfile
默认情况下,该插件通过访问localhost:2375来连接本地docker,可以通过设置DOCKER_HOST 环境变量来连接docker
DOCKER_HOST=tcp://<host>:2375
1.连接,记着关闭linux防护墙 擦
docker(六) 使用docker-maven-plugin插件构建docker镜像
可以参考博客:https://blog.csdn.net/aixiaoyang168/article/details/77453974
docker-maven-plugin官网推荐在新项目中使用dockerfile-maven来构建镜像。
docker-maven-plugin的Github地址:https://github.com/spotify/docker-maven-plugin
dockerfile-maven的Github地址:https://github.com/spotify/dockerfile-maven
一、 使用docker-maven-plugin构建镜像
docker-maven-plugin有两种使用方式,一种是使用Dockerfile文件,一种是不使用Dockerfile文件。
1.在 POM中指定构建信息(不使用Dockerfile文件)
在pom.xml中引入该插件
<!-- docker-maven-plugin插件(不带Dockerfile文件) --> <plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>0.4.13</version> <configuration> <!--用于指定镜像名称--> <imageName>${project.name}:${project.version}</imageName> <!--用于指定基础镜像,相当于Dockerfile中的FROM指令--> <baseImage>java</baseImage> <!--相当于Dockerfile的ENTRYPOINT指令--> <entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint> <!--是否跳过docker build--> <skipDockerBuild>true</skipDockerBuild> <resources> <resource> <targetPath>/</targetPath> <!--用于指定需要复制的根目录,${project.build.directory}表示target目录--> <directory>${project.build.directory}</directory> <!--用于指定需要复制的文件。${project.build.finalName}.jar指的是打包后的jar包文件。--> <include>${project.build.finalName}.jar</include> </resource> </resources> </configuration> </plugin>
默认情况下,该插件通过访问localhost:2375来连接本地docker,可以通过设置DOCKER_HOST 环境变量来连接docker.
DOCKER_HOST=tcp://<host>:2375
2.使用Dockerfile文件
如果使用Dockerfile文件,必须指定dockerDirectory元素,那么 baseImage, maintainer, cmd and entryPoint这些元素也会被忽略。dockerDirectory元素所指定的内容将被复制到${project.build.directory}/docker下,resources元素则会复制除此之外的其它文件,例如项目jar文件。
<!--docker-maven-plugin插件(带Dockerfile文件)--> <plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>0.4.13</version> <configuration> <imageName>${project.name}:${project.version}</imageName> <!--Dockerfile文件位置--> <dockerDirectory>docker</dockerDirectory> <resources> <resource> <targetPath>/</targetPath> <directory>${project.build.directory}</directory> <include>${project.build.finalName}.jar</include> </resource> </resources> </configuration> </plugin>
二、使用
创建镜像
mvn clean package docker:build
推送镜像到Registry
mvn clean package docker:build -DpushImage
推送指定tag的镜像到Registry
mvn clean package docker:build -DpushImageTag
三、绑定Docker 命令到 Maven 各个阶段
IDEA连接Docker实现一键项目部署到Docker里面
Linux设置
1.开启端口号.
#开放2375端口
firewall-cmd --permanent --zone=public --add-port=2375/tcp
# 查看端口打开情况
firewall-cmd --permanent --zone=public --list-ports
# 重新加载firewall防火墙
firewall-cmd --reload
2.首先进入Docker的配置文件开发2375端口,这个端口是docker默认的端口,请不要改变他.
vim /usr/lib/systemd/system/docker.service
- 1
3. 在ExecStart=/usr/bin/dockerd后面加-H tcp://0.0.0.0:2375
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
- 1
4.重新读取配置文件
systemctl daemon-reload
- 1
5.重启docker
systemctl restart docker
- 1
IDEA设置
1.启动一个普通的容器实例
2.把java项目打包部署到docker上面
现在开始制作容器
- 导入依赖
<?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>com.capgemini</groupId>
<artifactId>docker-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>docker-demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<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<