【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= ...
随机推荐
- Angular 路由守卫
1. 路由 Angular路由: 可以控制页面跳转:可以在多视图间切换: 2. 路由守卫 Angular路由守卫: 在进入或离开某路由时,用于判断是否可以离开.进入某路由::: return true ...
- IDEA 学习笔记之 多线程调试
多线程调试: 在多线程调试的时候,发现一些断点会被跳过,让人很郁闷,然后上网查了下资料,发现是自己IDEA设置不对. 使用IDEA调试多线程的时候,IDEA的断点有不同的模式,只有当Thread模式下 ...
- 快学Scala 第二课 (apply, if表达式,循环,函数的带名参数,可变长参数,异常)
apply方法是Scala中十分常见的方法,你可以把这种用法当做是()操作符的重载形式. 像以上这样伴生对象的apply方法是Scala中构建对象的常用手法,不再需要使用new. if 条件表达式的值 ...
- Activity的四种加载模式详解:
先来看看总结图: 模式详解: standard模式: 标准启动模式,也是activity的默认启动模式.在这种模式下启动的activity可以被多次实例化,即在同一个任务中可以存在多个activity ...
- group by 如何合并字符串优化记?
sqlserver 2005及以上版本 表(tb) id value 1 aa 2 cc 3 bb 3 dd 4 aa 4 cc 4 dd ...
- Spring 源码阅读 二
程序入口: 接着上一篇博客中看完了在AnnotationConfigApplicationContext的构造函数中的register(annotatedClasses);将我们传递进来的主配置类添加 ...
- Unicode 和 UTF-8 之间的关系
一.ASCII 码 我们知道,计算机内部,所有信息最终都是一个二进制值.每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte).也就是说,一个 ...
- python3爬虫环境搭建
安装python3 sudo apt-get install python3-dev build-essential libssl-dev libffi-dev libxml2 libxml2-dev ...
- conversion function——转换函数
类型转换函数 与 explicit关键字 1.类型转换函数 在C++中,可以使用构造函数将一个指定类型的数据转换为类的对象,也可以使用类型转换函数 (type conversion function) ...
- 移动端自动化测试Appium 从入门到项目实战Python版☝☝☝
移动端自动化测试Appium 从入门到项目实战Python版 (一个人学习或许会很枯燥,但是寻找更多志同道合的朋友一起,学习将会变得更加有意义✌✌) 说到APP自动化测试,Appium可是说是非常流 ...