当前位置: 首页 > 编程日记 > 正文

IDEA集成Docker插件实现一键自动打包部署微服务项目

一. 前言

大家在自己玩微服务项目的时候,动辄十几个服务,每次修改逐一部署繁琐不说也会浪费越来越多时间,所以本篇整理通过一次性配置实现一键部署微服务,实现真正所谓的一劳永逸。

二. 配置服务器

1. Docker安装

服务器需要安装Docker,如未安装参考这篇文章安装即可 Docker实战 | 第一篇:Linux 安装 Docker

2. Docker开启远程访问

vim /usr/lib/systemd/system/docker.service 
# 在ExecStart=/usr/bin/dockerd追加 -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock

 

# 重新启动

systemctl daemon-reload 
systemctl restart docker


# 开放2375端口

 firewall-cmd --zone=public --add-port=2375/tcp --permanent firewall-cmd --reload

3. 远程访问测试

# 查看端口监听是否开启 
netstat -nlpt 
# curl测试是否生效 
curl http://127.0.0.1:2375/info

二. 配置IDEA

IDEA安装Docker插件,打开插件市场(File->Settings->Plugins)

安装Docker插件后,配置Docker远程链接

三. Maven插件构建Docker镜像

1. Maven构建Docker镜像方式

IDEA中基于maven构建docker镜像有两种方式,分别docker-maven-plugin和dockerfile-maven,都是出自Spotify公司之手。

进入项目 https://github.com/spotify/docker-maven-plugin

其中有个很显眼的提示:

docker-maven-plugin可以不用Dockerfile,纯粹通过pom.xml的配置自动生成Dockerfile来构建Docker镜像。

dockerfile-maven依赖Dockerfile文件,需放到项目根目录下,也就是和pom.xml同级。

显然官方推荐的是 dockerfile-maven 这种依赖Dockerfile的方式,但是在部署 youlai-mall 项目使用 docker-maven-plugin 只要配置好 pom.xml 便无需修改外置配置了,所以更为方便省心,下面就这两种方式如何实现镜像构造进行逐一说明。其中统一以 youlai-mall 的 youlai-gateway 网关模块进行构建。

2. docker-maven-plugin方式构造镜像

(1). 配置pom.xml

<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.2.2</version><executions><!--执行mvn package,即执行 mvn clean package docker:build--><execution><id>build-image</id><phase>package</phase><goals><goal>build</goal></goals></execution></executions><configuration><!-- 镜像名称 --><imageName>${project.artifactId}</imageName><!-- 指定标签 --><imageTags><imageTag>latest</imageTag></imageTags><!-- 基础镜像--><baseImage>openjdk:8-jdk-alpine</baseImage><!-- 切换到容器工作目录--><workdir>/ROOT</workdir><entryPoint>["java","-jar","${project.build.finalName}.jar"]</entryPoint><!-- 指定远程 Docker API地址  --><dockerHost>http://192.168.10.12:2375</dockerHost><!-- 复制 jar包到docker容器指定目录--><resources><resource><targetPath>/ROOT</targetPath><!-- 用于指定需要复制的根目录,${project.build.directory}表示target目录 --><directory>${project.build.directory}</directory><!-- 用于指定需要复制的文件,${project.build.finalName}.jar就是打包后的target目录下的jar包名称 --><include>${project.build.finalName}.jar</include></resource></resources></configuration></plugin>


(2). maven打包制作镜像

项目是聚合工程,先全局执行 mvn install -DskipTests=true 完成安装模块jar包到本地仓库,不然模块之间的依赖会报错。

切到文件夹 youlai-gateway 执行项目的打包 mvn package -DskipTests=true, 在 package 生命周期完成镜像的生AA

(3). idea创建和启动容器

(4). 容器启动测试

3. dockerfile-maven方式构造镜像

(1). 创建Dockerfile

按照dockerfile-maven插件的使用说明,创建Dockerfile放置到项目根目录下(pom.xml同级)

FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG JAR_FILE
ADD target/${JAR_FILE} /app.jar
EXPOSE 9999
ENTRYPOINT ["java","-jar","/app.jar"]

Dockerfile参考Spring官方,参考链接 https://spring.io/guides/gs/spring-boot-docker/

