一、對(duì)項(xiàng)目進(jìn)行容器化
在項(xiàng)目的根目錄下新建一個(gè)名為 Dockerfile 的文件來(lái)定義Docker的鏡像層
FROM openjdk:8-jdk-alpine
MAINTAINER yong.fei <best.fei@good.com>
ENV TZ=Asia/Shanghai
RUN ln -sf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
VOLUME /tmp
ADD mocksite-1.0.0.jar mocksite.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/mocksite.jar"]
腳本解析
1、FROM openjdk:8-jdk-alpine 表示鏡像是從 openjdk:8-jdk-alpin 繼承而來(lái)的
2、VOLUME /tmp 表示掛載了 /tmp 目錄到容器中,此目錄為 Spring Boot 為 tomcat 創(chuàng)建的默認(rèn)目錄。
3、ADD mocksite-1.0.0.jar mocksite.jar 表示從目錄中把 mocksite-1.0.0.jar 包添加到鏡像中,并重命名mocksite.jar
這步做的目的,會(huì)在下一段中說(shuō)明
4、ENTRYPOINT 在容器啟動(dòng)后執(zhí)行 java 命令來(lái)運(yùn)行程序
二、修改build.gradle
1、在buildscript.dependencies節(jié)點(diǎn)中,加入classpath('se.transmode.gradle:gradle-docker:1.2')
2、新增 apply plugin: 'docker'
3、新增
jar {
baseName = 'mocksite'
version = '1.0.0'
}
task buildDocker(type: Docker, dependsOn: build) {
applicationName = jar.baseName
tagVersion = "latest"
dockerfile = file('Dockerfile')
doFirst {
copy {
from jar
into stageDir
}
}
}
這里的jar定義,表示打出名為mocksite-1.0.0.jar的包
添加了 doFirst 方法,主要是把通過(guò) jar 任務(wù)生成的歸檔文件拷貝到 stageDir 目錄下
可以通過(guò)執(zhí)行g(shù)radle buildDocker命令來(lái)生成 Docker 鏡像
三、push到鏡像倉(cāng)庫(kù)并完成部署
定義一個(gè)shell文件
#!/bin/bash
set -e
gradle clean build buildDocker -x test --info
docker_username=best.fei
docker_pwd=dockerAccountPwd
docker_project=qa/mocksite
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}
#push latest分支
#docker tag ${docker_image} ${docker_server_addr}/${docker_image}
#docker push ${docker_server_addr}/${docker_image}
#push 指定tag分支
docker tag ${docker_image} ${docker_server_addr}/${docker_project}:${docker_tag}
docker push ${docker_server_addr}/${docker_project}:${docker_tag}
#登錄到遠(yuǎn)程服務(wù)器
sshpass ssh bestfei@18.18.18.18 -i /Users/feiyong/.ssh/user-rsa << 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}
#更新部署latest分支
#docker pull ${docker_server_addr}/${docker_image}
#docker run -p 8848:8080 -d --name mocksite ${docker_server_addr}/${docker_image}
#更新部署指定tag分支
docker pull ${docker_server_addr}/${docker_project}:${docker_tag}
docker run -p 8848:8080 -d --name mocksiteph3 ${docker_server_addr}${docker_project}:${docker_tag}
exit
eeooff