使用docker技术部署项目时需要先准备Dockerfile文件然后再使用build 命令构建镜像,最后再使用run命令创建一个容器。经过这个繁琐的步骤之后突然发现项目里面有个地方写错了,这样的话是不是就要先停止容器,再删除容器,再删除镜像,然后重新再来一次构建镜像和创建容器的过程。下面我要通过一个脚本解决这个问题,话不多说上正文。

创建Dockerfile文件

#定制的镜像都是基于 FROM 的镜像,这里的 java:8 就是定制需要的基础镜像
FROM java:8

#镜像信息,通常此处写的是作者名或者邮箱地址
MAINTAINER lv

#拷贝文件或目录到容器中,跟ADD类似,但不具备自动下载或解压的功能(此处将demo.jar拷贝到了容器内)
COPY demo.jar demo.jar

#运行容器时执行的shell环境
CMD ["java","-jar","demo.jar"]

Dockerfile的作用

Ps:如果是java的项目可以使用上面的Dockerfile文件,java:8指定了java的版本,如果想更换版本更换后面的数字即可。MAINTAINER后面的作者信息也要更换成自己的信息。COPY 后面的两个参数就是将你打包好的jar包拷贝到容器内部,下面执行java -jar 命令时要用到这个jar包所以要拷贝到容器内。CMD命令后面的demo.jar把demo换成自己的jar包名字即可,这样一个简单的Dockerfile文件就写好了。如果需要指定环境变量使用ENV 指定即可。

创建自动化脚本

#源jar路径 (此处指定到要部署的jar包所在文件夹即可)
SOURCE_PATH=/usr/lv/jar/demo_jar
#docker 镜像/容器名字或者jar名字 这里都命名为这个
SERVER_NAME=demo
#版本号
TAG=latest
#容器映射出来的端口号
SERVER_PORT=5271
#容器id
CID=$(docker ps | grep "$SERVER_NAME" | awk '{print $1}')
#镜像id
IID=$(docker images | grep "$SERVER_NAME:$TAG" | awk '{print $3}')
#这里是容器是否已经存在的判断,如果存在就先stop容器再rm容器
if [ -n "$CID" ]; then
  echo "存在容器$SERVER_NAME, CID-$CID"
  docker stop $CID
  docker rm $CID
fi
#构建docker镜像,同样做是否存在的判断
if [ -n "$IID" ]; then
  echo "存在$SERVER_NAME:$TAG镜像,IID=$IID"
  docker rmi $IID
else
  echo "不存在$SERVER_NAME:$TAG镜像,开始构建镜像"
  cd $SOURCE_PATH
  docker build -t $SERVER_NAME:$TAG .
fi
# 运行docker容器
docker run -v /etc/localtime:/etc/localtime -v /etc/timezone:/etc/timezone:ro --name $SERVER_NAME -d -p $SERVER_PORT:$SERVER_PORT $SERVER_NAME:$TAG
echo "$SERVER_NAME容器创建完成"

docker run命令

docker build命令

Ps:需要将上述的脚本、Dockerfile文件和jar包放在同一路径下,然后执行自动脚本即可自动部署项目,如果项目有更新删除jar包重新上传再执行自动话脚本即可。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