指令说明
FROM openjdk:8-jdk-alpine基础镜像JDK,无则自动拉取镜像
VOLUME /tmp挂载容器/tmp目录至宿主机,SpringBoot使用内置Tomcat,默认工作目录/tmp;VOLUME不能指定挂载目录,默认挂载到宿主机/var/lib/docker目录。
ARG JAR_FILE变量声明,对应pom.xml的JAR_FILE标签的变量
ADD target/${JAR_FILE} /app.jar复制jar包至容器并重命名为app.jar
EXPOSE 9999声明容器暴露端口,仅仅声明无实际作用
ENTRYPOINT ["java","-jar","/app.jar"]设定容器启动时第一个运行的命令及其参数

(2). 配置pom.xml

<build><plugins><plugin><groupId>com.spotify</groupId><artifactId>dockerfile-maven-plugin</artifactId><version>1.4.13</version><executions><execution><id>default</id><goals><goal>build</goal><goal>push</goal></goals></execution></executions><configuration><repository>${project.artifactId}</repository><tag>latest</tag><buildArgs><JAR_FILE>${project.build.finalName}.jar</JAR_FILE></buildArgs></configuration></plugin></plugins>
</build>

(3). 设置环境变量

dockerfile-maven插件默认的DOCKER_HOST=localhost:2375,如果需要构建镜像到服务器,需要修改DOCKER_HOST系统环境变量

如果DOCKER_HOST不固定的也可以设置临时变量方便灵活切换
set DOCKER_HOST=tcp://192.168.1.111:2375

(4). idea创建和启动容器

和 docker-maven-plugin 一致,请参考上文。

四. 结语

本文旨在使用IDEA搭配Docker插件快速构建Docker镜像实现一键部署SpringBoot项目,其中讲到两种方式,虽然 docker-maven-plugin 已被官方抛弃,但是在我这里部署 youlai-mall 使用优于 dockerfile-maven , 因为 dockerfile-maven 除了配置 pom.xml 、编写 DockerFile 文件之外还要配置系统环境变量。如果你的服务器不只一台呢,环境变量如何处理,切来切去吗?所以这两种插件如何选择,真要看自己的使用场景,不能盲目的人云亦云。尤其会在下一篇介绍如何避免Docker远程2375端口暴露被挖矿做改动时更能体现 docker-maven-plugin的优势。

相关文章:

PHP的学习--PHP的引用

引用是什么 在 PHP 中引用意味着用不同的名字访问同一个变量内容。这并不像 C 的指针&#xff0c;替代的是&#xff0c;引用是符号表别名。注意在 PHP 中&#xff0c;变量名和变量内容是不一样的&#xff0c;因此同样的内容可以有不同的名字。最接近的比喻是 Unix 的文件名和文…

谈一谈浏览器解析CSS选择器的过程【前端每日一题-6】

谈一谈浏览器解析CSS选择器的过程&#xff1f; 这是一道发散题&#xff0c;可以根据自己的理解自行解答。 在开始前&#xff0c;我们必须了解一个真相&#xff1a;为什么排版引擎解析 CSS 选择器时一定要从右往左解析&#xff1f; 简单的来说&#xff1a;浏览器从右到左进行查找…

LTE: MIB和SIB,小区选择和重选规则

LTE 中MIB/SIB内容可以参考&#xff1a;https://blog.csdn.net/wowricky/article/details/51348613 MIB/SIB的详细内容参考下面两张图 MIB,SIB1,SIB2 可以关注下小区选择的参数&#xff0c;用特殊颜色表示 36.304 - 5.2.3.2 Cell Selection Criterion S准则&#xff0c;需要…

linux 生成dll文件,Linux和Windows平台 动态库.so和.dll文件的生成

Linux动态库的生成1、 纯cpp文件打包动态库将所有cpp文件和所需要的头文件放在同一文件夹&#xff0c;然后执行下面命令gcc -shared - fpic *.c -o xxx.so&#xff1b;g -stdc17 - fpic *.cpp -o xxx.so&#xff1b;[C17标准&#xff0c;需要高版本gcc&#xff0c;本人采用gcc …

Form表单提交前进行JS验证的3种方式

1. 提交按钮的onclick事件中验证 <script type"text/javascript"> function check(form) { return true; }</script> <form> <input type"submit" name"submit1" value"登陆" οnc…

2022-2028年中国椎间孔镜行业市场研究及前瞻分析报告

