在CentOS下的docker容器中部署spring boot应用的两种方式
我们通常在 windows 环境下开发 Java,而通常是部署在Linux的服务器中,而CentOS通常是大多数企业的首选,基于Docker的虚拟化容器技术,多数Java应用选择这种方式部署服务。本文章通过模拟这种场景部署一个Java的spring boot应用。
2. 环境
安装Docker的CentOS 7虚拟机,虚拟机安装和使用可以参照:https://www.linuxidc.com/Linux/2014-10/108013.htm
3. 工具
远程连接服务器工具:xshell5,xftp5,xshell可以通过命令远程操作Linux服务器,跟终端输入命令效过一样,xftp可以远程传输文件。这两款工具的安装和使用可以百度搜索
下载安装
4.操作过程
1. xshell5 和 xftp5 配置
Xshell:
打开xshell主面板,点击新建,弹出会话配置面板,按如下填上连接信息

填完连接信息之后,点击连接,输入连接linux的用户名和密码即可登录虚拟机系统。xshell出现一个命令行窗口

可在命令行窗口输入Linux命令操作该Linux系统。如果连接不上请检查CentOS防火墙有没有开放22端口(一般默认开放),有没有运行
sshd服务。
XFTP5:
打开xftp主面板,文件下新建一个会话,如图配置相关连接信息,注意协议选择 sftp和22端口

打开选项卡【选项】,勾选“使用UTF-8”编码,迁移类型选择 Binary,(注意这里不能选择ASCII,这是一个大坑,选择该项传输jar包时会丢失class文件,
编者曾试过这血的教训),最后点击确定建立连接(配置好之后重启一下该工具,不重启可能某些配置不起作用),这样我们就可以通过鼠标拖曳的方式传输文件了。
2. 创建一个 spring-boot 应用,接口可以返回“Hello world”信息,制定服务端口8040

3. 服务部署
3.1 以maven插件的方式部署
3.1.1.确保docker服务开启和防火墙开放2375端口
相关命令
#查看端口 成功返回yes
firewall-cmd --query-port=/tcp
#查看防火墙状态
systemctl status firewalld.serice
#开启防火墙
systemctl start firewalld.services
#解锁防火墙进程
systemctl unmask firewalld.service
#开放服务端口firewall-cmd --add-port=/tcp
3.1.2.在工程maven中加入如下插件,并填写相关配置信息
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<docker.image.prefix>springboot</docker.image.prefix>
</properties>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<configuration>
<dockerDirectory>src/main/docker</dockerDirectory>
<dockerHost>http://192.168.42.210:2375</dockerHost>
<imageName>${docker.image.prefix}/${project.artifactId}</imageName>
<imageTags>
<imageTag>${project.version}</imageTag>
<imageTag>latest</imageTag>
</imageTags>
<entryPoint>["java","-jar","/${project.build.finalName}.mvnjar"]</entryPoint>
<exposes>8040</exposes>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
3.1.3 在 工程 src/main/docker 目录下新建Dockerfile 文件
FROM java
VOLUME /tmp
ADD hello-world-0.0.-SNAPSHOT.jar app.jar
RUN bash -c 'touch /app.jar'
ENV JAVA_OPTS=""
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]
3.1.4 项目完成后,在控制台执行 在pom.xml根目录下执行
mvn clean package docker:build
3.1.5 执行完命令后,在xshell中查看docker镜像,会出现两个springboot/hello-word 的镜像(其实是同一个)

接着,我们在xshell中执行启动命令
sudo docker run -d -p : --name hello-world 7c4a665ed17d
我们可以执行 命令查看是否启动成功
sudo docker ps

我们可以执行命令查看日志:
sudo docker logs hello-world
3.1.6 我们在windows主机访问该服务接口(参照3.1.1开放8040端口)

