开始前的准备工作

拥有一台云服务器,我的是腾讯云服务器(CentOS7)

腾讯云服务器安装Docker,我的版本是Docker 19.03.9,关于安装和配置镜像加速器可以查阅我的另一篇博文:https://www.cnblogs.com/andrew3/p/12941903.html,其中有详细的讲解

Windows上有安装IDEA

正式开始工作

第一步:配置Docker,开启远程访问(注:仅供学习参考,实际生产环境万万不可,会产生很大的安全风险),默认端口是2375,也可以修改为其他端口

1、修改/lib/systemd/system/docker.service文件

vim /lib/systemd/system/docker.service

ExecStart后面追加 -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock

修改完记得写保存退出命令 :wq

2、重新加载配置文件,重启docker,使得刚才的配置生效

#重新加载配置文件
systemctl daemon-reload
#重启docker服务
systemctl restart docker

3、使用curl命令检查是否开启

#curl下载docker的服务信息
curl http://127.0.0.1:2375/info

如果有返回说明,就证明开启成功了,可以看到我的Docker版本,镜像加速器地址等其他信息,但是这时候远程可能依然访问不了

4、配置腾讯云安全组规则,入站规则中开放2375端口,使得可以远程访问(阿里云都是一样)

最后点完成就OK了

5、检查端口是否可以远程访问,在本地浏览器输入:http://服务器IP地址:2375/info

第二步:对项目进行配置,连接远程docker

1、安装Docker插件,去Plugins搜索Docker,然后直接安装就行了,如果,这是我已经安装过的,安装完成后重启IDEA,就有docker插件了

2、配置连接远程docker,打开Docker插件,新建连接,在Engine API URL处输入服务器IP地址:2375,然后,不出意外,下方都会出现Connection successful,这样连接远程服务器的Docker就成功了

3、编辑项目pom.xml文件,在Spring Boot项目中添加docker-maven-plugin插件

<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<!--将插件绑定在某个phase执行-->
<executions>
<execution>
<id>build-image</id>
<!--将插件绑定在package这个phase上。也就是说,用户只需执行mvn package ,就会自动执行mvn docker:build-->
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
<configuration>
<!--指定生成的镜像名-->
<imageName>wbb/${project.artifactId}</imageName>
<!--指定标签-->
<imageTags>
<imageTag>latest</imageTag>
</imageTags>
<!-- 指定 Dockerfile 路径 ${project.basedir}:项目根路径下-->
<dockerDirectory>${project.basedir}</dockerDirectory>
<!--指定远程 docker api地址-->
<dockerHost>http://134.175.236.221:2375</dockerHost>
<!-- 这里是复制 jar 包到 docker 容器指定目录配置 -->
<resources>
<resource>
<targetPath>/</targetPath>
<!--jar 包所在的路径 此处配置的 即对应 target 目录-->
<directory>${project.build.directory}</directory>
<!-- 需要包含的 jar包 ,这里对应的是 Dockerfile中添加的文件名 -->
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
<!-- 以下两行是为了docker push到DockerHub使用的。 -->
<!--<serverId>docker-hub</serverId>-->
<!--<registryUrl>https://index.docker.io/v1</registryUrl>-->
</configuration>
</plugin>

4、在项目根目录下创建Dockerfile文件

Dockerfile文件内容

Dockerfile保留字的解析可以查阅我的另一篇博文:https://www.cnblogs.com/andrew3/p/13033061.html,里面有常用保留字的详细解析,不过没有实例,正好可以这个Dockerfile文件进行对照理解

这个Dockerfile文件的内容大概是:

第一行:当前要创建的镜像是基于java:8这个镜像的,也就是JDK8,也就是基本的Java运行开发环境肯定要有,这个也可以提前docker pull

第二行:在构建的时候把target目录下的jar包添加到镜像中,并改名为app.jar

第三行:镜像对外开放的端口是8888,这个在后面进行端口映射的时候还要用,一定要记住,当然,没记住,也可以使用docker history命令去看

第四行:启动镜像实例容器时会自动执行:java -jar /app.jar命令,也就是启动容器时,就启动了项目,而且不会被启动容器时添加的命令参数覆盖

另外其他没指定的参数,就是默认的,比如登录容器时默认的路径是根目录

5、打包项目,同时会自动构建镜像,点击右侧的Maven Projects,然后双击package

看到如果的信息就表示构建成功了,现在就可以去服务器查看构建的容器了

第三步:启动镜像实例容器,远程访问项目,接下来的步骤可以在IDEA中直接进行,也可以在服务器上进行,为了更加熟悉docker命令,我就在服务器端演示了

关于以下用到的docker命令可以查看我的其他两篇博文:https://www.cnblogs.com/andrew3/p/12943406.html      https://www.cnblogs.com/andrew3/p/12944452.html,里面有详细的docker镜像命令和容器命令的解释

1、查看所有镜像:docker images

如图所示,刚刚构建的镜像wbb/shop镜像已经存在了

2、启动容器:docker run -it -p 8889:8888 --name shop wbb/shop

启动时,这里的 -p 8889:8888 是端口映射,就是宿主机的8889端口映射到镜像的8888端口,访问宿主机的8889端口就相当于访问到镜像的8888端口,这个8888就是Dockerfile文件中写的开放的那个端口,当然,一般应该是指定-d后台运行,我指定前台交互运行,其实,就是为了看画的这个美女而已,这个身材,梦中女神啊

3、查看容器运行状态信息:docker ps

