【Linux】【自学笔记】docker搭建一个spring-boot程序
写在开始
最近捣腾Linux,安装虚拟机VMware并安装了CentOS 7系统,开始研究Linux,但是无从下手,就结合工作中用到的东西一步一步研究,事实并不是那么顺利。特此开博客,记录在过程中遇到的问题,方便温顾。也希望能帮助更多人。文中存在引用其余大佬的博客和话语。如有版权或者冒犯,请指正。
安装环境准备
虚拟机VMware
Java IDEA
CentOS 7 64位
搭建详情和步骤
步骤一:搭建docker(遇到很多问题,忘记记录了)
yum -y install docker
我安装的docker版本

步骤二:准备本地的spring-boot程序
(注:程序demo原始引用自https://github.com/ityouknow/spring-boot-examples.git谢谢大佬开源)
通过docker部署spring-boot有两种方式,一种是dockfile形式的安装和部署,另外一种是利用maven插件的形式,我研究的是第一种。
本地代码目录结构样子

主要的几个文件
pom.xml(重要的就是maven打包的plugin)
<?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.neo</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.0.0.RELEASE</version>
</parent> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
<docker.image.prefix>springboot</docker.image.prefix>
</properties> <dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</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>
Dockerfile
FROM openjdk:-jdk-alpine
VOLUME /tmp
ADD spring-boot-docker-1.0.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
解释下这个配置文件:
VOLUME 指定了临时文件目录为/tmp。其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp。改步骤是可选的,如果涉及到文件系统的应用就很有必要了。/tmp目录用来持久化到 Docker 数据文件夹,因为 Spring Boot 使用的内嵌 Tomcat 容器默认使用/tmp作为工作目录
项目的 jar 文件作为 “app.jar” 添加到容器的
ENTRYPOINT 执行项目 app.jar。为了缩短 Tomcat 启动时间,添加一个系统属性指向 “/dev/./urandom” 作为 Entropy Source
(注:上面这段话引用原文链接:https://www.cnblogs.com/shamo89/p/9201513.html )
DockControl文件
package com.neo.controller; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; @RestController
public class DockerController { @RequestMapping("/")
public String index() {
return "Hello Docker!";
}
}
spring启动类
package com.neo; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication
public class DockerApplication { public static void main(String[] args) {
SpringApplication.run(DockerApplication.class, args);
}
}
准备好本地需要的文件
Dockerfile
spring-boot-docker-1.0.jar
本地用maven命令编译项目即可
mvn package
完成后再target目录下面执行下面命令查看打包有无问题
Microsoft Windows [版本 6.1.]
版权所有 (c) Microsoft Corporation。保留所有权利。 D:\springboot学习\spring-boot-examples\spring-boot-docker\target>java -jar spring-boot-docker-1.0.jar . ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.0.0.RELEASE) -- ::53.484 INFO --- [ main] com.neo.DockerApplicati
on : Starting DockerApplication v1. on PC-20190106EDZE with PID
(D:\springboot学习\spring-boot-examples\spring-boot-docker\target\sprin
g-boot-docker-1.0.jar started by Administrator in D:\springboot学习\spring-b
oot-examples\spring-boot-docker\target)
-- ::53.491 ........(省略一万字)
on : Started DockerApplication in 16.406 seconds (JVM running for
17.756)
看到最后一行的Started 说明启动成功
在浏览器中输入地址 http://127.0.0.1:8080/ 看到 Hello Docker!字样说明打包无问题能正常运行。
步骤三:上传文件和部署spring-boot程序
上传Dockerfile和jar包文件到虚拟机上面,我上传到 /usr/web2/ 下面(使用的FileZilla FTP Clent上传)

步骤四:构建docker镜像
在该docker文件下 指令:
docker build -t dockertest .
执行docker build命令,docker就会根据Dockerfile里你定义好的命令进行构建新的镜像。
1、替换docker 源为阿里的源
修改文件/etc/docker/daemon.json
{
"registry-mirrors": ["https://9cpn8tt6.mirror.aliyuncs.com"]
}
修改完成运行下面的命令
systemctl daemon-reload
systemctl restart docker
2、禁用IPV6
修改文件 /etc/default/grub 中增加 ipv6.disable=1
GRUB_CMDLINE_LINUX="ipv6.disable=1 rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet"
修改完成后运行下面的命令
grub2-mkconfig -o /boot/grub2/grub.cfg
重启虚拟机(也可以通过命令reboot重启)
3、设备管理器中找到网络适配器
Realtek PCIe GBE Family Controller 选择高级中的《大量传送减负 v2 (IPv4)》然后关闭
4、调整CentOS虚拟机的内存为2G
设置虚拟机的网络适配器NAT->高级选项 传入传输和传出输出设置为不受限)
build成功后启动docker程序
docker run -d -p : dockertest
-d表示后台运行 -p映射端口
查看镜像是否成功使用docker images

标红的就是我们上面创建名字为dockertest的docker镜像,tomcat忽略。
步骤五:运行spring-boot程序
停掉步骤二中本地运行的程序,不然不知道是不是构建成功了