【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新&#xff08;交付时间约3个工作日&#xff09; 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了中国椎间孔镜行业市场行业相关概述、中国椎间孔镜行业市场行业运行环境、分析了中国椎间孔镜行…

mysql 错误:1166 解决办法

原因&#xff1a;检查字段里面是不是有空格&#xff0c;去掉就可以了转载于:https://www.cnblogs.com/zhizhan/p/3950453.html

优先级队列(小顶堆)的dijkstra算法

php实现迪杰斯特拉算法&#xff0c;并由小顶堆优化 1 <?php2 3 class DEdge4 {5 public $nextIndex, $length;6 7 public function __construct($nextIndex, $length)8 {9 $this->nextIndex $nextIndex;10 $this->length $length;11 …

室内设计木地板材质合集包 Arroway – Design Craft Vol.4

室内设计木地板材质合集包 Arroway – Design Craft Vol.4 室内设计木地板材质合集包 Arroway – Design Craft Vol.4 阿洛维——设计工艺第四卷 大小&#xff1a;20G 信息: 云桥网络 平台获取素材&#xff01; 36种单板纹理 纹理包括漫反射、法线、凹凸、反射率、环境遮挡…

linux下有关phy的命令,linux – 如何为Debian安装b43-lpphy-installer?

b43-lpphy-installer是Ubuntu的包的名称,而不是Debian的包.你可以在jessie(Debian 8)中使用命令安装它&#xff1a;sudo apt-get install firmware-b43-installer通过内核版本,您似乎正在使用Debian 8.要了解有关debian软件包的详细信息,您可以按名称或文件搜索软件包&#xff…

Idea SpringBoot 基于 Docker容器环境进行远程调试

远程服务环境要求 对启动的jar服务命令进行修改&#xff0c;改成远程调试模式启动 eg: java -jar -agentlib:jdwptransportdt_socket,servery,suspendn,address18761 app.jar此命令特别之处是 关注监听端口&#xff1a;address18761&#xff0c;这端口号随性定义。 -agentl…

[转载]python optionparser1

原文地址&#xff1a;python optionparser1作者&#xff1a;afu7Python 有两个内建的模块用于处理命令行参数&#xff1a; 一个是 getopt&#xff0c;《Deep in python》一书中也有提到&#xff0c;只能简单处理 命令行参数&#xff1b; 另一个是 optparse&#xff0c;它功能强…

回溯法实现正则匹配判断

*&#xff1a;匹配任意个字符 &#xff1f;&#xff1a;匹配至多1个字符 <?phpclass MNode {public $strIndex;public $patIndex;public $leftMatch null; //精确匹配public $midMatch null; //模式匹配public $rightMatch null; //不能匹配public function __con…

Blender中的Python脚本介绍学习教程

Blender中的Python脚本介绍学习教程 MP4 |视频:h264&#xff0c;1280720 |音频:AAC&#xff0c;48000 Hz 语言&#xff1a;英语中英文字幕&#xff08;根据原英文字幕机译更准确&#xff09;|大小解压后:1.63 GB |时长:2h 39m 你会学到什么 云桥网络 平台获取教程&#xf…

linux的veth导致网络不通,linux的veth对网桥通信实验

本实验脚本如下:#!/bin/bash#网桥名称bridgebr0#网桥接入端ipip1192.168.10.1ip2192.168.10.2#veth名称tap1tap1tap2tap2#创建网络命名空间ip netns add ns1ip netns add ns2#创建并启用网桥br0,且关闭stpip link add $bridge type bridgeip link set $bridge type bridge stp_…

图片和文件上传的两款插件

订定转载于:https://www.cnblogs.com/mc67/p/4818276.html

2022-2028年中国装配式装修行业市场研究及前瞻分析报告

【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新&#xff08;交付时间约3个工作日&#xff09; 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了中国装配式装修行业市场行业相关概述、中国装配式装修行业市场行业运行环境、分析了中国装配式…

使用 acl 库编写发送邮件的客户端程序

2019独角兽企业重金招聘Python工程师标准>>> 邮件做为最早和最广的互联应网用之一&#xff0c;已经与人们的生活息息相关。我们虽然经常使用 Outlook Express/Outlook/Foxmail 等邮件客户端发送邮件&#xff0c;但并不关心发送过程的细节。如果您是一名程序员&#…

Unreal Engine+Houdini创造程序性游戏场景视频教程

