CentOS7 docker部署springboot项目(两种方式)_code-jam的博客-程序员秘密_centos docker springboot

技术标签: docker部署springb  docker部署  centos docker部署  linux docker部署  运维  架构/技术方案  idea docker部署  

首先,使用现在主流的IDE Idea创建一个最简单的springboot项目。
比如随便带有一个@RestControllerpublic String test1(){} 的方法。使之可访问即可。

需要一点预备知识,如 linux基本操作、docker安装及基本操作、docker镜像地址配置(否则下载会特别慢)、java 或 mvn命令启动springboot项目等,懂的人自然懂。

两种方式,第一种方式成功了,有助于理解和运用第二种方式。

第一种,不依赖docker插件,手动部署springboot到docker

思路描述:

  1. 准备jar文件(注意必要的yml之类的配置文件要打包到jar文件中)
IDEA新建一个springboot项目
产生jar文件用于发布
备用
  1. 在服务器上安装docker服务,启动。
    在这里插入图片描述
  2. 将第1步中的jar文件上传到服务器中,然后使用docker命令产生镜像。

3.1 准备文件
如下图,图中划线内容是我传上去的,分别给了chmod +x xxx权限。
在这里插入图片描述
Docfile内容如下:

FROM java:8
# VOLUME 指定了临时文件目录为/tmp。
# 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp
VOLUME /tmp 
# 将jar包添加到容器中并更名为app.jar
ADD wtf.jar app.jar 
ENTRYPOINT ["java","-jar","/app.jar"]  

3.2 然后docker build生成新的镜像
在这里插入图片描述
docker build -t wtf2 .
注意命令里有个点.

  1. docker启动此镜像,指定好端口,同时记得处理服务器的端口开放问题。
    docker run -p 8080:8080 wtf2
    如下图:
    在这里插入图片描述
    然后直接访问对应接口地址即可。

第二种,依赖docker插件,从IDEA直接将springboot项目部署到docker

这里面说得不是很详细,只要说思路。

不赘述的要点:

  1. docker 开启远程访问。
  2. idea安装docker插件,并配置。

  1. 本地的idea的spring boot简单项目,可以maven clean,可以package生成 jar 文件。(同样地,注意properties或yml等文件的打包问题)。细节略。

  2. docker服务器开始远程访问,idea安装docker插件并配置,使idea中可以看到docker服务器中的image和container。如下图
    在这里插入图片描述

  3. 开始配置此springboot项目中的Dockerfile文件,特别注意是在根目录下。我的就是因为层级不对,总是提示找不到文件的。
    在这里插入图片描述
    Dockerfile 文件内容:

FROM java:8
VOLUME /tmp
ADD target/wtf8081.jar wtf8081.jar
ENTRYPOINT ["java","-jar","wtf8081.jar"]
  1. 然后在此springboot项目的pom.xml文件的里面添加如下内容:
  <plugin>
        <groupId>com.spotify</groupId>
        <artifactId>docker-maven-plugin</artifactId>
        <!--将插件绑定在某个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>

          <!-- 指定 Dockerfile 路径 ${project.basedir}:项目根路径下-->
          <dockerDirectory>${project.basedir}</dockerDirectory>
          <!--指定远程 docker api地址-->
          <dockerHost>http://192.168.182.245: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>
  1. 项目中启动项设置为 dockerfile 启动。如下图。
    在这里插入图片描述
  2. 然后在docker 插件里,就可以推送文件、生成镜像、启动容器。最终成功发布。
  3. 在这里插入图片描述

deploy某个container之后,在docker ps -a中可看到启动状态,并且可以正常访问服务。
如下图。

在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/festone000/article/details/108619227

智能推荐

setCharacterEncoding编译报错_小主早安的博客-程序员秘密_setcharacterencoding报错

response.setCharacterEncoding(“gbk”);jar包已导入,提示如下错误:The method setCharacterEncoding(String) is undefined for the type HttpServletResponse简单说来就是setCharacterEncoding方法未定义。解决方法一:response.setCharacterEncoding(“gbk”); 在Servlet2.3中是不行的,至少要2.4版本才可以,如果低于2.4版本

Ubuntu中vsftpd实现不同用户不同权限_Gavin_dinggengjia的博客-程序员秘密_ubuntu vsftpd 用户权限

在vsftpd中要实现不同用户不同权限,可以利用虚拟用户来实现。      vsftpd的本地用户本身是系统的用户,除了可以登录FTP服务器外,还可以登录系统使用其他系统资源,而vsftpd的虚拟用户则是FTP服务的专用用户,虚拟用户只能访问FTP服务器资源。对于只需要通过FTP对系统有读写权限,而不需要其他系统资源的用户或情况来说,采用虚拟用户方式是很适合的。      vsft