看到熟悉的欢迎语句,大功告成。红框为虚拟机IP地址(设置本地和虚拟机链接也倒腾了很久,忘记记录遇到的问题了)
参考:
1、springboot整合docker部署(两种构建Docker镜像方式)
4、使用Docker Registry快速搭建私有镜像仓库 (如果是第二种方式的话首先要搭建私库+第5个参考,暂时没有研究)
【Linux】【自学笔记】docker搭建一个spring-boot程序的更多相关文章
- Spring Boot从入门到精通(一)搭建第一个Spring Boot程序
Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置.通过 ...
- 快速搭建一个Spring Boot + MyBatis的开发框架
前言:Spring Boot的自动化配置确实非常强大,为了方便大家把项目迁移到Spring Boot,特意总结了一下如何快速搭建一个Spring Boot + MyBatis的简易文档,下面是简单的步 ...
- 从零开始的Spring Boot(1、搭建一个Spring Boot项目Hello World)
搭建一个Spring Boot项目Hello World 写在前面 从零开始的Spring Boot(2.在Spring Boot中整合Servlet.Filter.Listener的方式):http ...
- 我的第一个spring boot程序(spring boot 学习笔记之二)
第一个spring boot程序 写在前面:鉴于spring注解以及springMVC的配置有大量细节和知识点,在学习理解之后,我们将直接进入spring boot的学习,在后续学习中用到注解及其他相 ...
- 第一章 第一个spring boot程序(转载)
第一章 第一个spring boot程序 本编博客转发自:http://www.cnblogs.com/java-zhao/p/5324185.html 环境: jdk:1.8.0_73 mave ...
- 第一个Spring Boot程序
Windows 10家庭中文版,java version "1.8.0_152", Eclipse Oxygen.1a Release (4.7.1a),Spring Tools ...
- 第一个Spring Boot程序启动报错了
创建完成第一个Spring Boot项目后,准备运行,尝一下胜利的果实. 启动日志如下 . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ...
- 从头开始搭建一个Spring boot+RabbitMQ环境
*:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...
- 如何搭建一个spring boot项目
什么是springboot? Spring Boot俗称微服务.Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特 ...
- Spring boot 官网学习笔记 - 开发第一个Spring boot web应用程序(使用mvn执行、使用jar执行)
Creating the POM <?xml version="1.0" encoding="UTF-8"?> <project xmlns= ...
随机推荐
- 系统定时任务crond
1.Linux的定时任务:crond(crontab)服务 (1)crond 是什么? crond 是 linux 系统中用来定期执行命令或者指定程序任务的一种服务和软件:crond 服务默认情况(每 ...
- 夯实Java基础系列21:Java8新特性终极指南
本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 ...
- JDK 1.8 之 Map.merge()
Map 中ConcurrentHashMap是线程安全的,但不是所有操作都是,例如get()之后再put()就不是了,这时使用merge()确保没有更新会丢失. 因为Map.merge()意味着我们可 ...
- IDEA 学习笔记之 Java项目开发深入学习(2)
Java项目开发深入学习(2): 查找变量被用到的地方 编译当前文件 增加变量watch 注意:我使用了keymap (eclipse模板),所以很多快捷键和eclipse一样. F5单步调试进入函数 ...
- MySql + Workbench使用教程
Mysql安装及使用 注意:不推荐下载zip版本,需要配置额外的环境变量和其他设置,很复杂.官方的windows安装版本可以自动完成所有操作. 下载地址:https://dev.mysql.com/d ...
- 我最推荐的一张Java后端学习路线图,Java工程师必备
前言 学习路线图往往是学习一样技术的入门指南.网上搜到的Java学习路线图也是一抓一大把. 今天我只选一张图,仅此一图,足以包罗Java后端技术的知识点.所谓不求最好,但求最全,学习Java后端的同学 ...
- 两种高效的事件处理模型:Reactor模式和Proactor模式
随着IO多路复用技术的出现,出现了很多事件处理模式.同步I/O模型通常由Reactor模式实现,而异步I/O模型则由Proactor模式实现. Reactor模式: Reator类图如上所示,Reac ...
- apply、bind、call方法的作用与区别
js中call.apply.bind方法的作用和区别 1. call方法 作用:专门用于修改方法内部的 this 指向 格式:xxx.call( 对象名, 参数1, 参数2 , ...);.即:将 x ...
- Java学习笔记之基础语法(数组)
数组 数组概述:是具有相同数据类型的数据的集合 数组的定义:数据类型 数组名 [] 数组特点: 1,数组是引用数据类型. 2,数组值用大括号,元素之间用逗号隔开,元素的个数是0-N个 3,数组长度是固 ...
- 从零开始搭建前端监控系统(三)——实现控制iframe前进后退
前言 本系列文章旨在讲解如何从零开始搭建前端监控系统. 项目已经开源 项目地址: https://github.com/bombayjs/bombayjs (web sdk) https://gith ...