一键部署 Spring Boot 到远程 Docker 容器

首先构建一个简单的 Spring Boot 项目,然后给项目添加 Docker 支持,最后对项目进行部署。

文章目录

      • 一、前提条件
        • 1. SpringBoot项目
        • 2. Docker插件
        • 3. Dockerfile文件
        • 4. 服务器Docker环境
        • 5. Maven环境
      • 二、技术选型
      • 三、新建SpringBoot项目
        • 1. pom
        • 2. DockerController
        • 3. Dockerfile文件
        • 4. Dockerfile文件说明
        • 5. 浏览器验证
      • 四、构建Docker打包环境
        • 1. 安装 Docker 环境
        • 2. 启动 docker 服务
        • 3. 使用Docker 中国加速器
        • 4. 重新启动docker
        • 5. 验证docker
        • 6. 安装JDK
        • 7. 安装MAVEN
      • 五、构建Docker打包环境
        • 1. 复制项目至服务器
        • 2. 打包测试
        • 3. DockerFile 构建镜像
        • 4. 查看构建好的镜像
        • 5. 运行该镜像
        • 6. 访问浏览器

一、前提条件

1. SpringBoot项目

2. Docker插件

3. Dockerfile文件

4. 服务器Docker环境

5. Maven环境

二、技术选型

名称版本
服务器Centos7.3
maven3.6.3
Docker1.12.6
jdkjdk1.8.0_191
SpringBoot2.1.1.RELEASE

三、新建SpringBoot项目

1. pom

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.gblfy</groupId><artifactId>spring-boot-docker</artifactId><version>1.0</version><packaging>jar</packaging><name>spring-boot-docker</name><description>Demo project for Spring Boot</description><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.1.RELEASE</version></parent><properties><!--编码设置--><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><java.version>1.8</java.version><!--docker镜像前缀--><docker.image.prefix>springboot</docker.image.prefix></properties><dependencies><!--springmvc 启动器--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies><build><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.0.0</version><configuration><imageName>${docker.image.prefix}/${project.artifactId}</imageName><dockerDirectory>src/main/docker</dockerDirectory><resources><resource><targetPath>/</targetPath><directory>${project.build.directory}</directory><include>${project.build.finalName}.jar</include></resource></resources></configuration></plugin><!-- Docker maven plugin --></plugins></build>
</project>

2. DockerController

package com.gblfy.controller;import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class DockerController {@RequestMapping("/")public String index() {return "deploy Docker SpringBoot succeed !";}
}

3. Dockerfile文件

在目录src/main/docker下创建 Dockerfile 文件,Dockerfile 文件用来说明如何来构建镜像。

FROM java:8
VOLUME /tmp
ADD spring-boot-docker-1.0.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

4. Dockerfile文件说明

名称说明
FROM表示使用 Jdk8 环境 为基础镜像,如果镜像不是本地的会从 DockerHub 进行下载
java:8是使用jdk版本
VOLUMEVOLUME 指向了一个/tmp的目录,由于 Spring Boot 使用内置的Tomcat容器,Tomcat 默认使用/tmp作为工作目录。这个命令的效果是:在宿主机的/var/lib/docker目录下创建一个临时文件并把它链接到容器中的/tmp目录
spring-boot-docker-1.0.jar是使用jar包名称
ADD dalaoyang_mgr.jar /app.jar拷贝jar到容器并重命名
ENTRYPOINT执行jar文件,为了缩短 Tomcat 的启动时间,添加java.security.egd的系统属性指向/dev/urandom作为 ENTRYPOINT

5. 浏览器验证

添加完毕后启动项目,启动成功后浏览器访问:http://localhost:8080/,页面返回:deploy Docker SpringBoot succeed !,说明 Spring Boot 项目配置正常。

四、构建Docker打包环境

  • 我这里以 Centos 7 为例

1. 安装 Docker 环境

yum install docker

2. 启动 docker 服务

  • 安装完成后,使用下面的命令来启动 docker 服务,并将其设置为开机启动:
service docker start
chkconfig docker on#LCTT 译注:此处采用了旧式的 sysv 语法,如采用CentOS 7中支持的新式 systemd 语法,如下:
systemctl  start docker.service
systemctl  enable docker.service

3. 使用Docker 中国加速器

vim  /etc/docker/daemon.json
#添加后:
{"registry-mirrors": ["https://registry.docker-cn.com"],"live-restore": true
}

4. 重新启动docker

systemctl restart docker

5. 验证docker

输入docker version 返回版本信息则安装正常。

6. 安装JDK

https://gblfy.blog.csdn.net/article/details/103435776

7. 安装MAVEN

https://gblfy.blog.csdn.net/article/details/103437848

这样整个构建环境就配置完成了。

五、构建Docker打包环境

1. 复制项目至服务器

  • 将项目 spring-boot-docker 拷贝服务器中

2. 打包测试

#进入项目
cd spring-boot-docker
#打包
mvn package
#启动
java -jar target/spring-boot-docker-1.0.jar

看到 Spring Boot 的启动日志后表明环境配置没有问题,接下来我们使用 。

3. DockerFile 构建镜像

