将自己的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. zoj 2524 并查集裸

    Description There are so many different religions in the world today that it is difficult to keep tr ...

  2. 关于jstl中碰到的Property 'username' not found on type java.lang.String异常

    在jstl的forEach循环的时候总是有异常,刚开始以为是把类的属性名打错了,因为显示的是Property not found,但就算从类文件里面复制属性名过来依然显示的是Property not ...

  3. c语言希尔排序,并输出结果(不含插入排序)

    #include<stdio.h> void shellsort(int* data,int len) { int d=len; int i; ) { d=(d+)/; //增量序列表达方 ...

  4. SP3871 GCDEX - GCD Extreme

    //author Eterna #define Hello the_cruel_world! #pragma GCC optimize(2) #include<iostream> #inc ...

  5. 关于pycharm中缩进、粘贴复制等文本编辑功能部分失效的解决办法

    有可能是同时安装了vim,冲突导致: 在seetings中点击Plugins,搜索vim卸载后功能恢复

  6. c++中thread的死法

    在调用thread后,不调用join()函数时, 线程的两种行为:1)自己管理join()函数  2)生成后不管理,线程完了自己杀死自己detach()函数.使用detach()时,线程比较简单,一般 ...

  7. 详解Vue 非父子组件通信方法(非Vuex)

    假设 bb 组件里面有个按钮,点击按钮,把 123 传递给 aa 组件 // 根组件(this.$root) new Vue({ el: '#app', router, render: h => ...

  8. 2018-2019-2 网络对抗技术 20165308 Exp2 后门原理与实践

    2018-2019-2 网络对抗技术 20165308 Exp2 后门原理与实践 1.实验内容 (3.5分) (1)使用netcat获取主机操作Shell,cron启动 (0.5分) (2)使用soc ...

  9. python通过openpyxl操作excel

    python 对Excel操作常用的主要有xlwt.xlrd.openpyxl ,前者xlwt主要适合于对后缀为xls比较进行写入,而openpyxl主要是针对于Excel 2007 以上版本进行操作 ...

  10. 修改windows7 的管理员密码

    某天,公司财务同事的电脑出现了一个相当奇葩的现象,有些程序不能用了,经过查看,发现本是管理员的账户变得只有一个users用户组了 造成程序在运行时,无权限修改一些文件,造成程序无法启动 my god, ...