使用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全栈技术分享
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
打赏
海报
使用Docker部署Spring Cloud项目
Docker技术发展为微服务落地提供了更加便利的环境,Docker配合Kubernetes,可以编排容器,通俗来说,就是通过Kubernetes,可以监控微服务的响应情况,请求多服……
<<上一篇
下一篇>>
文章目录
关闭
目 录