编码中的setCharacterEncoding 理解_red_liuiot的博客-程序员秘密_setcharacterencoding的用法

pageEncoding="UTF-8"的作用是设置JSP编译成Servlet时使用的编码contentType="text/html;charset=UTF-8"的作用是指定对服务器响应进行重新编码的编码request.setCharacterEncoding(“UTF-8”)的作用是设置对客户端请求进行重新编码的编码response.setCharacterEncoding(“UTF-8”)的作用是指定对服务器响应进行重新编码的编码1、response.setCharacterEncodi.

CentOS 6 升级 GCC 带来的坑_smallhow的博客-程序员秘密

CentOS 6 自带的 GCC 版本为 4.4.7[[email protected] bin]# /usr/bin/gcc -vUsing built-in specs.Target: x86_64-redhat-linuxConfigured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share...

VMware中安装Ubuntu桌面版(图解)_cocosum的博客-程序员秘密

下载虚拟机和Ubuntu地址: 1、Ubuntu下载地址: 官方地址,我的网盘地址,失效了请评论一下,我及时补! 2、VMware下载地址: 我的网盘地址,版本为VMware 14 (带秘钥),失效了请评论一下,我及时补!跳过虚拟机的安装,直接进入安装Ubuntu,下面是图解步骤:在安装的过程中,会提醒清除磁盘,不用管,既然在虚拟机当中,就是虚拟的,不影响先有的磁盘文...

thinkphp上传文件无权限问题_aliu_rui的博客-程序员秘密

windows服务器 问题上传文件后获得文件路径:$path=’E:\WWW\tp5\public\uploads\1.jpg’; 接着unlink($path); 报错没有权限Permission denied 思考但是直接设置这个变量重新访问就可以删除,说明根本不是没有权限; 另外用原生php接收文件也可以删除, 怀疑是不是tp没有关闭导致无法删除? ...

随便推点

JavaWeb日常:编码中的setCharacterEncoding 理解_qq_528155278的博客-程序员秘密_web 'setcharacterencoding(string)

1、pageEncoding="UTF-8"的作用是设置JSP编译成Servlet时使用的编码。2、contentType="text/html;charset=UTF-8"的作用是指定对服务器响应进行重新编码的编码。3、request.setCharacterEncoding(“UTF-8”)的作用是设置对客户端请求进行重新编码的编码。4、response.setCharacterEnco...

详解逻辑回归(LR)计算过程_CC丶Z的博客-程序员秘密_逻辑回归算法流程

原文地址:http://blog.csdn.net/dongtingzhizi/article/details/159627971.引言本文主要介绍以下三个方面的内容:(1)Logistic Regression的基本原理,分布在第二章中;(2)Logistic Regression的具体过程,包括:选取预测函数,求解Cost函数和J(θ),梯度下降法求J(θ)的最小值,以及递归下...

android Handler内存泄露 kotlin内存泄露处理_木子102的博客-程序员秘密

这几天使用kotlin写一个项目,用到handler,然后提醒提警告This Handler class should be static or leaks might occur......I wrote that debugging code because of a couple of memory leaks I found in the Android codebase. Li

java仿射变换图形期末作品,【转】Java图像变换种 - AffineTransform_weixin_39991935的博客-程序员秘密

很多人都研究过GL的Animation编辑器,但是对其XML数据文件中Sprite的m00 m01 m02 m10 m11 m12我想并不是每个人都能弄的明白,其实他们是Java的图像变换类AffineTransform的6个参数。AffineTransform是J2SE中非常重要的专门处理2D图像仿射变换的类,尤其在游戏工具编写中经常会用到。该类的构造函数有6个参数m00 m10 m01 m11...

JAVA教程 第七讲 Swing用户界面设计_weixin_34113237的博客-程序员秘密

7.1 Swing简介7.1.1 简介  第五讲中我们学习了AWT,AWT是Swing的基础。Swing的产生主要原因就是AWT不能满足图形化用户界面发展的需要。AWT设计的初衷是支持开发小应用程序的简单用户界面。例如AWT缺少剪贴板、打印支持、键盘导航等特性,而且原来的AWT甚至不包括弹出式菜单或滚动窗格等基本元素。  此外AWT还存在着严重的缺...

JVM - Java8内存模型—永久代(PermGen)和元空间(Metaspace)_fayker的博客-程序员秘密

Metaspace(元空间)JDK1.7中,存储在永久代的部分数据就已经转移到了Java Heap或者是 Native Heap。但永久代仍存在于JDK1.7中,并没完全移除,譬如符号引用(Symbols)转移到了native heap;字面量(interned strings)转移到了java heap;类的静态变量(class statics)转移到了java heap。我们可以通过一段程序来比较 JDK 1.6 与 JDK 1.7及 JDK 1.8 的区别,以字符串常量为例: pa.