前言
在 前面一篇文章 中,我们已经搭建了一套 SpringCloud 分布式系统,接下来就可以利用docker把它部署到云服务器上了,在这篇文章中不会涉及到复杂的容器编排工具,而是使用简单的 shell 脚本来将服务部署到docker容器中
使用的工具
Git
Maven
Docker
如果自己的服务器没有以上工具,可以根据自己的 linux系统发行版,选择 yum 或 agt-get 或 apk 软件包管理工具进行安装
项目部署步骤
既然我们要利用 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