使用Docker部署Spring Cloud项目

Docker技术发展为微服务落地提供了更加便利的环境,Docker配合Kubernetes,可以编排容器,通俗来说,就是通过Kubernetes,可以监控微服务的响应情况,请求多服务响应慢时自动拉起Docker服务,来缓解服务压力,且不需要人工干预

本文实现系统上线时,把项目打包为容器

Docker安装

(1)Docker安装启动

1
2
3
4
5
yum update
yum install docker
systemctl start docker.service
systemctl enable docker.service
docker version

(2)使用Docker 中国加速器

1
2
3
4
5
6
7
vi /etc/docker/daemon.json

#添加后:
{
"registry-mirrors": ["https://registry.docker-cn.com"],
"live-restore": true
}

(3)开通docker远程访问功能,打开/usr/lib/systemd/system/docker.service文件,找到ExecStart这行,在中间,修改为:

1
ExecStart=/usr/bin/dockerd  -H tcp://0.0.0.0:2375  -H unix:///var/run/docker.sock

重新启动docker

1
2
systemctl daemon-reload    
systemctl restart docker

测试远程访问是否生效:curl http://127.0.0.1:2375/info

创建SpringBoot项目

(1)pom.xml中添加依赖,设置docker-maven-plugin插件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<!-- 注意了,项目名要全小写,否则等下docker:build时,会保存 -->
<artifactId>eureka</artifactId>

<!-- 定义docker镜像的前缀 -->
<properties>
<docker.image.prefix>cn.appblog</docker.image.prefix>
</properties>

<!-- 添加一个wen依赖,提供web服务 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<!-- 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>

(2)创建一个 DockerController,在其中有一个index()方法,访问时返回:Hello Docker!

1
2
3
4
5
6
7
8
@RestController
public class DockerController {

@RequestMapping("/")
public String index() {
return "Hello Docker!";
}
}

启动项目,启动成功后浏览器放问:http://localhost:8080/ ,页面返回:Hello Docker!,说明 Spring Boot 项目配置正常。

(3)在目录src/main/docker下创建Dockerfile文件,Dockerfile文件用来说明如何来构建镜像

1
2
3
4
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ADD erueka-0.0.1.jar app.jar
ENTRYPOINT ["sh","-c","java $PARAMS -Djava.security.egd=file:/dev/./urandom -jar /app.jar"]
  • FROM,表示使用 Jdk8 环境 为基础镜像,如果镜像不是本地的会从 DockerHub 进行下载
  • VOLUME,VOLUME 指向了一个/tmp的目录,由于 Spring Boot 使用内置的Tomcat容器,Tomcat 默认使用/tmp作为工作目录。这个命令的效果是:在宿主机的/var/lib/docker目录下创建一个临时文件并把它链接到容器中的/tmp目录
  • ADD,拷贝文件并且重命名
  • ENTRYPOINT,定义一个$PARAMS参数,启动docker镜像,执行java -jar eureka.jar时可以传递进来,为了缩短 Tomcat 的启动时间,添加java.security.egd的系统属性指向/dev/urandom作为 ENTRYPOINT

$PARAMS参数讲解下,以前使用java -jar xx.jar --server.port=8081,自定义启动参数,现在使用docker run时,通过$PARAMS来达到同样效果

这样 Spring Boot 项目添加 Docker 依赖就完成了,把项目复制到虚拟机上去,并在项目目录下执行:

1
mvn clean package 

成功后,会在当前目录多一个target文件夹,里面有打包后的文件,使用java -jar eureka.jar启动,然后访问看能否成功

(4)使用docker-maven-plugin插件打包成镜像

1
mvn package docker:build

(5)使用docker images查看打包的镜像

(6)使用docker run -e PARAMS='-Xms128m -Xmx256m' -p 8080:8080 example/apiaccept运行镜像,此时的PARAMS就会传递启动jar的参数

(7)使用docker ps查看运行的镜像

(8)访问 http://192.168.68.18:8080/ ,因为虚拟机的ip是192.168.68.18

Powered by AppBlog.CN     浙ICP备14037229号

Copyright © 2012 - 2021 APP开发技术博客 All Rights Reserved.

访客数 : | 访问量 :