将自己的SpringBoot应用打包发布到Linux下Docker中

1. 环境介绍

  • Java开发环境:Windows10 64位

maven3.6

jdk1.8

IDEA2018.3

  • 服务器:Linux Centos7 64位
  • Docker版本:Docker version 1.13.1, build b2f74b2/1.13.1

2. 开始前的准备

2.1 开启docker远程连接

  1. 搞定防火墙先

    这里是将centos的防火墙关闭了,只是为了方便演示,如果要保障安全,可以在部署完后打开防火墙,并开启特定端口:

    以80端口为例

    添加

    firewall-cmd --zone=public --add-port=80/tcp --permanent (--permanent永久生效,没有此参数重启后失效)

    重新载入

    firewall-cmd --reload

    查看

    firewall-cmd --zone= public --query-port=80/tcp

    删除

    firewall-cmd --zone= public --remove-port=80/tcp --permanent

    关闭防火墙
    systemctl stop firewalld
    开机禁用防火墙
    systemctl disable firewalld
  2. 开放docker远程访问

    我在树莓派上这样配置并不行,暂时没找到解决方案

    vi命令编辑docker启动:
    vi /usr/lib/systemd/system/docker.service
    修改ExecStart处的参数
    -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock \

有些朋友可能需要追加这个参数(将上面那句话改成下面这句话):

/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock \


