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

  1. 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中引入该插件

  1. <!-- docker-maven-plugin插件(不带Dockerfile文件) -->
  2. <plugin>
  3. <groupId>com.spotify</groupId>
  4. <artifactId>docker-maven-plugin</artifactId>
  5. <version>0.4.13</version>
  6. <configuration>
  7. <!--用于指定镜像名称-->
  8. <imageName>${project.name}:${project.version}</imageName>
  9. <!--用于指定基础镜像,相当于Dockerfile中的FROM指令-->
  10. <baseImage>java</baseImage>
  11. <!--相当于Dockerfile的ENTRYPOINT指令-->
  12. <entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>
  13. <!--是否跳过docker build-->
  14. <skipDockerBuild>true</skipDockerBuild>
  15. <resources>
  16. <resource>
  17. <targetPath>/</targetPath>
  18. <!--用于指定需要复制的根目录,${project.build.directory}表示target目录-->
  19. <directory>${project.build.directory}</directory>
  20. <!--用于指定需要复制的文件。${project.build.finalName}.jar指的是打包后的jar包文件。-->
  21. <include>${project.build.finalName}.jar</include>
  22. </resource>
  23. </resources>
  24. </configuration>
  25. </plugin>

默认情况下,该插件通过访问localhost:2375来连接本地docker,可以通过设置DOCKER_HOST 环境变量来连接docker.

  1. DOCKER_HOST=tcp://<host>:2375

2.使用Dockerfile文件

如果使用Dockerfile文件,必须指定dockerDirectory元素,那么 baseImage, maintainer, cmd and entryPoint这些元素也会被忽略。dockerDirectory元素所指定的内容将被复制到${project.build.directory}/docker下,resources元素则会复制除此之外的其它文件,例如项目jar文件。

  1. <!--docker-maven-plugin插件(带Dockerfile文件)-->
  2. <plugin>
  3. <groupId>com.spotify</groupId>
  4. <artifactId>docker-maven-plugin</artifactId>
  5. <version>0.4.13</version>
  6. <configuration>
  7. <imageName>${project.name}:${project.version}</imageName>
  8. <!--Dockerfile文件位置-->
  9. <dockerDirectory>docker</dockerDirectory>
  10. <resources>
  11. <resource>
  12. <targetPath>/</targetPath>
  13. <directory>${project.build.directory}</directory>
  14. <include>${project.build.finalName}.jar</include>
  15. </resource>
  16. </resources>
  17. </configuration>
  18. </plugin>

二、使用

创建镜像

  1. mvn clean package docker:build

推送镜像到Registry

  1. mvn clean package docker:build -DpushImage

推送指定tag的镜像到Registry

  1. mvn clean package docker:build -DpushImageTag

三、绑定Docker 命令到 Maven 各个阶段

不积跬步,无以至千里。不积小流,无以成江海!

IDEA连接Docker实现一键项目部署到Docker里面

Linux设置

1.开启端口号.

  1. #开放2375端口
  2. firewall-cmd --permanent --zone=public --add-port=2375/tcp
  3. # 查看端口打开情况
  4. firewall-cmd --permanent --zone=public --list-ports
  5. # 重新加载firewall防火墙
  6. firewall-cmd --reload

2.首先进入Docker的配置文件开发2375端口,这个端口是docker默认的端口,请不要改变他.

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

3. 在ExecStart=/usr/bin/dockerd后面加-H tcp://0.0.0.0:2375

  1. ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
  • 1

4.重新读取配置文件

  1. systemctl daemon-reload
  • 1

5.重启docker

  1. systemctl restart docker
  • 1

IDEA设置

1.启动一个普通的容器实例




2.把java项目打包部署到docker上面




