【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= ...
随机推荐
- vue平行组件传值
平行组件传值 通过平行组件传值可以实现任何情境下的传值,包括(父传子,子传父) 代码示例 <!DOCTYPE html> <html lang="en"> ...
- Java基础学习笔记(二) - 面向对象基础
面向对象 一.面向对象概述 面向对象思想就是在计算机程序设计过程中,参照现实事物,将事物的属性特征.行为特征抽象出来,描述成计算机时间的设计思想.面向对象思想区别于面向过程思想,强调的是通过调用对象的 ...
- latex转word公式 java (latextoword,latex_word,latex2word,latex_omml)
latex_word 主要目的: 给大家分享一个我的原创作品:latex转为word公式(omml)工具 [java] 此工具主要用于将含有latex公式的文本下载成word时,将latex转 ...
- Drill 学习笔记之 与Mongo性能测试比较
性能测试: 竟然用了30秒.... 如果使用mongo 客户端只有1-2秒 感觉Drill是把数据拉过来再进行sql优化,并没有使用Mongo的API,效率低下让人失望...
- Vue/React圆环进度条
数据展示,一直是各行各业乐此不疲的需求,具体到前端开发行业,则是各种各种图表数据展示,各种表格数据展示,烦不胜烦(繁不胜繁)! 前几天刚做了折线图.柱状图.饼状图之类的图表数据展示效果,今天又碰到了类 ...
- js对象参考手册 -戈多编程
今天来总结下常用的熟记的js api (一)JavaScript对象 (1)Array 对象属性:(3个) constructor lengh prototype 对象方法:(14个) contat( ...
- [ZJOI2006]物流运输trans
Description 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转停好几个码头.物流公司通常会设计一条固定的运输路线,以便对整个运输过程实施严格 ...
- golang初探与命令源码分析
前段时间有群友在群里问一个go语言的问题: 就是有一个main.go的main函数里调用了另一个demo.go里的hello()函数.其中main.go和hello.go同属于main包.但是在mai ...
- 最简单的ArcGIS Engine应用程序(终)
在上文的基础上,下面将使用简单的代码实现要素类属性的查看.(最简单的ArcGIS Engine应用程序(下)) 新增一个窗体,并从工具箱拖动DataGridView控件到该窗体中.设置该对象的Dock ...
- [JZOJ4685] 【NOIP2016提高A组8.12】礼物
Description 夏川的生日就要到了.作为夏川形式上的男朋友,季堂打算给夏川买一些生日礼物.商店里一共有种礼物.夏川每得到一种礼物,就会获得相应喜悦值Wi(每种礼物的喜悦值不能重复获得).每次, ...