一、对项目进行容器化
在项目的根目录下新建一个名为 Dockerfile 的文件来定义Docker的镜像层
FROM openjdk:8-jdk-alpine
MAINTAINER best.fei <best.fei@good.com>
VOLUME /tmp
ADD remocker-0.0.1-SNAPSHOT.jar /ReMocker.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/ReMocker.jar"]
脚本解析
1、FROM openjdk:8-jdk-alpine
表示镜像是从 openjdk:8-jdk-alpin 继承而来的
2、VOLUME /tmp
表示挂载了 /tmp 目录到容器中,此目录为 Spring Boot 为 tomcat 创建的默认目录。
3、remocker-0.0.1-SNAPSHOT.jar /ReMocker.jar
表示从目录中把 remocker-0.0.1-SNAPSHOT.jar 包添加到镜像中,并重命名 ReMocker.jar
这步做的目的,会在下一段中说明
打出包的名称之所以叫remocker-0.0.1-SNAPSHOT.jar,是因为在pom.xml有如下配置
<artifactId>remocker</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
4、ENTRYPOINT 在容器启动后执行 java 命令来运行程序
二、修改pom.xml
1、properties节点增加docker.image.prefix
<properties>
<docker.image.prefix>qa</docker.image.prefix>
</properties>
2、增加docker build插件
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.1.1</version>
<configuration>
<imageName>${docker.image.prefix}/${project.artifactId}:latest</imageName>
<dockerDirectory>${project.basedir}/</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
三、最后编写shell脚本
完成自动编译 部署
#!/bin/bash
set -e
./mvnw clean package docker:build
docker_username=best.fei
docker_pwd=dockerPwd
docker_project=qa/remocker
docker_server_addr=harbor.best.fei.com
docker_tag=v1_0_0
docker_image=${docker_project}:latest
docker login -u${docker_username} -p${docker_pwd} ${docker_server_addr}
docker tag ${docker_image} ${docker_server_addr}/${docker_project}:${docker_tag}
docker push ${docker_server_addr}/${docker_project}:${docker_tag}
sshpass ssh bestfei@18.18.18.18 << eeooff
echo "========= docker stop ========="
docker ps -a | grep "${docker_server_addr}/${docker_project}" | awk '{print \$1}'|xargs docker stop
echo "========= docker rm ========="
docker ps -a | grep "${docker_server_addr}/${docker_project}" | awk '{print \$1}'|xargs docker rm
echo "========= docker rmi ========="
docker images | grep "${docker_server_addr}/${docker_project}"|awk '{print \$3}'|xargs docker rmi
docker login -u${docker_username} -p${docker_pwd} ${docker_server_addr}
docker pull ${docker_server_addr}/${docker_image}
docker run -p 8818:8080 -d --name remocker ${docker_server_addr}/${docker_image}
exit
eeooff
网友评论