前言
编写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中grep
和awk
的使用和docker部署基本命令即可