题目信息量很大,蕴含了以下信息:

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容器相关推荐

  1. Myeclipse下使用Maven搭建spring boot项目(第二篇)

    现在需要搭建spring boot框架,并实现一个HelloWorld的项目,让程序真正运行起来. 一.在pom.xml中引入spring-boot-start-parent,spring官方的叫st ...

  2. 安装本地Maven和Spring Boot项目流程

    一.安装本地Maven 1.下载地址 https://maven.apache.org/download.cgi. 2.点击 3.点击所画的进行下载解压 二.配置系统环境变量 1.新建一个maven的 ...

  3. Spring Boot项目打包部署

    一.Spring Boot项目打成jar包 1. 检查pom.xml中的<packaging></packaging>中的配置内容是否是jar 2. 导入Spring Boot ...

  4. IDEA 2020 配置 Maven 创建 Spring Boot 项目

    文章目录 Maven 安装配置 Maven 配置 Maven 仓库(仓库路径.阿里云下载) IDEA 配置 Maven IDEA 创建 springboot 项目 在新电脑上配环境总是要不停的百度,简 ...

  5. idea添加maven libraries_使用IntelliJ IDEA创建一个Maven的Spring Boot项目

    关于maven的安装和配置参考: Maven 3.6.1的配置及验证 关于IntelliJ IDEA安装配置参考: IntelliJ IDEA的安装和配置 1.打开IntelliJ IDEA,选择&q ...

  6. Idea利用maven打包spring boot项目

    1.pom.xml文件中增加以下配置 <build><plugins><plugin><groupId>org.springframework.boot ...

  7. Spring Boot + Java爬虫 + 部署到Linux (三、Java爬虫使用代理,模拟登录,保存cookie)

    很多网站对资源都有一定的限制.如果不登录,不是网站的登录用户(会员)访问的话,一些资源会访问不到.这对我们爬虫是十分不利的.而绝大多数网站都是通过登录之后,向浏览器设置cookie,达到验证的功能. ...

  8. Maven 如何打包 Spring Boot 项目

    如果你使用的是 Maven 开发 Spring Boot 项目的话,在你打包可执行文件的时候,你首先需要导入 spring-boot-maven-plugin 插件. 请查看下面的代码: <bu ...

  9. 第2章 第一个Spring Boot项目

    开发工具选择 工欲善其事必先利其器,我们进行Java项目开发,选择一个好的集成开发工具(IDE)对提高我们的开发调试效率有非常大的帮助.这里我们选择大名鼎鼎的IDEA ,它全称 IntelliJ ID ...

最新文章

  1. BZOJ-1901 Zju2112 Dynamic Rankings 函数式线段树 套 树状数组+离线处理
  2. 确保已在无线网络上启用dhcp服务器,WiFi无线网络提示未启用DHCP无法上网的解决方法教程[多图]...
  3. 设计灵感图片,到哪里搜索!看这里!
  4. 三菱fx5u modbus tcp fb块用法_三菱PLC型号怎么选?四大方面告诉你三菱FX3U和5U的最大区别!...
  5. linux虚拟文件系统(六)-文件关闭操作分析
  6. cad命令栏还原默认_CAD十五个必学的命令 掌握后能走天下了
  7. OpenWrt/Wifidog本地化解决方案
  8. 脸上为什么会长黄褐斑?
  9. 交互设计人员什么阶段介入
  10. Java高级:字节跳动历年校招Java面试真题解析
  11. 查看Android应用内存的方法,Android获取App内存使用情况的方法
  12. WinRAR 7z压缩包处理溢出分析和利用(转)
  13. 网易邮箱VIP注册页面可部分绕过Windows安全中心的验证
  14. 曾仕强《中国式管理-人际关系学》笔记 下
  15. 第16天-树莓派初入门(一)—点亮-2016年9月26日 21:33:24
  16. html表格边框默认值,CSS 表格属性
  17. Servlet创建时机
  18. Mindmanager2012安装图解
  19. 装修报价 php开源,系统发生错误
  20. python 入门知识点整理

热门文章

  1. Salesforce URL加密encrypt与解密decrypt处理
  2. 心理学博士vs计算机博士,UCLA心理学博士排名,地表最客观干货
  3. 求职简历应该怎么填写受HR喜爱?HR喜欢邮箱格式应该怎么写?
  4. Py之skimage:Python库之skimage的简介、安装、使用方法之详细攻略
  5. 西藏2021卫生副高考试成绩查询,中国卫生人才网_西藏2021卫生资格成绩查询入口...
  6. PyQT5一起学做图书管理系统(6)添加/删除书籍
  7. 一文讲透TCP/IP协议 | 图解+秒懂+史上最全
  8. PageHelper的简单使用
  9. LinuxTomcat安装部署
  10. 变形金刚4绝迹重生迅雷高清完整版下载