1.15 打包部署

1.15.1 Docker化部署

随着系统数量越来越多、复杂度越来越高,传统的运维方式耗时耗力而且还容易出现故障。采用Docker化部署,为应用开发和运维带了了非常多的好处,可以简化配置、隔离应用、提升开发效率、让交付物标准化,为实现开发运维流水线管理提供了很好的基础。

  • (1) 环境准备
    安装过程这里不深入介绍,确认服务器上Docker 已启动,并且安装了docker仓库、开启了docker远程服务,通过docker –v 确认安装成功和当前版本。

安装docker私有仓库的过程如下:

1
2
3
4
5
6
>docker pull registry

docker run -d -p 5000:5000 --restart=always -h registry \
--name registry \
-v /Users/zgq/docker/volumes/registry:/tmp/registry \
registry
1
2
>docker exec -it registry sh #进入容器
> Ctrl-p Ctrl-q#退出

查看仓库内容

1
>curl -XGET http://IP:5000/v2/_catalog

确认服务器开启了远程服务

  • (a)Linux环境
    编辑docker.service:
    1
    vim /usr/lib/systemd/system/docker.service

添加下面参数:

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

重启Docker:

1
2
3

systemctl daemon-reload // 1,加载docker守护线程
systemctl restart docker // 2,重启docker•
  • (b)Mac环境
    安装socat:
    1
    brew install socat

启动:

1
socat -d TCP-LISTEN:2375,range=127.0.0.1/32,reuseaddr,fork UNIX:/var/run/docker.sock

docker远程服务的默认端口号为2375,可以在本机使用以下命令查看仓库的镜像:

1
docker –H IP:2375 images
  • (2)SpringBoo配置
  • Step1 : 配置POM文件*

默认情况下,Pom插件通过访问IP:2375来连接服务器上的docker,docker的镜像上传。我们需要修改POM文件,添加docker 插件来实现。以下例子仓库所在地址为本机。

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<docker.host>http://127.0.0.1:2375</docker.host>
<docker.repostory>127.0.0.1:5000</docker.repostory>
<docker.registry.name>zone7</docker.registry.name>
<docker.plugin.version>0.4.13</docker.plugin.version>

<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>${docker.plugin.version}</version>
<executions>
<execution>
<id>build-image</id>
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
<execution>
<id>push-image</id>
<phase>deploy</phase>
<goals>
<goal>push</goal>
</goals>
<configuration>
<imageName>${docker.repostory}/${docker.registry.name}/${project.artifactId}:${project.version}</imageName>
</configuration>
</execution>
</executions>
<configuration>
<registryUrl>${docker.repostory}</registryUrl>
<pushImage>true</pushImage>
<dockerHost>${docker.host}</dockerHost>
<dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
<imageName>${docker.repostory}/${docker.registry.name}/${project.artifactId}:${project.version}</imageName>
<imageTags>
<imageTag>${project.version}</imageTag>
</imageTags>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>

Step2 : 配置Dockerfile文件

我们还需要在src/main/docker下创建Dockerfile文件,文件内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
FROM livingobjects/jre8
VOLUME /tmp
ADD app.jar app.jar

RUN echo "export LC_ALL=zh_CN.UTF-8" >> /etc/profile
ENV LANG="zh_CN.UTF-8"
#RUN apk add -U tzdata
#RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
#RUN echo 'Asia/Shanghai' >/etc/timezone

ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
EXPOSE 8080

Step3:执行打包发布命令
接下来我们在IDEA的控制台执行命令:

1
mvn clean package docker:build

docker 部署1

通过下面命令查看镜像是否发布成功。

1
docker –H 127.0.0.1:2375 images

例如:
docker 部署2

Step4:启动Docker镜像
运行容器

1
docker run -d -p 8080:8080 127.0.0.1:5000/zone7/zone7-rule:2.0.3.RELEASE /bin/bash

查看启动日志

1
docker logs -f -t --tail 100 65a9d1e9621f

docker 部署3

Step5:查看SpringBoot应用启动情况
执行命令:

1
docker exec –it  /bin/bash

docker 部署4

通过进程我们看到SpringBoot应用已经启动。

1.15.2 Web容器部署

采用War方式部署需要先进行打包,然后再部署到Tomcat或者weblogic 等WEB容器,在IDEA环境下打War十分简单,操作如下图所示。
web 部署1

然后执行build artifacts即可

web 部署2

也可以使用Maven打包,只需要修改POM文件的package参数为war:

1
2


war

然后执行“mvn clean package” 命令即可。