实现脚本自动部署docker

前言:

使用场景是 我这边的一个单体项目需要多一个多副本的部署方式,一直输入重复命令我实在是嫌烦了,使用写了一个脚本来一键更新部署上去。jar包都是我手动上传的,没有把包传入公网库里。

之所以记录就是因为遇到了几个没有遇到过的问题记录以下。

示例:
#!/bin/bash

进入指定文件夹打包成image

cd /soft/xx/xx/

停止和删除包含 "mobile" 在名称中的容器

docker ps | grep "mobile" | awk '{print $1}' | xargs docker stop
docker rm m1
docker rm m2
docker rm m3

构建 Docker 镜像并获取其 ID

IMAGE_ID=$(docker build -t xxx:Tag . -q)

使用镜像 ID 运行 Docker 容器

docker run -d -p 0001:8080 --name mobile2 -v /opt/xx/:/opt/xx/ $IMAGE_ID
docker run -d -p 0002:8080 --name mobile1 -v /opt/xx/:/opt/xx/ $IMAGE_ID
docker run -d -p 0003:8080 --name mobile3 -v /opt/xx/:/opt/xx/ $IMAGE_ID
省略每次输入 chmod +x script 这个命令,可以将脚本复制到一个在系统 PATH 中的目录中,这样就可以在任何地方执行它,而无需添加 ./ 前缀或手动更改权限。
可以将脚本复制到 /usr/local/bin/ 目录中:
sudo cp 脚本文件名 /usr/local/bin/
然后就可以在任何地方都只需要输入 脚本名称就可以执行。

错误一:-bash: /usr/local/bin/runpoject: Permission denied 没有权限的命令
这个错误是由于权限问题引起的,它表示你没有足够的权限来执行 /usr/local/bin/runpoject 脚本。这是因为 /usr/local/bin 目录通常需要超级用户权限才能写入。
你可以尝试以下步骤来解决这个问题:

使用尝试使用以下命令:

sudo chmod +x /usr/local/bin/script
错误二:-bash: /usr/local/bin/runpoject: /bin/bash^M: bad interpreter: No such file or directory 转义符的原因
这个错误消息表明你的脚本文件包含了 Windows 风格的换行符(\r\n),而不是 Linux 风格的换行符(\n)。这种问题可能会导致解释器无法找到正确的路径。
要解决这个问题,你可以使用文本编辑器将脚本文件转换为 Linux 风格的换行符。

你可以使用 dos2unix 命令来进行转换,如果系统没有安装这个命令,可以尝试使用 sed 命令来进行转换,如下所示:
sed -i 's/\r$//' /usr/local/bin/script

亲测可以解决问题。