我的配置修改后是这样子的: > <font color="red">注意这只是我截取的一小块,并不是全部,更不要把我的文件复制过去</font> ~~~bash
[Unit]
Description=Docker Application Container Engine
Documentation=http://docs.docker.com
After=network.target
Wants=docker-storage-setup.service
Requires=docker-cleanup.timer [Service]
Type=notify
NotifyAccess=main
EnvironmentFile=-/run/containers/registries.conf
EnvironmentFile=-/etc/sysconfig/docker
EnvironmentFile=-/etc/sysconfig/docker-storage
EnvironmentFile=-/etc/sysconfig/docker-network
Environment=GOTRACEBACK=crash
Environment=DOCKER_HTTP_HOST_COMPAT=1
Environment=PATH=/usr/libexec/docker:/usr/bin:/usr/sbin
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock \
--add-runtime docker-runc=/usr/libexec/docker/docker-runc-current \
--default-runtime=docker-runc \
--exec-opt native.cgroupdriver=systemd \
--userland-proxy-path=/usr/libexec/docker/docker-proxy-current \
--init-path=/usr/libexec/docker/docker-init-current \
~~~ 3. 重启docker服务 ```bash
systemctl daemon-reload
systemctl restart docker
  1. 验证是否可以访问

    如果返回一个json字符串表示可以正常访问,不成功会报错
    [root@bogon ~]# curl http://localhost:2375/info
    {"ID":"SXMD:MGRC:RVMF:ZTRM:2QBG:RUG6:RG7Y:YARM:TL5I:GM....................
  2. 也可以在windows下通过浏览器访问IP+端口号

    如果curl可以访问但是windows无法访问,检查一下防火墙关了没有

2.2 新建SpringBoot项目

  1. 如图所示

  1. 这里只用了一个web插件

  2. 项目路径为E:\IdeaProjects\Tea\docker-abc

  3. 新建kim.nzxy.dockerabc.controller.DemoController

    package kim.nzxy.dockerabc.controller;
    
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController; /**
    * @Author: Xiaoyan
    * @Date: 2019/3/29 16:08
    */
    @RestController
    public class DemoController {
    @RequestMapping("/")
    public String abc() {
    return "abc";
    }
    }
  4. SpringBoot运行结果如下:

3. 开始构建我们的Springboot应用

3.1 在pom.xml中添加Maven插件

第一个是用来创建docker容器用的

第二个如果不加上的话无法运行jar包

<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.2.0</version>
<configuration>
<!-- 配置docker server 位置,否则默认127.0.0.1 -->
<dockerHost>http://192.168.0.169:2375</dockerHost>
<!-- imageName冒号前面为容器名,后面是容器版本号 -->
<imageName>${project.artifactId}:${project.version}</imageName>
<!-- Dockerfile 文件位置 -->
<dockerDirectory>${project.basedir}</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
</plugins>

3.2 新建Dockerfile文件

位置:

内容:(这里与图不符,图中少了个‘’-‘’)

FROM openjdk:8
VOLUME /tmp
# docker-abc-0.0.1-SNAPSHOT.jar为maven项目project.artifactId-project.version
ADD docker-abc-0.0.1-SNAPSHOT.jar app.jar
RUN bash -c 'touch /app.jar'
EXPOSE 8761
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

如果新建的没错的话,IDEA是可以识别的

3.3 配置运行方式

4. 构建-运行

4.1 构建

这里就不文字解释了,点击运行等它完成就行了

4.2 运行我们的项目

以上如果报错了请检查步骤是否正确,或者Maven配置是否有问题

现在转移阵地到Centos上:

  1. 查看是否生成成功

    呐,我们构建的就是那个叫docker-abc的东西啦

    如果成功这里将会生成一个
    [root@bogon ~]# docker images
    REPOSITORY TAG IMAGE ID CREATED SIZE
    docker-abc 0.0.1-SNAPSHOT 44eb924f47a2 7 minutes ago 659 MB
    docker.io/openjdk 8 b8d3f94869bb 33 hours ago 625 MB
  2. 启动自己的项目

    运行成功
    [root@bogon ~]# docker run -d -p 8080:8080 44eb924f47a2
    30317d2daaf2a76e9fc4cb9bf08a102ecd84db34f790f73d8e8cebb0c4bcfd0c
  3. 测试成果:

将自己的SpringBoot应用打包发布到Linux下Docker中的更多相关文章

  1. asp.net core 发布到linux下Docker

    1.linux Docker 安装 内核升级:https://www.cnblogs.com/zksfyz/p/7919425.html 安装:   https://www.runoob.com/do ...

  2. 使用VS把ASP.NET 5的应用发布到Linux的Docker上

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:我相信未来应用程序的部署模式首选一定会是Docker,所以.NET社区的朋友也不应该忽 ...

  3. CentOS7下Docker中构建可以自动发布到项目的Tomcat容器

    步骤 下载镜像 搜索相应的镜像文件:docker search 'tomcat' 如下 下载镜像:docker pull tomcat:7,如下图 PS:后面的数字代表tomcat的版本,可以自己选择 ...

  4. .Net Core 1.1打包发布到Linux

    在 .Net Core 1.0 中我们打包跨平台包是在 project.json 中配置的 但是 .Net Core 1.1 去掉了 project.json 具体咋办参考:https://blogs ...

  5. springboot:基础学习一 linux下后台启动springboot项目

    我们知道启动springboot的项目有三种方式: 运行主方法启动 使用命令 mvn spring-boot:run”在命令行启动该应用 运行“mvn package”进行打包时,会打包成一个可以直接 ...

  6. .Net Core发布到Linux下验证码失效处理方案详解

    .net Core 部署到在 CentOS7下后,验证码打不开,报The type initializer for 'Gdip' threw an exception.异常 运行含图片处理时发生异常: ...

  7. SpringBoot 项目打包后运行报 org.apache.ibatis.binding.BindingException

    今天把本地的一个SpringBoot项目打包扔到Linux服务器上,启动执行,接口一访问就报错,但是在本地Eclipse中启动执行不报错,错误如下: org.apache.ibatis.binding ...

  8. 使用Advanced Installer 13.1打包发布 Windows Service服务程序

    原文: 使用Advanced Installer 13.1打包发布 Windows Service服务程序 项目中需要用到一个定时推送案件状态的需求,本人小菜一只,在同事建议下要写成一个windows ...

  9. asp.net core发布到linux

    在发布到linux的过程中出现两个问题现在总结一下: 我的虚拟机是安装到本机上面的,所以,应该在虚拟机的设置里面设置端口映射.具体设置如下: 选择vm上方的编辑 在弹出的框中选择VMnet8,点击下方 ...

随机推荐

  1. Apache Commons 工具类简单使用

    Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动.下面是我这几年做开发过程中自己用过的工具类做简单介绍. 组件 功能介绍 BeanUtils 提供了对于 ...

  2. 锋利的jQuery初学(4)

    css选择器与jQuery选择器 css选择器 符号 说明 用法 #id 选择器 #id{} .class 类选择器 .class{} Element 标签选择器 p{} , 并集选择器 div,p{ ...

  3. 我对CSS的认识

    花费了一段时间,终于对HTML有了一定的了解,随后又开始进行CSS的战斗感觉自己学起来有一点吃力.我就简单的讲一下我所学到的吧! CSS的概述. 层叠式样式表,用于控制网页样式并允许将样式信息并允许将 ...

  4. Linux可以生产uImage

    默认kernel只生产Image和zImage,若想让kernel生产uImage,需要用到mkimage,这个是uboot可以提供的,位于uboot/tool/目录下,将其加入到环境变量即可.

  5. 非常完善的两个微服务框架比较(SpringCloud与Dubbo)

    微服务架构是互联网很热门的话题,是互联网技术发展的必然结果.它提倡将单一应用程序划分成一组小的服务,服务之间互相协调.互相配合,为用户提供最终价值. 虽然微服务架构没有公认的技术标准和规范或者草案,但 ...

  6. 试写foxit reader的ConvertToPDF功能的wrapper

    相比于直接fuzzing大型程序本身,针对程序的某一特定功能写wrapper后再fuzzing则要高效的多.网上搜了下,仅有两篇关于foxit reader的wrapper文章,一个用python,另 ...

  7. centos 终端字体错位个别字母中间有间隔的解决

    问题描述: linux系统:centos 终端:图形界面终端,通过startx启动 现象:通过终端输入的字体有重叠,字母之间的间隔也很大.由于字体安装不正确导致. 解决方法:通过下面字体的安装命令可以 ...

  8. 面向对象编程导论 An Introduction to Object-Oriented Programming (Timothy 著)

    第1章 面向对象思想 第2章 抽象 第3章 面向对象设计 第4章 类和方法 第5章 消息,实例和初始化 第6章 案例研究: 八皇后问题 第7章 研究研究: 台球游戏 第8章 继承与替换 第9章 案例研 ...

  9. delphi 多线程之System.TMonitor (续一)

    unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System ...

  10. Spring Boot - AOP(面向切面)

    AOP 全称 Aspect Oriented Programming(面向切面),AOP主要实现的目的是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分 ...