写在开始

    最近捣腾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里你定义好的命令进行构建新的镜像。

-t代表要构建的镜像的tag,.代表当前目录,也就是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镜像方式)

2、springboot+docker

3、在Docker中运行SpringBoot程序

4、使用Docker Registry快速搭建私有镜像仓库 (如果是第二种方式的话首先要搭建私库+第5个参考,暂时没有研究)

5、使用Docker部署SpringBoot

【Linux】【自学笔记】docker搭建一个spring-boot程序的更多相关文章

  1. Spring Boot从入门到精通(一)搭建第一个Spring Boot程序

    Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置.通过 ...

  2. 快速搭建一个Spring Boot + MyBatis的开发框架

    前言:Spring Boot的自动化配置确实非常强大,为了方便大家把项目迁移到Spring Boot,特意总结了一下如何快速搭建一个Spring Boot + MyBatis的简易文档,下面是简单的步 ...

  3. 从零开始的Spring Boot(1、搭建一个Spring Boot项目Hello World)

    搭建一个Spring Boot项目Hello World 写在前面 从零开始的Spring Boot(2.在Spring Boot中整合Servlet.Filter.Listener的方式):http ...

  4. 我的第一个spring boot程序(spring boot 学习笔记之二)

    第一个spring boot程序 写在前面:鉴于spring注解以及springMVC的配置有大量细节和知识点,在学习理解之后,我们将直接进入spring boot的学习,在后续学习中用到注解及其他相 ...

  5. 第一章 第一个spring boot程序(转载)

    第一章 第一个spring boot程序 本编博客转发自:http://www.cnblogs.com/java-zhao/p/5324185.html   环境: jdk:1.8.0_73 mave ...

  6. 第一个Spring Boot程序

    Windows 10家庭中文版,java version "1.8.0_152", Eclipse Oxygen.1a Release (4.7.1a),Spring Tools ...

  7. 第一个Spring Boot程序启动报错了

    创建完成第一个Spring Boot项目后,准备运行,尝一下胜利的果实. 启动日志如下 . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ...

  8. 从头开始搭建一个Spring boot+RabbitMQ环境

    *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...

  9. 如何搭建一个spring boot项目

    什么是springboot? Spring Boot俗称微服务.Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特 ...

  10. Spring boot 官网学习笔记 - 开发第一个Spring boot web应用程序(使用mvn执行、使用jar执行)

    Creating the POM <?xml version="1.0" encoding="UTF-8"?> <project xmlns= ...

随机推荐

  1. Angular 路由守卫

    1. 路由 Angular路由: 可以控制页面跳转:可以在多视图间切换: 2. 路由守卫 Angular路由守卫: 在进入或离开某路由时,用于判断是否可以离开.进入某路由::: return true ...

  2. IDEA 学习笔记之 多线程调试

    多线程调试: 在多线程调试的时候,发现一些断点会被跳过,让人很郁闷,然后上网查了下资料,发现是自己IDEA设置不对. 使用IDEA调试多线程的时候,IDEA的断点有不同的模式,只有当Thread模式下 ...

  3. 快学Scala 第二课 (apply, if表达式,循环,函数的带名参数,可变长参数,异常)

    apply方法是Scala中十分常见的方法,你可以把这种用法当做是()操作符的重载形式. 像以上这样伴生对象的apply方法是Scala中构建对象的常用手法,不再需要使用new. if 条件表达式的值 ...

  4. Activity的四种加载模式详解:

    先来看看总结图: 模式详解: standard模式: 标准启动模式,也是activity的默认启动模式.在这种模式下启动的activity可以被多次实例化,即在同一个任务中可以存在多个activity ...

  5. group by 如何合并字符串优化记?

    sqlserver 2005及以上版本 表(tb) id    value 1     aa 2     cc 3     bb 3     dd 4     aa 4     cc 4     dd ...

  6. Spring 源码阅读 二

    程序入口: 接着上一篇博客中看完了在AnnotationConfigApplicationContext的构造函数中的register(annotatedClasses);将我们传递进来的主配置类添加 ...

  7. Unicode 和 UTF-8 之间的关系

    一.ASCII 码 我们知道,计算机内部,所有信息最终都是一个二进制值.每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte).也就是说,一个 ...

  8. python3爬虫环境搭建

    安装python3 sudo apt-get install python3-dev build-essential libssl-dev libffi-dev libxml2 libxml2-dev ...

  9. conversion function——转换函数

    类型转换函数 与 explicit关键字 1.类型转换函数 在C++中,可以使用构造函数将一个指定类型的数据转换为类的对象,也可以使用类型转换函数 (type conversion function) ...

  10. 移动端自动化测试Appium 从入门到项目实战Python版☝☝☝

    移动端自动化测试Appium 从入门到项目实战Python版 (一个人学习或许会很枯燥,但是寻找更多志同道合的朋友一起,学习将会变得更加有意义✌✌)  说到APP自动化测试,Appium可是说是非常流 ...