mvn package docker:build

第一次构建可能有点慢,当看到以下内容的时候表明构建成功:

[INFO] Using authentication suppliers: [ConfigFileRegistryAuthSupplier]
[INFO] Copying /root/docker/spring-boot-docker/target/spring-boot-docker-1.0.jar -> /root/docker/spring-boot-docker/target/docker/spring-boot-docker-1.0.jar
[INFO] Copying src/main/docker/Dockerfile -> /root/docker/spring-boot-docker/target/docker/Dockerfile
[INFO] Building image springboot/spring-boot-docker
Step 1 : FROM java:8---> d23bdf5b1b1b
Step 2 : VOLUME /tmp---> Running in 4852c3e4c4a4---> d41417028397
Removing intermediate container 4852c3e4c4a4
Step 3 : ADD spring-boot-docker-1.0.jar app.jar---> aeb337cf768f
Removing intermediate container db2d04b567ae
Step 4 : ENTRYPOINT java -Djava.security.egd=file:/dev/./urandom -jar /app.jar---> Running in ac410e4c7441---> 09b36d7c2c60
Removing intermediate container ac410e4c7441
Successfully built 09b36d7c2c60
[INFO] Built springboot/spring-boot-docker
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  07:06 min
[INFO] Finished at: 2019-12-07T17:12:49+08:00
[INFO] ------------------------------------------------------------------------

4. 查看构建好的镜像

  • 使用docker images命令查看构建好的镜像:
docker images
REPOSITORY                      TAG                 IMAGE ID            CREATED             SIZE
springboot/spring-boot-docker   latest              09b36d7c2c60        27 seconds ago      659.1 MB

springboot/spring-boot-docker 就是我们构建好的镜像,下一步就是运行该镜像

5. 运行该镜像

docker run -p 8080:8080 -t springboot/spring-boot-docker

启动完成之后我们使用docker ps查看正在运行的镜像:

docker ps
CONTAINER ID        IMAGE                           COMMAND                  CREATED             STATUS              PORTS                    NAMES
049570da86a9        springboot/spring-boot-docker   "java -Djava.security"   30 seconds ago      Up 27 seconds       0.0.0.0:8080->8080/tcp   determined_mahavira

可以看到我们构建的容器正在在运行,

6. 访问浏览器

http://192.168.0.x:8080/,返回

deploy Docker SpringBoot succeed !

说明使用 Docker 部署 Spring Boot 项目成功!
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/522562.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker,一个傲娇的男人

戳蓝字“CSDN云计算”关注我们哦&#xff01;引言大概几个月前&#xff0c;我曾经写过一篇文章叫《微服务为什么一定要用docker》。当时&#xff0c;写完这篇以后&#xff0c;有些粉丝表示想看看基本入门教程&#xff0c;希望我写一篇。然后呢&#xff0c;大家也知道&#xff0…

英特尔核芯显卡控制面板没有了_只认性能你就输了!英特尔第十代酷睿处理器最全解析...

前不久&#xff0c;英特尔公布了第十代酷睿处理器“Ice Lake”的命名规则&#xff0c;AnandTech网站也曝光了“次旗舰”级别酷睿i7-1065G7处理器的实测性能(详见《10nm新架构Iris Plus核显 第十代酷睿到底有多强&#xff1f;》)。从结果来看&#xff0c;i7-1065G7的CPU性能提升…

阿里敏捷教练何勉:论精益思想及精益产品开发实践体系

摘要&#xff1a; 精益求精是工匠精神实现的最佳方法&#xff0c;通过引入实践精益思想的原则和方法进行精益产品开发&#xff0c;打造对客户最好的产品进行交付&#xff0c;其次通过精益思想的理念降低企业的运营成本&#xff0c;提高企业的运营效率。阿里资深解决方案架构师、…

html页面内分栏显示不全,怎么消除Word文档分栏后栏间不平衡现象

IE10浏览器打开网页鼠标不能滚动查看是怎么回事&#xff1f;IE10浏览器黑屏&#xff0c;但是滚动鼠标就好了&#xff0c;不到一分钟...在控制面板的电源设置中&#xff0c;将显示器的关闭时间调到你希望的时刻就可以了。word文档分栏后左右对不齐怎么办word文档分栏后左右对不齐…

开发经验分享_06_前端开发技巧

接上一篇&#xff1a;(企业内部)开发经验分享_05_葫芦画瓢 https://gblfy.blog.csdn.net/article/details/103414567 文章目录一、JS调试技巧1. 推荐使用consde.log2. 推荐理由3. Network正确的使用姿势①Headers一、JS调试技巧 1. 推荐使用consde.log 推荐使用consde.log(内…

Spring精华问答 | 为什么要学习Spring?

戳蓝字“CSDN云计算”关注我们哦&#xff01;Spring是为解决企业应用程序开发复杂性而创建的一个Java开源框架&#xff0c;应用非常广泛。业内非常流行的SSH架构中的其中一个"S"指的就是Spring。今天我们就一起来看看关于Spring的精华问答&#xff01;1Q&#xff1a;…

相关系数excel_如何用Excel计算投资组合的有效前沿?

