使用Docker部署Spring Boot项目
本文使用Docker部署Spring Boot项目。部署之前需要环境中已经安装Docker和Maven(用于打包),所以本文先进行安装Docker和Maven;接着搭建一个Spring Boot项目,使其支持Docker部署;最后进行部署和测试。
环境搭建
安装Docker
检查系统内核版本
Docker运行在CentOS 7上,要求操作系统为64位,内核版本为3.10及以上。
确认本机已经安装了满足要求的Linux内核。使用命令uname -r
来检查内核版本信息。
[root@localhost ~]# uname -r 3.10.0-957.el7.x86_64 1 2
[root@localhost ~]# uname -r
3.10.0-957.el7.x86_64
1
2
在CentOS 7中安装Docker
使用命令yum install -y docker
安装Docker,“-y”表示不询问,使用默认配置进行安装。
启动Docker服务,并设置为开机自启动
使用下列命令:
systemctl start docker.service systemctl enable docker.service 1 2
systemctl start docker.service
systemctl enable docker.service
1
2
查看版本信息
输入docker version
,返回版本信息表明Docker安装成功。
[root@localhost ~]# docker version Client: Version: 1.13.1 API version: 1.26 Package version: docker-1.13.1-96.gitb2f74b2.el7.centos.x86_64 Go version: go1.10.3 Git commit: b2f74b2/1.13.1 Built: Wed May 1 14:55:20 2019 OS/Arch: linux/amd64 Server: Version: 1.13.1 API version: 1.26 (minimum version 1.12) Package version: docker-1.13.1-96.gitb2f74b2.el7.centos.x86_64 Go version: go1.10.3 Git commit: b2f74b2/1.13.1 Built: Wed May 1 14:55:20 2019 OS/Arch: linux/amd64 Experimental: false 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
[root@localhost ~]# docker version
Client:
Version: 1.13.1
API version: 1.26
Package version: docker-1.13.1-96.gitb2f74b2.el7.centos.x86_64
Go version: go1.10.3
Git commit: b2f74b2/1.13.1
Built: Wed May 1 14:55:20 2019
OS/Arch: linux/amd64
Server:
Version: 1.13.1
API version: 1.26 (minimum version 1.12)
Package version: docker-1.13.1-96.gitb2f74b2.el7.centos.x86_64
Go version: go1.10.3
Git commit: b2f74b2/1.13.1
Built: Wed May 1 14:55:20 2019
OS/Arch: linux/amd64
Experimental: false
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
安装Maven和配置阿里云镜像
下载Maven
wget https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gz
解压和移动
tar vxf apache-maven-3.5.4-bin.tar.gz mv apache-maven-3.5.4 /usr/local/maven3 1 2
tar vxf apache-maven-3.5.4-bin.tar.gz
mv apache-maven-3.5.4 /usr/local/maven3
1
2
配置环境变量
打开环境变量vim /etc/profile
,添加如下内容:
MAVEN_HOME=/usr/local/maven3 export MAVEN_HOME export PATH=${PATH}:${MAVEN_HOME}/bin 1 2 3
MAVEN_HOME=/usr/local/maven3
export MAVEN_HOME
export PATH=${PATH}:${MAVEN_HOME}/bin
1
2
3
保存并退出::wq
刷新环境变量的配置使其生效:source /etc/profile
JDK需要 提前安装
查看版本信息
使用命令mvn -v
进行查看
[root@localhost ~]# mvn -v Apache Maven 3.5.4 (1edded0938998edf8bf061f1ceb3cfdeccf443fe; 2018-06-18T02:33:14+08:00) Maven home: /usr/local/maven3 Java version: 1.8.0_211, vendor: Oracle Corporation, runtime: /usr/local/java/jdk1.8.0_211/jre Default locale: zh_CN, platform encoding: UTF-8 OS name: "linux", version: "3.10.0-957.el7.x86_64", arch: "amd64", family: "unix" 1 2
[root@localhost ~]# mvn -v
Apache Maven 3.5.4 (1edded0938998edf8bf061f1ceb3cfdeccf443fe; 2018-06-18T02:33:14+08:00)
Maven home: /usr/local/maven3
Java version: 1.8.0_211, vendor: Oracle Corporation, runtime: /usr/local/java/jdk1.8.0_211/jre
Default locale: zh_CN, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-957.el7.x86_64", arch: "amd64", family: "unix"
1
2
使用mvn package
命令进行打包,却报错,提示连接被拒绝。
解决办法:给Maven配置阿里云镜像
切换到maven安装目录下面,打开settings.xml文件,在<mirrors>
标签里面添加:
<mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>central</mirrorOf> </mirror> 1 2
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
1
2
Spring Boot项目添加Docker支持
新建Spring Boot工程
新建一个Spring Boot项目,添加一个简单的DockerController,方便进行测试。
@RestController @SpringBootApplication @RequestMapping("/docker") public class DockerController { @RequestMapping("/hello") @ResponseBody public String hello() { return "Hello Docker"; } } 1 2
x
@RestController
@SpringBootApplication
@RequestMapping("/docker")
public class DockerController {
@RequestMapping("/hello")
@ResponseBody
public String hello() {
return "Hello Docker";
}
}
1
2
添加Docker支持
在 pom.xml中添加Docker镜像名称
<properties> <docker.image.prefix>springboot</docker.image.prefix> </properties> 1 2
<properties>
<docker.image.prefix>springboot</docker.image.prefix>
</properties>
1
2
添加 Docker插件:
<!-- docker插件 --> <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> <!-- dockerfile 路径 根路径 ./ --> <directory>./</directory> <include>${project.build.finalName}.jar</include> </resource> </resources> </configuration> </plugin> 1 2 3 4
x
<!-- docker插件 -->
<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>
<!-- dockerfile 路径 根路径 ./ -->
<directory>./</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
1
2
3
4
编写Dockerfile文件
在目录src/main/docker下创建Dockerfile 文件,Dockerfile 文件用来说明如何来构建镜像。
FROM java:8 VOLUME /tmp ADD docker-0.0.1-SNAPSHOT.jar app.jar ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] 1 2 3 4
FROM java:8
VOLUME /tmp
ADD docker-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
1
2
3
4
FROM指令指定一个已经存在的镜像,告诉Docker后续的指令都是在这个基础上进行的。例如:FROM java:8
表示使用 Jdk1.8 环境为基础镜像进行构建镜像。
VOLUME ,VOLUME 指向了一个/tmp的目录,由于Spring Boot使用内置的Tomcat容器,Tomcat 默认使用/tmp作为工作目录。这个命令的效果是:在宿主机的/var/lib/docker目录下创建一个临时文件并把它链接到容器中的/tmp目录
ADD ,拷贝文件并且重命名
ENTRYPOINT,为了缩短Tomcat 的启动时间,添加java.security.egd的系统属性指向/dev/urandom作为ENTRYPOINT。
部署Spring Boot工程
将工程代码 docker 拷贝服务器中,进入项目路径下进行打包测试。
打包:mvn package
运行:java -jar target/spring-boot-docker-1.0.jar
项目启动成功,说明环境配置没有问题,接下来可以使用Dockerfile构建镜像。
构建Docker镜像mvn package docker:build
。可以看到docker镜像构建成功,仔细看日志,会发现四个步骤和Dockerfile中的指令是一一对应的。
使用docker images
命令查看构建好的镜像:
[root@localhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE springboot/docker latest 39aabeebb971 5 days ago 660 MB 1 2 3
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
springboot/docker latest 39aabeebb971 5 days ago 660 MB
1
2
3
运行docker镜像:docker run -p 8080:8080 -t springboot/docker
在本机浏览器进行访问,可以看到返回结果,说明部署成功。