搭建 SpringCloud 微服务系统并使用 Docker 一键部署到云服务器 (下)

1,115 阅读3分钟

前言

前面一篇文章 中,我们已经搭建了一套 SpringCloud 分布式系统,接下来就可以利用docker把它部署到云服务器上了,在这篇文章中不会涉及到复杂的容器编排工具,而是使用简单的 shell 脚本来将服务部署到docker容器中

使用的工具

Git
Maven
Docker

如果自己的服务器没有以上工具,可以根据自己的 linux系统发行版,选择 yumagt-getapk 软件包管理工具进行安装

项目部署步骤

既然我们要利用 docker 进行安装部署,那么就需要为每个子工程编写 Dockerfile 文件,在编写 Dockerfile 之前,我们先在父工程的 pom 文件加上 docker 插件

 		<!--docker 插件-->
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <dependencies>
                    <dependency>
                        <groupId>javax.activation</groupId>
                        <artifactId>activation</artifactId>
                        <version>1.1.1</version>
                    </dependency>
                </dependencies>
                <version>0.4.13</version>
                <configuration>
                    <imageName>com.github.chb/${project.artifactId}:${project.version}</imageName>
                    <forceTags>true</forceTags>
                    <baseImage>java</baseImage>
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <directory>${project.build.directory}</directory>
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                </configuration>
            </plugin>

接下来编写 Dockerfile 文件,并放在各个子工程的根目录下,以 eureka-server 服务为例

#网易镜像中心的Java
FROM hub.c.163.com/library/java:8
#自己项目Jar包的路径,eureka.jar可以自定义
ADD target/*.jar eureka.jar.jar
#端口
EXPOSE 8888
#运行Jar
ENTRYPOINT ["java", "-jar", "/eureka.jar.jar"]

把编写好 Dockerfile 文件的项目放到 git 仓库上,然后在服务器上拉取自己的项目代码

git clone https://gitee.com/chehb/movie-ticketing-system

然后进入项目根目录

cd movie-ticketing-system

现在就可以使用 Maven 对项目进行打包了

mvn clean install

稍等片刻,Maven 就会帮我们把整个项目打包好,看到下面的结果即为打包成功

如果进入各个子工程就会看到多了一个 target 目录,比如:

查看 target 目录,红色的文件名即为我们需要的 jar

在本项目中,我已经编写好了启停容器的脚本文件,如下:

只需要执行 sh build_start.sh即可编译镜像并启动容器

至此,等待容器启动完成部署就成功了。

执行 sh stop.sh 即可停止容器并删除镜像

如果提示了没有执行权限,可以使用以下命令赋予权限

chmod 777 build_start.sh
chmod 777 stop.sh

脚本文件的具体内容如下,其实就是集中了一些简单的docker命令,可以根据自己的需求进行修改,也可以编写更智能的脚本文件

#! /bin/bash
echo "################## start build####################"
cd api-geteway && docker build -t api-geteway . && cd ..
cd eureka-server && docker build -t eureka . && cd ..
cd hystrix-dashboard && docker build -t hystrix-dashboard . && cd ..
cd microserver-user && docker build -t user . && cd ..
cd microservice-movie && docker build -t movie . && cd ..
cd springcloud-config-server && docker build -t config . && cd ..
cd spring-oauth2 && docker build -t oauth2 . && cd ..
cd zipkin-server && docker build -t zipkin . && cd ..
echo "################# build finish############"

echo "############# start run ######################"

docker run -d --name eureka -p 8888:8888 eureka
echo "run eureka"
echo "wait 5s"
sleep 5
docker run -d --name config -p 10003:10003 config
echo "run config"
docker run -d --name oauth2 -p 10004:10004 oauth2
echo "run oauth2"
echo "wait 90s"
sleep 90
docker run -d --name api-geteway -p 9999:9999 api-geteway
echo "run api-geteway"
docker run -d --name user -p 10001:10001 user
echo "run user"
echo "wait 25s"
sleep 25
docker run -d --name movie -p 10002:10002 movie
echo "run movie"
echo "################### success ####################"
#! /bin/bash

docker stop movie user oauth2 config eureka api-geteway

docker rm movie user oauth2 config eureka api-geteway


docker rmi api-geteway eureka hystrix-dashboard user movie config oauth2 zipkin