使用sshpass及docker-compose实现容器远程热更新
sshpass 为非交互式的密码验证工具并且可以执行shell命令docker-compose为docker的命令行管理工具,通过配置yaml文件实现docker容器的配置及无缝更新等操作,与k8s类似架构思想A机器上的sshpass非交互式操控B机器的docker-compose来更新不同目录下的不同项目#部署#A安装sshpassapt-get install -y sshpass#B安装do
·
sshpass 为非交互式的密码验证工具并且可以执行shell命令
docker-compose为docker的命令行管理工具,通过配置yaml文件实现docker容器的配置及无缝更新等操作,与k8s类似
架构思想
A机器上的sshpass非交互式操控B机器的docker-compose来更新不同目录下的不同项目
#部署
#A安装sshpass
apt-get install -y sshpass
#B安装docker-compose
curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.4/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
#验证
docker-compose -version
#A:编写sshpass脚本
vim sshpass.sh
#!/bin/sh
image=$1
application=$2
sshpass -p '密码' ssh -p端口 用户@ip 'echo '$image' > /home/root1/collages/compose/images.txt && sh /home/root1/collages/compose/updata.sh '$application''
B:
#yaml文件举例
vim docker-compose.yaml
version: "2"
services:
apartment:
image: 镜像名
ports:
- "1000:1000"
volumes:
- "/home/root1/collages/apartment/config:/work/config"
restart: always
#文件树
root1@root1-virtual-machine:~/collages/compose$ tree
.
├── apartment
│ └── docker-compose.yaml
├── classspace
│ └── docker-compose.yaml
├── coresrv
│ └── docker-compose.yaml
└── yx
└── docker-compose.yaml
#更新脚本
vim updata.sh
#!/bin/bash
application=$1
#新镜像
image=`cat /home/root1/collages/compose/images.txt`
echo $image
#老镜像
oldimage=`cat /home/root1/collages/compose/$application/docker-compose.yaml | grep image | awk '{print $2}'`
#更新镜像
echo $oldimage
sed -i "s;${oldimage};${image};g" /home/root1/collages/compose/$application/docker-compose.yaml
echo $?
#启动
/usr/local/bin/docker-compose -f /home/root1/collages/compose/$application/docker-compose.yaml up -d
#测试
docker ps
###注:如果提示普通用户无法使用docker命令 将其加入docker组中即可,需要重新开启命令窗口刷新环境变量
sudo gpasswd -a root1 docker
更多推荐
已为社区贡献4条内容
所有评论(0)