现在开始制作容器

  1. 导入依赖
  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>com.capgemini</groupId>
  12. <artifactId>docker-demo</artifactId>
  13. <version>0.0.1-SNAPSHOT</version>
  14. <name>docker-demo</name>
  15. <description>Demo project for Spring Boot</description>
  16. <properties>
  17. <java.version>1.8</java.version>
  18. </properties>
  19. <dependencies>
  20. <dependency>
  21. <groupId>org.springframework.boot</groupId>
  22. <artifactId>spring-boot-starter</artifactId>
  23. </dependency>
  24. <dependency>
  25. <groupId>org.springframework.boot</groupId>
  26. <artifactId>spring-boot-starter-web</artifactId>
  27. </dependency>
  28. <dependency>
  29. <groupId>org.springframework.boot</groupId>
  30. <artifactId>spring-boot-starter-test</artifactId>
  31. <scope>test</scope>
  32. <exclusions>
  33. <exclusion>
  34. <groupId>org.junit.vintage</groupId>
  35. <artifactId>junit-vintage-engine</artifactId>
  36. </exclusion>
  37. </exclusions>
  38. </dependency>
  39. </dependencies>
  40. <build>
  41. <plugins>
  42. <plugin>
  43. <groupId>org.springframework.boot</groupId>
  44. <artifactId>spring-boot-maven-plugin</artifactId>
  45. </plugin>
  46. <plugin>
  47. <groupId>com.spotify</groupId>
  48. <artifactId>docker-maven-plugin</artifactId>
  49. <version>1.0.0</version>
  50. <configuration>
  51. <!-- 指定 Dockerfile 路径-->
  52. <dockerDirectory>src/main/docker</dockerDirectory>
  53. <resources>
  54. <resource>
  55. <targetPath>/</targetPath>
  56. <!--jar 包所在的路径 此处配置的 即对应 target 目录-->
  57. <directory>${project.build.directory}</directory>
  58. <!-- 需要包含的 jar包 ,这里对应的是 Dockerfile中添加的文件名 -->
  59. <include>${project.build.finalName}.jar</include>
  60. </resource>
  61. </resources>
  62. </configuration>
  63. </plugin>
  64. <plugin>
  65. <artifactId>maven-antrun-plugin</artifactId>
  66. <executions>
  67. <execution>
  68. <phase>package</phase>
  69. <configuration>
  70. <tasks>
  71. <copy todir="src/main/docker" file="target/${project.artifactId}-${project.version}.${project.packaging}"></copy>
  72. </tasks>
  73. </configuration>
  74. <goals>
  75. <goal>run</goal>
  76. </goals>
  77. </execution>
  78. </executions>
  79. </plugin>
  80. </plugins>
  81. </build>
  82. </project>
  1. 打包

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

  1. # 基于java镜像
  2. FROM java:8
  3. # linux上面得挂载点为 /tmp
  4. VOLUME /tmp
  5. # 添加一个jar为本项目得jar 第一个是打包得jar 第二个是别名
  6. ADD *.jar app.jar
  7. # 暴露得端口号 application.yml端口号一样
  8. EXPOSE 8989
  9. # 入口点 执行java jvm命令:加快随机数生产过程,运行这个jar包
  10. ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
  1. 在/src/main下创建Dockerfile文件(结构)
  2. 增加配置
  3. 运行


微服务部署 docker-compose的更多相关文章

  1. 架构师修炼之微服务部署 - Docker简介

    Docker简介 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windows 机器上,也可以实现虚拟化,容器是 ...

  2. docker微服务部署之:七、Rancher进行微服务扩容和缩容

    docker微服务部署之:六.Rancher管理部署微服务 Rancher有两个特色用起来很方便,那就是扩容和缩容. 一.扩容前的准备工作 为了能直观的查看效果,需要修改下demo_article项目 ...

  3. docker微服务部署之:六、Rancher管理部署微服务

    docker微服务部署之:五.利用DockerMaven插件自动构建镜像 一. 什么是Rancher Rancher是一个开源的企业级容器管理平台.通过Rancher,企业再也不必自己使用一系列的开源 ...

  4. docker微服务部署之:五、利用DockerMaven插件自动构建镜像

    docker微服务部署之:四.安装docker.docker中安装mysql和jdk1.8.手动构建镜像.部署项目 在上一篇文章中,我们是手动构建镜像,即: 4.1.2.5.1.2.6.1.2中的将d ...

  5. docker微服务部署之:四、安装docker、docker中安装mysql和jdk1.8、手动构建镜像、部署项目

    docker微服务部署之:三,搭建Zuul微服务项目 1.Centos7安装Docker 详见:Centos7安装Docker 2.Docker中安装jdk1.8 详见:使用Docker构建jdk1. ...

  6. docker微服务部署之:三,搭建Zuul微服务项目

    docker微服务部署之:二.搭建文章微服务项目 一.新增demo_eureka模块,并编写代码 右键demo_parent->new->Module->Maven,选择Module ...

  7. docker微服务部署之:二、搭建文章微服务项目

    docker微服务部署之:一,搭建Eureka微服务项目 一.新增demo_article模块,并编写代码 右键demo_parent->new->Module->Maven,选择M ...

  8. docker微服务部署之:一,搭建Eureka微服务项目

    先说明一下docker需要搭建的微服务的基本情况: 项目情况:一个demo_parent项目,下面三个子模块:demo_eureka(eureka服务).demo_article(文章服务).demo ...

  9. 微服务与Docker介绍

    什么是微服务 微服务应用的一个最大的优点是,它们往往比传统的应用程序更有效地利用计算资源.这是因为它们通过扩展组件来处理功能瓶颈问题.这样一来,开发人员只需要为额外的组件部署计算资源,而不需要部署一个 ...

  10. CI Weekly #3 | 关于微服务、Docker 实践与 DevOps 指南

    CI Weekly 围绕『 软件工程效率提升』 进行一系列技术内容分享,包括国内外持续集成.持续交付,持续部署.自动化测试. DevOps 等实践教程.工具与资源,以及一些工程师文化相关的程序员 Ti ...

