写在开始
最近捣腾Linux,安装虚拟机VMware并安装了CentOS 7系统,开始研究Linux,但是无从下手,就结合工作中用到的东西一步一步研究,事实并不是那么顺利。特此开博客,记录在过程中遇到的问题,方便温顾。也希望能帮助更多人。文中存在引用其余大佬的博客和话语。如有版权或者冒犯,请指正。
安装环境准备
虚拟机VMware
Java IDEA
CentOS 7 64位
搭建详情和步骤
步骤一:搭建docker(遇到很多问题,忘记记录了)
1 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)
1 <?xml version="1.0" encoding="UTF-8"?>
2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4 <modelVersion>4.0.0</modelVersion>
5
6 <groupId>com.neo</groupId>
7 <artifactId>spring-boot-docker</artifactId>
8 <version>1.0</version>
9 <packaging>jar</packaging>
10
11 <name>spring-boot-docker</name>
12 <description>Demo project for Spring Boot</description>
13
14 <parent>
15 <groupId>org.springframework.boot</groupId>
16 <artifactId>spring-boot-starter-parent</artifactId>
17 <version>2.0.0.RELEASE</version>
18 </parent>
19
20 <properties>
21 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
22 <java.version>1.8</java.version>
23 <docker.image.prefix>springboot</docker.image.prefix>
24 </properties>
25
26 <dependencies>
27 <dependency>
28 <groupId>org.springframework.boot</groupId>
29 <artifactId>spring-boot-starter-web</artifactId>
30 </dependency>
31 <dependency>
32 <groupId>org.springframework.boot</groupId>
33 <artifactId>spring-boot-starter-test</artifactId>
34 <scope>test</scope>
35 </dependency>
36 </dependencies>
37
38 <build>
39 <plugins>
40 <plugin>
41 <groupId>org.springframework.boot</groupId>
42 <artifactId>spring-boot-maven-plugin</artifactId>
43 </plugin>
44 <!-- Docker maven plugin -->
45 <plugin>
46 <groupId>com.spotify</groupId>
47 <artifactId>docker-maven-plugin</artifactId>
48 <version>1.0.0</version>
49 <configuration>
50 <imageName>${docker.image.prefix}/${project.artifactId}</imageName>
51 <dockerDirectory>src/main/docker</dockerDirectory>
52 <resources>
53 <resource>
54 <targetPath>/</targetPath>
55 <directory>${project.build.directory}</directory>
56 <include>${project.build.finalName}.jar</include>
57 </resource>
58 </resources>
59 </configuration>
60 </plugin>
61 <!-- Docker maven plugin -->
62 </plugins>
63 </build>
64
65
66 </project>
Dockerfile
1 FROM openjdk:8-jdk-alpine
2 VOLUME /tmp
3 ADD spring-boot-docker-1.0.jar app.jar
4 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文件
1 package com.neo.controller;
2
3 import org.springframework.web.bind.annotation.RequestMapping;
4 import org.springframework.web.bind.annotation.RestController;
5
6 @RestController
7 public class DockerController {
8
9 @RequestMapping("/")
10 public String index() {
11 return "Hello Docker!";
12 }
13 }
spring启动类
1 package com.neo;
2
3 import org.springframework.boot.SpringApplication;
4 import org.springframework.boot.autoconfigure.SpringBootApplication;
5
6 @SpringBootApplication
7 public class DockerApplication {
8
9 public static void main(String[] args) {
10 SpringApplication.run(DockerApplication.class, args);
11 }
12 }
准备好本地需要的文件
Dockerfile
spring-boot-docker-1.0.jar
本地用maven命令编译项目即可
mvn package
完成后再target目录下面执行下面命令查看打包有无问题
Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 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)
2019-11-01 20:51:53.484 INFO 1240 --- [ main] com.neo.DockerApplicati
on : Starting DockerApplication v1.0 on PC-20190106EDZE with PID
1240 (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)
2019-11-01 20:51: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 8080:8080 dockertest
-d表示后台运行 -p映射端口
查看镜像是否成功使用docker images
标红的就是我们上面创建名字为dockertest的docker镜像,tomcat忽略。
步骤五:运行spring-boot程序
停掉步骤二中本地运行的程序,不然不知道是不是构建成功了
看到熟悉的欢迎语句,大功告成。红框为虚拟机IP地址(设置本地和虚拟机链接也倒腾了很久,忘记记录遇到的问题了)
参考:
1、springboot整合docker部署(两种构建Docker镜像方式)
4、使用Docker Registry快速搭建私有镜像仓库 (如果是第二种方式的话首先要搭建私库+第5个参考,暂时没有研究)
来源:oschina
链接:https://my.oschina.net/u/4395907/blog/3356639