可以看到,构建的镜像实例已经运行了7分钟多了,端口映射情况,第一个是容器的ID

4、远程访问项目:http://服务器IP地址:8889/shop

在此之前,必须确保宿主机的端口8889是开放的,否则可以按照配置安全组规则放行8889端口,另外,/shop是我的项目的虚拟路径

OK,到此,使用IDEA连接远程Docker服务部署Spring Boot项目的方法就解释完了,不足之处,请多指教

附:检查端口是否开放远程访问,也可以使用在线端口扫描工具:http://www.jsons.cn/port/,输入服务器IP地址和相应的端口扫描就可以了,可以实现多个端口扫描,很方便

IDEA连接远程服务器Docker部署Spring Boot项目的更多相关文章

  1. Windows Docker 部署 Spring Boot 项目

    目录 Docker Configuration Config IDEA Plugin Create Spring Boot Project Containerize It Use Dockerfile ...

  2. 使用 Docker 部署 Spring Boot 项目

    Docker 介绍 Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口.它是目前最流行的 Linux 容器解决方案. Docker 将应用程序与该程序的依赖,打包在一个文件里面 ...

  3. 使用 Docker 部署 Spring Boot 项目,带劲!!

    上一篇:年轻人的第一个 Docker 应用 Docker 一次构建.处处运行及快速启停的特性,在微服务架构中有着举足轻重的地位,具体的概念性的东西就不介绍了,不懂的点击这里阅读 Docker 基础教程 ...

  4. 使用Docker部署Spring boot项目

    Docker是一个使用广泛的Linux容器管理工具包,它允许用户创建镜像,并将其容器实例化.通过本指南,我们可以学习到如何使用Docker部署Spring Boot项目. 先决条件 开发之前,你必须具 ...

  5. 【docker】docker部署spring boot项目在服务器上

    IDE:idea 工具:docker spring boot:2.0.1 ======================================== 简单记录一下流程,以供参考: 第一步:首先得 ...

  6. docker部署spring boot项目在服务器上

    IDE:idea 工具:docker spring boot:2.0.1 ======================================== 简单记录一下流程,以供参考: 第一步:首先得 ...

  7. Docker 部署Spring Boot 项目并连接mysql、redis容器(记录过程)

    Spring Boot 项目配置 将写好的Spring Boot 项目通过maven 进行package打包获得可执行Jar 再src/main/docker(放哪都行)下编写创建Dockerfile ...

  8. docker 部署spring.boot项目【一】(引用外部配置文件)

    上一篇随笔,nginx是启动运行在容器内,spring.boot的web项目是运行在宿主内,这一篇的目的,是把web项目也制作成镜像,然后在容器里启动. 文件目录结构如下: 主要文件结构说明:(1)b ...

  9. 如何用Docker部署Spring Boot项目

    1.idea中安装docker插件: 2.新建DockerFile,内容如下. # 基础镜像使用java FROM java:8 # 作者 MAINTAINER vic <test@163.co ...

随机推荐

  1. Mysql 常用函数(10)- strcmp 函数

    Mysql常用函数的汇总,可看下面系列文章 https://www.cnblogs.com/poloyy/category/1765164.html strcmp 的作用 比较两个字符串的顺序是否完全 ...

  2. Print输出颜色字体方法

    书写格式:     开头部分:\033[显示方式;前景色;背景色m + 结尾部分:\033[0m      注意:开头部分的三个参数:显示方式,前景色,背景色是可选参数,可以只写其中的某一个:另外由于 ...

  3. javaWeb删除一条及多条数据

    一.编写dao //删除根据ID@Delete("delete from product where id=#{id}")public void delete(Integer id ...

  4. Codeforces 1272E (Nearest Opposite Parity,反向建边)

    题意:给你n个数,每个数的值为a[i],每个点可以从i这号点跳转至(i - a[i]) 或 (i + a[i])点,点的范围为[1,n],然后问的是从偶数点跳至奇数点,从奇数点跳至偶数点的最少次数是多 ...

  5. Spring AOP实现接口验签

    因项目需要与外部对接,为保证接口的安全性需要使用aop进行方法的验签; 在调用方法的时候,校验外部传入的参数进行验证, 验证通过就执行被调用的方法,验证失败返回错误信息: 不是所有的方法都需要进行验签 ...

  6. Java Web之路一:过滤器(Filter)

    一.过滤器(Filter)简介 过滤器是对web资源进行拦截,做一些处理后再交给下一个过滤器或Servlet处理,主要可以拦截request和response 过滤器是以一种组件的形式与web程序绑定 ...

  7. iOS不移除通知也不会崩溃原因

    在iOS9.0之前,通知中心对观察者对象进行unsafe_unretained 引用,当被引用的对象释放时不会自动置为nil,,也就是成了野指针. iOS9.0之后通知中心对观察者做了弱引用. 参考: ...

  8. poj3683 2-SAT 同上一道

    Priest John's Busiest Day Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 10151   Accep ...

  9. EventBus/EventQueue 再思考

    EventBus/EventQueue 再思考 Intro 之前写过两篇文章,造轮子系列的 EventBus/EventQueue,回想起来觉得当前的想法有点问题,当时对 EvenStore 可能有点 ...

  10. 深入理解JS:执行上下文中的this(一)

    目录 执行上下文与执行上下文栈 this 全局环境 函数环境 总结 参考 1.执行上下文与执行上下文栈 (1)什么是执行上下文? 在 JavaScript 代码运行时,解释执行全局代码.调用函数或使用 ...