在WIN7中用maven将spring boot项目远程部署到Linux虚拟机的docker容器
题目信息量很大,蕴含了以下信息:
1、当前开发环境是WIN7
2、docker容器在Linux虚拟机中
3、在WIN7里将直接将spring boot项目发布到该远程docker
4、发布工具是maven
据说docker最好部署在Linux。部署在windows也可以的,但要求操作系统是WIN10或以上。我机器老旧,只有WIN7,并且用Linux逼格比较高,就索性创建了一个Linux的虚拟机,然后安装docker于其上,并学习摸索了一轮,见拙作:《vmware10中安装配置docker和redis及外部访问》
今天终于成功在WIN7上将一个spring boot项目直接发布到了虚拟机的docker中。网上许多文章,说的都是在Linux上直接进行部署,极少有像我这种情况,因此需要一步一个坑地负重前行。以下是填坑经过:
一、spring boot项目的设置
如果想将一个spring boot项目可以发布成docker镜像,需要做一些额外的工作。我的开发工具是intellij idea2019.2。
1.1、新建一个spring boot项目,具体不表。
为简单起见,只来一句“Hello World”:
package com.monkey.demo1;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;@Controller
public class HelloWorldController {@ResponseBody@RequestMapping(value = "/hi", method = RequestMethod.GET)public String getTfs(){return "Hello World!";}
}
1.2、修改pom.xml
主要是加入一些与docker 有关的信息。一个是Docker maven plugin,应该是用于maven发布;还有一些就是与发布镜像时,对应哪个编译好的jar文件,以及镜像文件怎么命名。第1.3中说的Dockerfile中会用到其中的一些信息。
<?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.1.8.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.monkey</groupId><artifactId>demo1</artifactId><version>0.0.1-SNAPSHOT</version><name>demo1</name><description>Demo project for Spring Boot</description><!-- 添加;docker命名前缀? --><properties><java.version>1.8</java.version><docker.image.prefix>springboot</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></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin><!-- 添加;Docker maven plugin --><plugin><groupId>com.spotify</groupId><artifactId>docker-maven-plugin</artifactId><version>1.0.0</version><configuration><imageName>${docker.image.prefix}/${project.artifactId}</imageName><dockerDirectory>src/main/docker</dockerDirectory><resources><resource><targetPath>/</targetPath><directory>${project.build.directory}</directory><include>${project.build.finalName}.jar</include></resource></resources></configuration></plugin><!-- Docker maven plugin --></plugins></build>
</project>
1.3、Dockerfile
在src/main下新建一个文件夹 docker,然后新建一个文件Dockerfile,如图
Dockerfile 文件用来说明如何来构建镜像。本文实例如下:
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ADD demo1-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
其中,demo1-0.0.1-SNAPSHOT.jar是我这个spring boot项目编译后的jar文件。这个名字,跟pom.xml有关(见1.2)。其余信息都是照抄的,里面的路径指的是docker所在Linux里的目录。
VOLUME 指定了临时文件目录为/tmp。其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp。改步骤是可选的,如果涉及到文件系统的应用就很有必要了。/tmp目录用来持久化到 Docker 数据文件夹,因为 Spring Boot 使用的内嵌 Tomcat 容器默认使用/tmp作为工作目录
项目的 jar 文件作为 “app.jar” 添加到容器的
ENTRYPOINT 执行项目 app.jar。为了缩短 Tomcat 启动时间,添加一个系统属性指向 “/dev/urandom” 作为 Entropy Source
二、docker所在的Linux服务器的设置
Linux这里的设置,主要是要开放docker供外部访问。因为docker看上默认是只有本机才能访问的,要启用对外API。这里涉及到一些安全性,有些文章说要什么证书,来开放https。这个问题我们先不考虑了。另外,我按照各种教程说的,老老实实地在Linux里安装了maven,现在来看,由于我是远程发布,并非在LInux本机发布,应该是不需要的。但我不大确定。至于JDK,安装Linux虚拟机的操作系统CentOS7的时候就默认安装了,如果你的Linux没有安装JDK,那这个应该装上。
2.1、安装JDK
如果已经安装,忽略
2.2、开放docker的远程API
2.2.1、修改docker的配置文件
sudo vi /usr/lib/systemd/system/docker.service
注释原来的ExecStart,修改
#ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
IP地址就写4个0,别改成自己的地址。至于后面的unix做什么用,暂时也不清楚,照抄可也。保存退出以后,重启docker。
sudo systemctl daemon-reload
sudo systemctl restart docker
这时候,在Linux本机的浏览器中,输入地址:http://127.0.0.1:2375/version,应该能看到docker的信息。
2.2.2、开放2375端口
但在外部却无法访问,可能是2375这个端口没有开放。为简单起见,我们姑且简单粗暴地关闭防火墙:
sudo firewall-cmd --state
sudo systemctl stop firewalld.service
sudo firewall-cmd --state
这时候,在外面的WIN7浏览器中,输入虚拟机地址,可以看到docker信息:
至此,虚拟机的docker已经准备就绪,可以迎接外部的云部署了。docker欢迎您。
三、WIN7的设置
WIN7下采用maven,直接将项目发布到虚拟机的docker的话,需要相应做一些衔接工作:建立名叫DOCKER_HOST
的环境变量,指向docker的tcp地址。"DOCKER_HOST"这个名字不是随便起的,应该是docker for maven钦定的。
四、发布
好了,现在可以发布了。
WIN7中,命令行方式下,进入我们这个spring boot项目根目录,运行命令:
E:\java\test\demo1>mvn clean package docker:build -D skipTests
然后可以拿一根甘蔗,坐在电脑旁,一边啃一边看进度。过程中需要下载一些什么包,我这次是70M左右,等了有好几分钟。
五、运行
然后我们到Linux中查看我们的胜利果实
sudo docker images
over that!看,它就在那!
运行一下吧:
sudo docker run --name springboot-demo1 -p 8088:8080 springboot/demo1
如果报错,扯什么iptables、wait之类,就重启一下docker
当成功运行这个镜像以后,终于可以看到这个看似平平无奇,实则迈出坚实一大步的结果:
参考文章:
使用docker-maven-plugin插件将项目编译为docker镜像到远程linux服务器
用 Docker 构建、运行、发布一个 Spring Boot 应用
vmware10中安装配置docker和redis及外部访问
在WIN7中用maven将spring boot项目远程部署到Linux虚拟机的docker容器相关推荐
- Myeclipse下使用Maven搭建spring boot项目(第二篇)
现在需要搭建spring boot框架,并实现一个HelloWorld的项目,让程序真正运行起来. 一.在pom.xml中引入spring-boot-start-parent,spring官方的叫st ...
- 安装本地Maven和Spring Boot项目流程
一.安装本地Maven 1.下载地址 https://maven.apache.org/download.cgi. 2.点击 3.点击所画的进行下载解压 二.配置系统环境变量 1.新建一个maven的 ...
- Spring Boot项目打包部署
一.Spring Boot项目打成jar包 1. 检查pom.xml中的<packaging></packaging>中的配置内容是否是jar 2. 导入Spring Boot ...
- IDEA 2020 配置 Maven 创建 Spring Boot 项目
文章目录 Maven 安装配置 Maven 配置 Maven 仓库(仓库路径.阿里云下载) IDEA 配置 Maven IDEA 创建 springboot 项目 在新电脑上配环境总是要不停的百度,简 ...
- idea添加maven libraries_使用IntelliJ IDEA创建一个Maven的Spring Boot项目
关于maven的安装和配置参考: Maven 3.6.1的配置及验证 关于IntelliJ IDEA安装配置参考: IntelliJ IDEA的安装和配置 1.打开IntelliJ IDEA,选择&q ...
- Idea利用maven打包spring boot项目
1.pom.xml文件中增加以下配置 <build><plugins><plugin><groupId>org.springframework.boot ...
- Spring Boot + Java爬虫 + 部署到Linux (三、Java爬虫使用代理,模拟登录,保存cookie)
很多网站对资源都有一定的限制.如果不登录,不是网站的登录用户(会员)访问的话,一些资源会访问不到.这对我们爬虫是十分不利的.而绝大多数网站都是通过登录之后,向浏览器设置cookie,达到验证的功能. ...
- Maven 如何打包 Spring Boot 项目
如果你使用的是 Maven 开发 Spring Boot 项目的话,在你打包可执行文件的时候,你首先需要导入 spring-boot-maven-plugin 插件. 请查看下面的代码: <bu ...
- 第2章 第一个Spring Boot项目
开发工具选择 工欲善其事必先利其器,我们进行Java项目开发,选择一个好的集成开发工具(IDE)对提高我们的开发调试效率有非常大的帮助.这里我们选择大名鼎鼎的IDEA ,它全称 IntelliJ ID ...
最新文章
- BZOJ-1901 Zju2112 Dynamic Rankings 函数式线段树 套 树状数组+离线处理
- 确保已在无线网络上启用dhcp服务器,WiFi无线网络提示未启用DHCP无法上网的解决方法教程[多图]...
- 设计灵感图片,到哪里搜索!看这里!
- 三菱fx5u modbus tcp fb块用法_三菱PLC型号怎么选?四大方面告诉你三菱FX3U和5U的最大区别!...
- linux虚拟文件系统(六)-文件关闭操作分析
- cad命令栏还原默认_CAD十五个必学的命令 掌握后能走天下了
- OpenWrt/Wifidog本地化解决方案
- 脸上为什么会长黄褐斑?
- 交互设计人员什么阶段介入
- Java高级:字节跳动历年校招Java面试真题解析
- 查看Android应用内存的方法,Android获取App内存使用情况的方法
- WinRAR 7z压缩包处理溢出分析和利用(转)
- 网易邮箱VIP注册页面可部分绕过Windows安全中心的验证
- 曾仕强《中国式管理-人际关系学》笔记 下
- 第16天-树莓派初入门(一)—点亮-2016年9月26日 21:33:24
- html表格边框默认值,CSS 表格属性
- Servlet创建时机
- Mindmanager2012安装图解
- 装修报价 php开源,系统发生错误
- python 入门知识点整理
热门文章
- Salesforce URL加密encrypt与解密decrypt处理
- 心理学博士vs计算机博士,UCLA心理学博士排名,地表最客观干货
- 求职简历应该怎么填写受HR喜爱?HR喜欢邮箱格式应该怎么写?
- Py之skimage:Python库之skimage的简介、安装、使用方法之详细攻略
- 西藏2021卫生副高考试成绩查询,中国卫生人才网_西藏2021卫生资格成绩查询入口...
- PyQT5一起学做图书管理系统(6)添加/删除书籍
- 一文讲透TCP/IP协议 | 图解+秒懂+史上最全
- PageHelper的简单使用
- LinuxTomcat安装部署
- 变形金刚4绝迹重生迅雷高清完整版下载