微服务部署 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上面

普通springboot+maven项目
随便写个方法
端口号
现在开始制作容器

  1. 导入依赖
<?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</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>1.0.0</version>
                <configuration>
                    <!-- 指定 Dockerfile 路径-->
                    <dockerDirectory>src/main/docker</dockerDirectory>
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <!--jar 包所在的路径  此处配置的 即对应 target 目录-->
                            <directory>${project.build.directory}</directory>
                            <!-- 需要包含的 jar包 ,这里对应的是 Dockerfile中添加的文件名 -->
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-antrun-plugin</artifactId>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <configuration>
                            <tasks>
                                <copy todir="src/main/docker" file="target/${project.artifactId}-${project.version}.${project.packaging}"></copy>
                            </tasks>
                        </configuration>
                        <goals>
                            <goal>run</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>
  1. 打包
    在这里插入图片描述

  2. 建立Dockerfile文件(注意这个文件没有后缀)

# 基于java镜像
FROM java:8
# linux上面得挂载点为 /tmp
VOLUME /tmp
# 添加一个jar为本项目得jar  第一个是打包得jar  第二个是别名
ADD *.jar app.jar
# 暴露得端口号 application.yml端口号一样
EXPOSE 8989
# 入口点 执行java jvm命令:加快随机数生产过程,运行这个jar包
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

 

  1. 在/src/main下创建Dockerfile文件(结构)
    在这里插入图片描述
  2. 增加配置
    在这里插入图片描述
  3. 运行
    在这里插入图片描述




posted @ 2021-02-15 20:14  abcdefghijklmnop  阅读(237)  评论(0编辑  收藏  举报