使用Docker部署Spring Cloud项目
Docker技术发展为微服务落地提供了更加便利的环境,Docker配合Kubernetes,可以编排容器,通俗来说,就是通过Kubernetes,可以监控微服务的响应情况,请求多服务响应慢时自动拉起Docker服务,来缓解服务压力,且不需要人工干预
本文实现系统上线时,把项目打包为容器
Docker安装
(1)Docker安装启动
yum update
yum install docker
systemctl start docker.service
systemctl enable docker.service
docker version
(2)使用Docker 中国加速器
vi /etc/docker/daemon.json
#添加后:
{
"registry-mirrors": ["https://registry.docker-cn.com"],
"live-restore": true
}
(3)开通docker远程访问功能,打开/usr/lib/systemd/system/docker.service
文件,找到ExecStart
这行,在中间,修改为:
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
重新启动docker
systemctl daemon-reload
systemctl restart docker
测试远程访问是否生效:curl http://127.0.0.1:2375/info
创建SpringBoot项目
(1)pom.xml
中添加依赖,设置docker-maven-plugin
插件
<!-- 注意了,项目名要全小写,否则等下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!
@RestController
public class DockerController {
@RequestMapping("/")
public String index() {
return "Hello Docker!";
}
}
启动项目,启动成功后浏览器放问:http://localhost:8080/ ,页面返回:Hello Docker!
,说明 Spring Boot 项目配置正常。
(3)在目录src/main/docker
下创建Dockerfile
文件,Dockerfile
文件用来说明如何来构建镜像
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 依赖就完成了,把项目复制到虚拟机上去,并在项目目录下执行:
mvn clean package
成功后,会在当前目录多一个target
文件夹,里面有打包后的文件,使用java -jar eureka.jar
启动,然后访问看能否成功
(4)使用docker-maven-plugin
插件打包成镜像
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
版权声明:
作者:Joe.Ye
链接:https://www.appblog.cn/index.php/2023/04/01/deploying-spring-cloud-project-using-docker/
来源:APP全栈技术分享
文章版权归作者所有,未经允许请勿转载。
共有 0 条评论