假设一个投资组合由美债和美股构成&#xff0c;美债为跟踪美国投资级债券市场走势的交易所交易基金AGG&#xff0c;美股为跟踪美国标准普尔500指数走势的交易所交易基金SPY。注&#xff1a;在计算有效前沿曲线时投资回报率一般应采用预期回报率&#xff0c;但本文只是为了演示投…

拼的html页面乱,页面分页html拼接

success:function(data){if(data.status "success"){var page data.p;var html;for(var i 0; ihtml html ;htmlhtml;htmlhtmlpage.result[i].infoTitle;htmlhtmlpage.result[i].infoDepict ;htmlhtml;}// 添加分页选项:下一页html html "" "&q…

LoRaWAN开放式实验平台

摘要&#xff1a; 本文介绍了基于loraserver和uDC的LoRaWAN开发平台&#xff0c;基于该平台用户无需投入硬件即可在设备端和服务端进行&#xff0c;极大的降低了入门和开发门槛。 点此查看原文&#xff1a;http://click.aliyun.com/m/43348/ 本文旨在介绍AliOS Things的LoRaWA…

华为开发者大会上,鸿蒙问世、方舟编译器开源、还有 EMUI 10;壕置100万美元,苹果推出漏洞攻击报告赏金计划……...

关注并标星星CSDN云计算极客头条&#xff1a;速递、最新、绝对有料。这里有企业新动、这里有业界要闻&#xff0c;打起十二分精神&#xff0c;紧跟fashion你可以的&#xff01;每周三次&#xff0c;打卡即read更快、更全了解泛云圈精彩newsgo go go 鸿蒙OS正式对外发布&#xf…

bootstarp怎么使盒子到最右边_折纸教程:漂亮花朵盒子图解,简单实用,一张纸就完成...

爱生活&#xff0c;爱手工&#xff0c;我是爱做手工的小曦&#xff01;今天给大家带来的是颜值很高的花朵盒子折纸&#xff0c;可以放一些小物件哦&#xff01;比如棉签什么的&#xff0c;还是很实用的。具体怎么折&#xff0c;和小曦一起来看看吧&#xff01;花朵盒子折纸教程…

开放分布式追踪(OpenTracing)入门与 Jaeger 实现

摘要&#xff1a; 分布式系统的运维挑战 容器、Serverless 编程方式的诞生极大提升了软件交付与部署的效率。在架构的演化过程中&#xff0c;可以看到两个变化&#xff1a; 应用架构开始从单体系统逐步转变为微服务&#xff0c;其中的业务逻辑随之而来就会变成微服务之间的调用…

c语言网页版在线编译器_C语言编译器IDEapp下载-C语言编译器IDE官方版下载v1.5.1 安卓版...

c语言编译器IDE是专门为学习c语言的人专门打造的&#xff0c;解决了很多人身边没电脑的问题&#xff0c;这款软件是手机端的编译神器&#xff0c;用手机也可以学习c语言&#xff0c;软件中有很多详细的讲解原理&#xff0c;可以非常好的学习c语言&#xff0c;是初学者的好帮手&…

MWC18见闻录|阿里云的第一届“巴交会”

摘要&#xff1a; 上周&#xff0c;世界移动通信大会MWC18在巴塞罗那举行。非常荣幸能成为阿里云“巴交会”首秀小分队的一员。 短短四日&#xff0c;我们借此平台&#xff0c;给欧洲带去中国数字化转型的经验和技术。来自全世界的参会者也借此机会真实感受到了年轻且在高速发展…

这!不是一点儿super,青云混合云!

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者|刘晶晶“什么是混合云&#xff1f;”刚一开场&#xff0c;青云QingCloud解决方案及架构副总裁沈鸥就抛出了一个常听却做起来并不简单的问题。青云QingCloud解决方案及架构副总裁 沈鸥其实关于混合云&#xff0c;我们可以简单分…

查看系统版本

cat /etc/redhat-release

《阿里巴巴Android开发手册》v1.0.1更新,优化部分内容和示例代码

摘要&#xff1a; 春节余味尚未消&#xff0c;我们为移动开发者准备了一份迟到的新年礼物——《阿里巴巴Android开发手册》&#xff0c;继《阿里巴巴Java开发手册》之后&#xff0c;阿里巴巴开发规范家族又添一丁&#xff0c;「阿里巴巴Android开发规范」认证考试也同步上线。 …

java 如何循环执行一个对象_Java基础:如何定义好一个方法和进行方法重载

方法就是定义在类中的具有特定功能的一段独立小程序&#xff0c;可以完成特定功能的代码块在很多语言里都有函数的定义函数在java中也称为方法格式&#xff1a;修饰符 返回值类型 方法名(参数类型 参数名1&#xff0c;参数类型 参数名2,...){执行语句;return 返回值;}详细解释&…

再见!微服务

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者|马岛本文翻译自Alexandra Noonan 的 《Goodbye Microservices: From 100s of problem children to 1 superstar》内容是描述 Segment 的架构如何从 「单体应用」 -> 「微服务」 -> 「140 微服务」 -> 「单体应用」 的…