3.2 通过 本地构建的方式部署应用。
3.2.1 首先我们将打包好的 jar 包和Dockerfile文件通过xftp工具远程传输到CentOS上放在同一个目录中
3.2.2 通过命令cd到该目录执行如下命令构建镜像
sudo docker build -t helloworld .
注意不要漏掉最后的“.",表市当前路径,helloworld是镜像名
3.3.3 然后通过该镜像可构建我们的容器、开放服务端口,方法同3.1中的操作
PS:测试过程中可能使用到的命令
#关闭容器
sudo docker stop 容器名|容器ID
#查看运行的容器
sudo docker ps
# 查看所有的容器,包括停止的
sudo docker ps -a
# 删除容器
sudo docker rm 容器名|容器ID
#删除镜像
sudo docker rmi 镜像名:标签 | 镜像ID
在CentOS下的docker容器中部署spring boot应用的两种方式的更多相关文章
- 在Docker容器中运行Spring Boot的jar包 jar外的配置文件无法生效
Spring Boot加载配置文件,默认会从几个固定位置搜索一下看看有没有配置文件 ——application.properties或者bootstrap.properties(如果你使用了sprin ...
- mybatis 热部署xml文件(spring boot和springmvc两种方式)
参考:http://thinkgem.iteye.com/blog/2304557 步骤:1.创建两个java类 (1)MapperRefresh.java :用于刷新mapper (2)SqlS ...
- Docker Gitlab CI 部署 Spring Boot 项目
目前在学习这一块的内容,但是可能每个人环境都不同,导致找不到一篇博客能够完全操作下来没有错误的,所以自己也写一下,记录一下整个搭建的过程. Docker 的安装这里就不赘述了,基本上几行命令都可以了, ...
- python中字典的循环遍历的两种方式
开发中经常会用到对于字典.列表等数据的循环遍历,但是python中对于字典的遍历对于很多初学者来讲非常陌生,今天就来讲一下python中字典的循环遍历的两种方式. 注意: python2和python ...
- Android中H5和Native交互的两种方式
Android中H5和Native交互的两种方式:http://www.jianshu.com/p/bcb5d8582d92 注意事项: 1.android给h5页面注入一个对象(WZApp),这个对 ...
- C语言中存储多个字符串的两种方式
C语言中存储多个字符串的两种方式 方式一 二维字符串数组 声明: char name[][] = { "Justinian", "Momo", " ...
- .NET Core开发的iNeuOS工业互联平台,iNeuKernel物联网核心组件在Docker容器中部署。
目 录 1. 概述... 2 2. 演示信息... 2 3. 安装Docker容器... 2 4. 安装dotnet镜像... 3 5. ...
- 海纳百川无所不容,Win10环境下使用Docker容器式部署前后端分离项目Django+Vue.js
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_179 随着现代化产品研发的不断推进,我们会发现,几乎每个产品线都会包含功能各异的服务,而且服务与服务之间存在也会存在着错综复杂的依 ...
- 在Docker中部署Spring Boot项目
想要获取更多文章可以访问我的博客 - 代码无止境. 微服务现在在互联网公司可谓非常流行了,之前找工作的的时候很多HR电话约面试的时候都会问对微服务是否有过接触.而微服务和Docker可以非常完美的结合 ...
随机推荐
- The Python Challenge 0-4
The Python Challenge 0-4 项目地址:http://www.pythonchallenge.com/ Level-0 提示Hint: try to change the URL ...
- 利用ONENET平台控制MPC
可以用于广告机或者灾害预警,实时广播等行业 这个分控制端和服务端 控制端采用winform编写,服务端采用控制台程序编写 优点在于服务端不用有公网ip,比传统方案方便的多. 也不用租用费用高额的云服务 ...
- vi显示中文乱码
问题:vi/vim 编辑ANSI文本时,中文会显示乱码! 解决方法:修改vi/vim配置文件,添加如下红色并加粗的部分! vi 配置文件路径:/etc/vircvim 配置文件路径:/etc/v ...
- 技术文档生成工具:appledoc
做项目一般都会要求写技术文档,特别是提供SDK或者基础组件的.如果手写这类技术文档的话,工作量比编写代码也少不了多少.比如 Java 语言本身就自带 javadoc 命令,可以从源码中抽取文档.本篇我 ...
- kaldi脚本注释一
utils/split_data.sh ##再$data文件夹下,创建split{num_split}文件夹,再split×里面创建所有的数字文件夹#后面基本上是把$data文件夹下的各个文件都进行s ...
- maya2018卸载/安装失败/如何彻底卸载清除干净maya2018注册表和文件的方法
maya2018提示安装未完成,某些产品无法安装该怎样解决呢?一些朋友在win7或者win10系统下安装maya2018失败提示maya2018安装未完成,某些产品无法安装,也有时候想重新安装maya ...
- CCPC-Wannafly Winter Camp Day8 (Div2, onsite)
咕咕咕. camp补题. 传送门:https://www.zhixincode.com/contest/29/problems A.Aqours 题意:有一棵有根树,根节点为1,给出每个结点的父 ...
- HoloLens开发手记 - HoloLens shell概述 HoloLens shell overview
使用HoloLens时,shell是由你周围的世界和来自系统的全息图像构成.我们将这种空间成为混合世界(mixed world). shell包含了一个可以让你将全息图像和应用放置在世界中的开始菜单( ...
- Python Web Service
搞移动端有段时间了,一直使用别人的API,自己也只写过ASP.NET网站作为网络服务,相对来讲是很大的短板.虽然ASP.NET可以提供想要的web服务,但是其体量臃肿,响应速度非常慢,这点我非常不喜欢 ...
- [源码]一键获取windows系统登陆密码vc6版源码
[源码]一键获取windows系统登陆密码vc6版源码支持:XP/2000/2003/WIN7/2008等 此版本编译出来的程序体积较小几十KB... 而vs版则1点几M,体积整整大了2-30倍对某些 ...