前言

编写docker启动脚本,实现服务器上自动化启动,包括pull代码maven打包docker构建镜像移除容器重新启动

运行环境

spring boot + docker

脚本

startWithDocker.sh

#!/bin/bash
  
# 定义常量
TAG=dev_mvp1.1 #docker tag
APP_NAME=test-api  #项目名称

# 查看所有容器
sudo docker ps -a

# 获取容器ID
containerId=`sudo docker ps -a | grep $APP_NAME | awk '{print $1}'`
echo "test-api contaninerId ${containerId}"

sudo docker stop $containerId
echo "stop ${APP_NAME} container ${containerId} "

sudo docker container rm $containerId
echo "rm container ${containerId}\n\n"

# build core 
cd test-core/
echo "pull test-core code..."
git pull
mvn clean install -Dmaven.test.skip=true
echo "test-core install end...\n\n"

# package api
cd ../test-api
echo "pull test-api code..."
git pull
mvn clean package -Dmaven.test.skip=true
echo "test-api package end..."

#  编译镜像
sudo docker build -t ccr.s.tencentyun.com/test/test-api:$TAG .
sudo docker push ccr.s.tencentyun.com/test/test-api:$TAG

# 获取镜像ID
imageId=`sudo docker images | grep $TAG | grep $APP_NAME  | awk '{print $3}'`
echo "find ${APP_NAME}.${TAG} imageId ${imageId}"

# 启动容器
sudo docker run -d -m 3g -p 8000:8000 --name $APP_NAME $imageId

# 获取启动的容器ID
# 循环获取,有可能容器还没启动好 -n:newContainerId是否赋值
newContainerId=`sudo docker ps -a  | grep $APP_NAME | awk '{print $1}'`
while [ ! -n "$newContainerId" ]
do
  # 没获取到容器ID,重新获取
  echo "try to get containerId"
  newContainerId=`sudo docker ps -a | grep $APP_NAME | awk '{print $1}'`
done

echo "${APP_NAME} restart success!!! New containerId ${newContainerId} "

# 查看日志
sudo docker logs --tail=500 -f $newContainerId

DockerFile

Dockerfile

FROM ccr.s.tencentyun.com/test/jdk-8u281
MAINTAINER Test<test@qq.com>

LABEL SERVICE_NAME=test-api
ENV MALLOC_ARENA_MAX=1
ENV DEPLOY_ENV=dev

ADD target/test-api.jar /opt/
ADD entrypoint.sh /opt/
RUN chmod a+x /opt/entrypoint.sh

CMD ["/opt/entrypoint.sh"]
总结

编写此脚本,熟悉shell中grepawk的使用和docker部署基本命令即可

Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