【Linux】【自学笔记】docker搭建一个spring-boot程序

写在开始

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

-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 8080:8080 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

posted @ 2019-11-01 21:34  阿ki  阅读(335)  评论(0编辑  收藏  举报