随机推荐

  1. Realtime Data Processing at Facebook

    概要 这篇论文发表于2016年,主要是介绍Facebook内部的流式计算平台的设计与思考,对于流式计算的关键特性的实现选型上进行深度对比分析. 流式计算系统5个衡量指标 文中提到有5个重要的考量部分 ...

  2. 3D 世界的钥匙「GitHub 热点速览 v.22.08」

    有没有想过把身边的物件儿转成 3D 动画,在网页上实现一把?本期特推的项目 Three.js 就是帮你创建 3D 页面的知名开源项目,好玩的 3D 世界在向你招手.除了打开浏览器 3D 世界的钥匙外, ...

  3. 怎么说服领导,能让我用DDD架构肝项目?

    作者:小傅哥 博客:https://bugstack.cn 原文:https://mp.weixin.qq.com/s/ezd-6xkRiNfPH1lGwhLd8Q 沉淀.分享.成长,让自己和他人都能 ...

  4. BUUCTF-jarvisoj_level0

    因为最近正在学习pwn,所以一直在各种CTF平台刷题,(因为初学,目前刷的一下题目都是相较于入门) 下载附件丢到kali里面checksec检测一下, 有一个NX,然后放到IDA,直接shift+f1 ...

  5. 2022李宏毅作业hw1—新冠阳性人员数量预测。

    ​ 事前  : kaggle地址:ML2021Spring-hw1 | Kaggle 我的git地址: https://github.com/xiaolilaoli/lihongyi2022homew ...

  6. [Unity] 编辑器运行中动态编译执行C#代码

    (一)问题 之前写Lua时,修改完代码 reload 就可以热重载代码,调试起来十分方便(重构则十分痛苦). 现在使用 C# 做开发,目前还没找到比较方便地进行热重载的方式.只能退而求其次,在调试上找 ...

  7. 号称BI商业智能界的“四大天王”

    基于云部署的现代商业智能与数据分析平台(国内似乎只有应用上云,数据本地化的趋势)正在逐步占据主流市场.随着市场在易用性和增强分析(augmented analytics)的变革,数据与分析领导者正在逐 ...

  8. 【C#基础概念】虚方法virtual

    目录: 一.虚方法的概念 二.虚方法的特点 三.虚方法的作用 四.虚方法的声明 五.虚方法的执行 六.虚拟类的规则 一.虚方法的概念 在C#中,虚方法就是可以被子类重写的方法,如果子类重写了虚方法,则 ...

  9. Hive常用函数大全-字符串函数

    1.字符串长度函数:length(X)(返回字符串X的长度) select length('qwerty') from table --6 2.字符串反转函数:reverse(X)(返回字符串X反转的 ...

  10. 人工智能之深度学习-初始环境搭建(安装Anaconda3和TensorFlow2步骤详解)

    前言: 本篇文章主要讲解的是在学习人工智能之深度学习时所学到的知识和需要的环境配置(安装Anaconda3和TensorFlow2步骤详解),以及个人的心得体会,汇集成本篇文章,作为自己深度学习的总结 ...