0%

Docker之部署脚本.deploysh

说明

假如我要使用docker构建容器部署springboot项目,步骤:

  1. 把jar包上传到服务器上
  2. 创建DockFile文件
  3. 编译镜像
    docker build -t test.
  4. 启动容器
    docker run --name test -p 8080:8080 -d test

–name为指定容器的名称;
-p指定容器暴露的端口
-d以后台进程运行
每次更新jar包时,只需执行docker stop testdocker start test就可以了,就将新的应用进行了发布。
上面步骤虽然解决了更新jar包的问题,但是又出现了一个问题就是在Dockerfile中将使用的jar包名称写死了,这样每次更新jar包必须是同样的jar包,这样当应用从1.1版本更新1.2版本时就很痛苦,需要将本是1.2版本的jar包改名为1.1,这样会导致后续jar包的错乱。为了解决这个问题,我们就可以使用.deploysh脚本啦,模版如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#!/bin/bash

CURRENT=`pwd`
cd $(dirname $0)

if [ $# != 3 ] ; then
echo Error ! $0 app.jar config_dir name
echo PORT in yml/properties file to config AND SPRING_PROFILES_ACTIVE=online
exit 1;
fi

DOCKER_NAME=$3
TAG_NAME=`date +%s`

set -e -x

TMP="/tmp/docker-template/"
rm -rf $TMP
mkdir $TMP

cp $CURRENT/$1 "$TMP/app.jar"
cp -r $CURRENT/$2 "$TMP/config/"
cp Dockerfile "$TMP/Dockerfile"

cd $TMP

sudo /usr/bin/docker build . -t $DOCKER_NAME:$TAG_NAME --build-arg JAR=app.jar
sudo /usr/bin/docker tag $DOCKER_NAME:$TAG_NAME $DOCKER_NAME:latest

sudo /usr/bin/docker ps|grep $DOCKER_NAME && sudo /usr/bin/docker stop $DOCKER_NAME
sudo /usr/bin/docker ps -a|grep $DOCKER_NAME && sudo /usr/bin/docker rm $DOCKER_NAME
sudo /usr/bin/docker run -d --net host --restart always --name $DOCKER_NAME -v /var/log/:/var/log/ $DOCKER_NAME:$TAG_NAME

rm -rf $TMP

通过此脚本,每次更新应用时我们就可以.deploysh test.jar conf/ test就可以啦,是不是方便多啦_
conf是和jar包基于同级目录的配置目录,conf目录下放springboot项目的配置文件,eg:applicaion.yml,运行容器时就会加载此配置文件。

usage

demo:

1
./deploy.sh ready-to-deploy.jar ./config-directory/ docker-cotainer-name

SPRING_PROFILES_ACTIVE is “online”, Server port is config IN application-online.yml / application-online.properties with default.

欣赏此文?求鼓励,求支持!