Unreal EngineHoudini创造程序性游戏场景视频教程 大小解压后&#xff1a;27.4G 持续时间14小时30分 包括项目文件 1920X1080 高清视频 程序游戏环境——虚幻引擎和Houdini 信息: 云桥网络 平台获取教程 导言: 欢迎来到虚幻引擎4和Houdini的程序游戏环境课程&#xff0…

清理内存clear

清理内存clear&#xff1a; package com.android.cleanprocesstool;import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import a…

linux mv 环境变量,linux环境变量,cp,mv命令,more,less,cat,tail,head,的使用...

linux环境变量&#xff0c;cp&#xff0c;mv命令&#xff0c;more&#xff0c;less&#xff0c;cat&#xff0c;tail&#xff0c;head&#xff0c;的使用[email protected] ~]# cp /usr/bin/ls /tmp/[[email protected] ~]# PATH$PATH:/tmp/ path的使用/usr/local/sbin…

进入Docker容器命令

进入Docker容器命令 docker执行命令: docker exec -it [容器ID或者容器名称] /bin/bash 如果出现下述问题&#xff1a; OCI runtime exec failed: exec failed: container_linux.go:344: starting container process caused "exec: \"/bin/bash\": stat /b…

dmalloc 原文 翻译整理

http://blog.csdn.net/cardinal_508/article/details/5553387 L13 从快速入门开始&#xff08;Quickstart&#xff09; 这个库是一个文件中所有简化用法中最常见的&#xff1a;FTP下载它&#xff0c;编译它&#xff08;-03&#xff09;&#xff0c;并连接到其他程序。 全部编译…

视频分辨率无损放大软件 Topaz Video Enhance AI 2.3.0

视频分辨率无损放大软件 Topaz Video Enhance AI 2.3.0 Topaz Video Enhance AI是一款非常好用的视频分辨率放大软件&#xff0c;用户可以通过这款软件将视频的分辨率进行自定义调节&#xff0c;最高能够将其放大至8K分辨率&#xff0c;并提供真实的细节和动作一致性&#xff…

linux 6.8 dns,CentOS6.8下安装DNS服务器

CentOS6.8下安装DNS服务器1、安装DNS服务器组件安装bind# yum install bind bind-libs bind-utils bind-chroot2、修改主配置文件/etc/named.conf需要修改的如下(带红色标注)&#xff1a;# vi /etc/named.confoptions {listen-on port 53{ any; };//listen-on-v6 port 53 { ::1…

delphi 10 seattle 中 解决IOS 9 限制使用HTTP 服务问题

IOS 9 于17号早上正式开始推送&#xff0c;早上起来立马安装&#xff0c;这次升级包只有1G&#xff0c; 安装空间也大大降低&#xff08;想起IOS 8 升级时&#xff0c;几乎把手机里面的东西删光了&#xff0c;满眼都是泪&#xff09;。 虽然安装后&#xff0c;网上几乎是铺天盖…

2022-2028年中国装备制造产业深度分析及发展规划咨询建议报告(全卷)

【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新&#xff08;交付时间约3个工作日&#xff09; 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了中国装备制造行业市场行业相关概述、中国装备制造行业市场行业运行环境、分析了中国装备制造行…

安装flex4 plug-in插件的时候遇到老是在起始处安装不起

2019独角兽企业重金招聘Python工程师标准>>> 安装flex4 plug-in插件的时候遇到老是在起始处安装不起 解决方案&#xff1a;1、有可能你安装的目录有中文字符 2、你放安装文件的目录有中文字符 3、关闭360安全卫士和防火墙 转载于:https://my.oschina.net/u/1159401/…

Python教学课程分享10-异常处理结构

10.1 异常概念与常见表现形式 异常是一个事件&#xff0c;这个事件会在程序执行过程中发生&#xff0c;影响程序的正常进行。一般情况下&#xff0c;在Python无法正常进行程序时就会发生异常。异常是Python的对象&#xff0c;它表示一个错误&#xff0c;在Python脚本在发生异常…

24组8K真实路面材质贴图素材 VizPeople – Pavement Textures V1

24组8K真实路面材质贴图素材 VizPeople – Pavement Textures V1 24组8K真实路面材质贴图素材 VizPeople – Pavement Textures V1 大小解压后&#xff1a;5.98G 我们的第一个纹理收藏&#xff01;24个漂亮的无缝着色器&#xff0c;专为图形设计师和建筑可视化设计。现代和经…