Docker Centos8 运行 SpringBoot 项目
项目根路径下创建一个 Dockerfile
FROM openjdk:8-jdk-alpine
VOLUME /tmp
# 添加生成的jar包到容器中, 容器构建镜像时会指定jar包的路径,所以这里只需要文件名即可
ADD [生成的jar包的名字].jar app.jar
ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "app.jar", "--spring.profiles.active=test", "-c"]
服务器上提前安装好jdk和maven
这里先不依赖jenkins打包, 直接使用脚本构建
Centos8 安装 JDK
$ yum -y install java-1.8.0-openjdk
# 测试
$ java -version
openjdk version "1.8.0_292"
OpenJDK Runtime Environment (build 1.8.0_292-b10)
OpenJDK 64-Bit Server VM (build 25.292-b10, mixed mode)
Centos8 安装 Maven
# 下载
$ https://mirrors.cnnic.cn/apache/maven/maven-3/3.8.1/binaries/apache-maven-3.8.1-bin.tar.gz
# 解压
$ tar vxf apache-maven-3.3.9-bin.tar.gz
# 设置环境变量
$ export MAVEN_HOME=/usr/lib/maven
$ export PATH=${PATH}:${MAVEN_HOME}/bin
$ source /etc/profile
# 测试
$ mvn -v
Apache Maven 3.8.1 (05c21c65bdfed0f71a2f2ada8b84da59348c4c5d)
Maven home: /opt/apache-maven-3.8.1
Java version: 1.8.0_292, vendor: Red Hat, Inc., runtime: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.292.b10-0.el8_3.x86_64/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "4.18.0-240.15.1.el8_3.x86_64", arch: "amd64", family: "unix"
异常
No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?
解决办法:
yum install -y java-devel
创建源代码仓库
# 根目录
$ mkdir -p /opt/demon-cms
# 拉取源代码
$ git clone xxxx.git /opt/demon-cms/repository
# 测试构建是否正常
$ cd /opt/demon-cms/repository
$ mvn clean package -Dmaven.test.skip=true
编写构建脚本
#进入根目录
cd /opt/demon-cms/repository
# 拉取代码, 强制用远程分支覆盖本地分支
git fetch --all
git reset --hard origin/master
# 打包代码
mvn clean package -Dmaven.test.skip=true
# 容器名字
SERVER_NAME=demon-cms
#容器id
CID=$(docker ps | grep "$SERVER_NAME" | awk '{print $1}')
#镜像id
IID=$(docker images | grep "$SERVER_NAME" | awk '{print $3}')
#当前日期
DATE=`date +%Y%m%d`
#清除旧容器
if [ -n "$CID" ]; then
echo "存在$SERVER_NAME容器,CID=$CID"
echo "停止旧容器"
docker stop $SERVER_NAME
echo "删除旧容器"
docker rm $SERVER_NAME
fi
# 清楚旧镜像
if [ -n "$IID" ]; then
echo "存在$SERVER_NAME镜像,IID=$IID"
echo "删除镜像"
docker rmi $IID
fi
#构建镜像
echo "开始构建镜像"
docker build -f ./demon-cms-admin/Dockerfile -t
# 这里的/target 是 Dockerfile里面的 ADD 的根目录
$SERVER_NAME:v${DATE} ./demon-cms-admin/target
echo "构建镜像成功!"
# 运行docker容器
echo "创建并启动$SERVER_NAME容器..."
docker run --name $SERVER_NAME -d -p 8888:8888 -v /data/logs/demon-cms:/data/logs/demon-cms $SERVER_NAME:v${DATE}
echo "$SERVER_NAME容器启动完成"