Files
shell_tools/docker-tools/docker-tools

673 lines
22 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# Docker 工具
# 参数配置
## 版本号
VERSION=1.1.0
## 当前的日期、日期时间
DATE=`date +%Y%m%d`
DATETIME=`date +%Y%m%d`_`date +%H%M%S`
## 服务器 CPU 架构
CPU_ARCH=x86_64
## Docker 安装目录
DOCKER_INSTALL_DIR=/opt/docker/bin
## Docker 数据目录
DOCKER_DATA_DIR=/opt/docker/data
## 是否离线安装
NEED_OFFLINE_INSTALL=false
## 是否安装 Docker Engine
NEED_INSTALL_ENGINE=true
## Docker 版本号
DOCKER_VERSION=28.0.2
## Docker 安装包下载地址(在线安装时使用)
DOCKER_PACKAGE_URL=https://download.docker.com/linux/static/stable
## Docker 安装包名称(离线安装时使用)
DOCKER_PACKAGE_NAME=docker-28.0.2.tgz
## 是否安装 Docker Compose
NEED_INSTALL_COMPOSE=true
## Docker Compose 版本号
DOCKER_COMPOSE_VERSION=v2.34.0
## Docker Compose 安装包下载地址(在线安装时使用)
DOCKER_COMPOSE_PACKAGE_URL=https://github.com/docker/compose/releases/download
## Docker Compose 安装包名称(离线安装时使用)
DOCKER_COMPOSE_PACKAGE_NAME=docker-compose-linux-x86_64
## 是否需要设置 Docker 开机自启动
NEED_ENABLE_DOCKER=true
# 相关方法
## 帮助信息
help () {
version
echo ''
echo '使用方式: docker-tools 参数 选项'
echo '参数说明:'
echo ' -v Docker 版本(可选,默认安装 28.0.1 版本)'
echo ' -i Docker 安装目录(可选,默认为 /opt/docker/bin'
echo ' -d Docker 数据目录(可选,默认为 /opt/docker/data'
echo ' -p Docker 安装包名称(可选,仅离线安装时使用,默认为在线安装)'
echo ' -c Docker Compose 版本(可选,默认安装 v2.34.0 版本)'
echo ' -n Docker Compose 安装包名称(可选,仅离线安装时使用,默认为在线安装)'
echo ' -a 仅安装 Docker Engine可选默认安装 Docker Engine 和 Docker Compose '
echo ' -b 仅安装 Docker Compose可选默认安装 Docker Engine 和 Docker Compose '
echo '选项说明:'
echo ' version 查看工具版本'
echo ' install 安装 Docker'
echo ' uninstall 卸载 Docker'
echo ' start 启动 Docker'
echo ' stop 停止 Docker'
echo ' restart 重启 Docker'
echo ' enable 设置 Docker 开机自启动'
echo ' disable 取消 Docker 开机自启动'
echo ' update 更新 Docker 版本'
echo ' info 查看 Docker 信息'
echo '示例:'
echo ' 安装 Docker (使用默认配置) docker-tools install'
echo ' 安装 Docker (使用自定义配置) docker-tools -v 28.0.1 -i /data/docker/bin -d /data/docker/data -p docker-28.0.1.tgz -c v2.34.0 -n docker-compose-linux-x86_64 install'
echo ' 安装 Docker (仅安装 Docker Engine docker-tools -oe install'
echo ' 安装 Docker (仅安装 Docker Compose docker-tools -oc install'
echo ' 卸载 Docker (使用默认配置) docker-tools uninstall'
echo ' 卸载 Docker (使用自定义配置) docker-tools -v 28.0.1 -i /data/docker/bin -d /data/docker/data -p docker-28.0.1.tgz -c v2.34.0 -n docker-compose-linux-x86_64 uninstall'
echo ' 重启 Docker docker-tools restart'
echo ' 设置 Docker 开机自启动 docker-tools enable'
echo ' 取消 Docker 开机自启动 docker-tools disable'
echo ' 查看 Docker 信息 docker-tools info'
}
## 版本号
version () {
echo 'docker-tools '$VERSION' HTY1024 '
}
## 查询 CPU 架构
searchCPUArch () {
echo '------------------------------ 开始设置 CPU 架构... ------------------------------'
CPU_ARCH=`arch`
echo '------------------------------ CPU 架构设置完成! ------------------------------'
}
## 创建目录
createDir () {
echo '------------------------------ 开始创建相关目录... ------------------------------'
mkdir -pv $DOCKER_INSTALL_DIR
mkdir -pv $DOCKER_DATA_DIR
mkdir -pv /etc/docker
echo '------------------------------ 所需目录创建完成! ------------------------------'
}
## 删除目录
deleteDir () {
echo '------------------------------ 开始删除相关目录... ------------------------------'
rm -rf $DOCKER_INSTALL_DIR
rm -rf $DOCKER_DATA_DIR
rm -rf /etc/docker
echo '------------------------------ 相关目录删除完成! ------------------------------'
}
## 创建用户
createUser () {
echo '------------------------------ 开始创建 Docker 用户... ------------------------------'
groupadd -r -g 1001 docker
useradd -r -g docker -u 1001 -d /home/docker -s /bin/bash docker
echo '------------------------------ Docker 用户创建完成! ------------------------------'
}
## 删除用户
deleteUser () {
echo '------------------------------ 开始删除 Docker 用户... ------------------------------'
groupdel docker
userdel docker
echo '------------------------------ Docker 用户删除完成! ------------------------------'
}
## 配置系统参数
configSystem () {
echo '------------------------------ 开始配置系统参数... ------------------------------'
modprobe br_netfilter
echo 'net.bridge.bridge-nf-call-ip6tables = 1' > /etc/sysctl.d/docker.conf
echo 'net.bridge.bridge-nf-call-iptables = 1' >> /etc/sysctl.d/docker.conf
echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.d/docker.conf
sysctl --system
echo '------------------------------ 系统参数配置完成! ------------------------------'
}
## 移除参数
removeSystemConfig () {
echo '------------------------------ 开始删除系统参数... ------------------------------'
rm -rf /etc/sysctl.d/docker.conf
sysctl --system
echo '------------------------------ 系统参数删除完成! ------------------------------'
}
## 下载 Docker 安装包
downloadDockerEnginePackage () {
echo '------------------------------ 开始下载 Docker 安装包... ------------------------------'
wget $DOCKER_PACKAGE_URL/$CPU_ARCH/docker-$DOCKER_VERSION.tgz
DOCKER_PACKAGE_NAME=docker-$DOCKER_VERSION.tgz
echo '------------------------------ Docker 安装包下载完成! ------------------------------'
}
## 删除 Docker 安装包
removeDockerEnginePackage () {
echo '------------------------------ 开始删除 Docker 安装包... ------------------------------'
rm -rf $DOCKER_PACKAGE_NAME
echo '------------------------------ Docker 安装包删除完成! ------------------------------'
}
## 下载 Docker Compose 安装包
downloadDockerComposePackage () {
echo '------------------------------ 开始下载 Docker Compose 安装包... ------------------------------'
wget $DOCKER_COMPOSE_PACKAGE_URL/$DOCKER_COMPOSE_VERSION/docker-compose-linux-$CPU_ARCH
DOCKER_COMPOSE_PACKAGE_NAME=docker-compose-linux-$CPU_ARCH
echo '------------------------------ Docker Compose 安装包下载完成! ------------------------------'
}
## 删除 Docker Compose 安装包
removeDockerComposePackage () {
echo '------------------------------ 开始删除 Docker Compose 安装包... ------------------------------'
rm -rf $DOCKER_COMPOSE_PACKAGE_NAME
echo '------------------------------ Docker Compose 安装包删除完成! ------------------------------'
}
## 安装 Docker Engine
installDockerEngine () {
echo '------------------------------ 开始安装 Docker Engine... ------------------------------'
tar zxvf $DOCKER_PACKAGE_NAME -C $DOCKER_INSTALL_DIR --strip-components 1
echo '------------------------------ Docker Engine 安装完成! ------------------------------'
}
## 备份当前 Docker Engine () {
backupDockerEngine () {
echo '------------------------------ 开始备份 Docker Engine... ------------------------------'
cp -rpf $DOCKER_INSTALL_DIR $DOCKER_INSTALL_DIR'_bak_'$DATETIME
echo '------------------------------ Docker Engine 备份完成! ------------------------------'
}
## 安装 Dokcer Compose
installDockerCompose () {
echo '------------------------------ 开始安装 Docker Compose... ------------------------------'
cp -rpf ./$DOCKER_COMPOSE_PACKAGE_NAME $DOCKER_INSTALL_DIR/docker-compose
chown docker.docker $DOCKER_INSTALL_DIR/docker-compose
chmod +x $DOCKER_INSTALL_DIR/docker-compose
echo '------------------------------ Docker Compose 安装完成! ------------------------------'
}
## 备份当前 Docker Coimpose
backupDockerCompose () {
echo '------------------------------ 开始备份 Docker Compose... ------------------------------'
mkdir -pv $DOCKER_INSTALL_DIR'_bak_'$DATETIME
cp -rpf $DOCKER_INSTALL_DIR/docker-compose $DOCKER_INSTALL_DIR'_bak_'$DATETIME/docker-compose
echo '------------------------------ Docker Compose 备份完成! ------------------------------'
}
## 配置环境变量
configEnv () {
echo '------------------------------ 开始配置环境变量... ------------------------------'
cp -rpf ~/.bashrc ~/.bashrc.bak.$DATETIME
echo '# Docker Env Begin' >> ~/.bashrc
echo 'export DOCKER_HOME='$DOCKER_INSTALL_DIR >> ~/.bashrc
echo 'export PATH=$PATH:$DOCKER_HOME' >> ~/.bashrc
echo '# Docker Env End' >> ~/.bashrc
source ~/.bashrc
cp -rpf /etc/profile /etc/profile.bak.$DATETIME
echo '# Docker Env Begin' >> /etc/profile
echo 'export DOCKER_HOME='$DOCKER_INSTALL_DIR >> /etc/profile
echo 'export PATH=$PATH:$DOCKER_HOME' >> /etc/profile
echo '# Docker Env End' >> /etc/profile
source /etc/profile
echo '------------------------------ 环境变量配置完成! ------------------------------'
}
## 移除环境变量
removeEnv () {
echo '------------------------------ 开始移除环境变量... ------------------------------'
cp -rpf ~/.bashrc ~/.bashrc.bak.$DATETIME
sed -i 's/# Docker Env Begin//g' ~/.bashrc
sed -i 's#export DOCKER_HOME='$DOCKER_INSTALL_DIR'##g' ~/.bashrc
sed -i 's/export PATH=$PATH:$DOCKER_HOME//g' ~/.bashrc
sed -i 's/# Docker Env End//g' ~/.bashrc
source ~/.bashrc
cp -rpf /etc/profile /etc/profile.bak.$DATETIME
sed -i 's/# Docker Env Begin//g' /etc/profile
sed -i 's#export DOCKER_HOME='$DOCKER_INSTALL_DIR'##g' /etc/profile
sed -i 's/export PATH=$PATH:$DOCKER_HOME//g' /etc/profile
sed -i 's/# Docker Env End//g' /etc/profile
source /etc/profile
echo '------------------------------ 环境变量移除完成! ------------------------------'
}
## 配置系统服务
configService () {
echo '------------------------------ 开始配置系统服务... ------------------------------'
cp -rpf docker.service /usr/lib/systemd/system/docker.service
cp -rpf docker.socket /usr/lib/systemd/system/docker.socket
sed -i 's#{{DOCKER_BIN_DIR}}#'$DOCKER_INSTALL_DIR'#g' /usr/lib/systemd/system/docker.service
systemctl daemon-reload
echo '------------------------------ 系统服务配置完成! ------------------------------'
}
## 移除系统服务
removeService () {
echo '------------------------------ 开始移除系统服务... ------------------------------'
rm -rf /usr/lib/systemd/system/docker.service
rm -rf /usr/lib/systemd/system/docker.socket
systemctl daemon-reload
echo '------------------------------ 系统服务移除完成! ------------------------------'
}
## 配置 Docker
configDockerEngine () {
echo '------------------------------ 开始配置 Docker... ------------------------------'
cp -rpf daemon.json /etc/docker/daemon.json
sed -i 's#{{DOCKER_DATA_DIR}}#'$DOCKER_DATA_DIR'#g' /etc/docker/daemon.json
chown -R docker.docker $DOCKER_INSTALL_DIR
chmod -R 755 $DOCKER_INSTALL_DIR
chown -R docker.docker $DOCKER_DATA_DIR
hmod -R 755 $DOCKER_DATA_DIR
echo '------------------------------ Docker 配置完成! ------------------------------'
}
## 启动 Docker
startDocker () {
echo '------------------------------ 开始启动 Docker... ------------------------------'
systemctl start docker
echo '------------------------------ Docker 启动完成! ------------------------------'
}
## 停止 Docker
stopDocker () {
echo '------------------------------ 开始停止 Docker... ------------------------------'
systemctl stop docker
echo '------------------------------ Docker 停止完成! ------------------------------'
}
## 重启 Docker
restartDocker () {
stop
start
}
## 设置 Docker 自启动
enableDocker () {
echo '------------------------------ 开始设置 Docker 自启动... ------------------------------'
systemctl enable docker
echo '------------------------------ Docker 自启动设置完成! ------------------------------'
}
## 取消 Docker 自启动
disableDocker () {
echo '------------------------------ 开始取消 Docker 自启动... ------------------------------'
systemctl disable docker
echo '------------------------------ Docker 自启动取消完成! ------------------------------'
}
## 查询 Dokcer 信息
infoDocker () {
echo '------------------------------ 开始查询 Docker 信息... ------------------------------'
docker info
echo '------------------------------ Docker 信息查询完成! ------------------------------'
}
## 安装 Docker Engine
onlyInstallDockerEngine () {
echo '------------------------------ 开始安装 Docker Engine... ------------------------------'
searchCPUArch
createDir
createUser
configSystem
if [ $NEED_OFFLINE_INSTALL == "false" ];then
downloadDockerEnginePackage
fi
installDockerEngine
configEnv
configService
configDockerEngine
startDocker
if [ $NEED_ENABLE_DOCKER == "true" ];then
enableDocker
fi
infoDocker
echo '------------------------------ Docker Engine 安装完成! ------------------------------'
}
## 安装 Docker Compose
onlyInstallDockerCompose () {
echo '------------------------------ 开始安装 Docker Compose... ------------------------------'
searchCPUArch
if [ $NEED_OFFLINE_INSTALL == "false" ]; then
downloadDockerComposePackage
fi
installDockerCompose
restartDocker
infoDocker
echo '------------------------------ Docker Conpose 安装完成! ------------------------------'
}
## 更新 Dokcer Engine
onlyUpdateDockerEngine () {
echo '------------------------------ 开始更新 Docker Engine... ------------------------------'
searchCPUArch
if [ $NEED_OFFLINE_INSTALL == "false" ];then
downloadDockerEnginePackage
fi
disableDocker
stopDocker
backupDockerEngine
installDockerEngine
startDocker
if [ $NEED_ENABLE_DOCKER == "true" ];then
enableDocker
fi
infoDocker
echo '------------------------------ Docker Engine 更新完成! ------------------------------'
}
## 更新 Dokcer Compose
onlyUpdateDockerCompose () {
echo '------------------------------ 开始更新 Docker Compose... ------------------------------'
searchCPUArch
if [ $NEED_OFFLINE_INSTALL == "false" ]; then
downloadDockerComposePackage
fi
backupDockerCompose
installDockerCompose
restartDocker
infoDocker
echo '------------------------------ Docker Conpose 更新完成! ------------------------------'
}
## 安装 Docker
install () {
echo '===================================================================================================='
echo `date +%Y-%m-%d` `date +%H:%M:%S`
echo '============================== 开始安装 Docker ...... =============================='
echo '安装参数如下 '
echo 'CPU 架构 '$CPU_ARCH
echo 'Docker 安装目录 '$DOCKER_INSTALL_DIR
echo 'Docker 数据目录 '$DOCKER_DATA_DIR
echo '是否离线安装 '$NEED_OFFLINE_INSTALL
echo '是否安装 Docker Engine '$NEED_INSTALL_ENGINE
echo 'Docker Engine 版本 '$DOCKER_VERSION
echo 'Docker Engine 安装包下载地址(在线安装时使用): '$DOCKER_PACKAGE_URL
echo 'Docker Engine 安装包名称(离线安装时使用) '$DOCKER_PACKAGE_NAME
echo '是否安装 Docker Compose '$NEED_INSTALL_COMPOSE
echo 'Docker Compose 版本 '$DOCKER_COMPOSE_VERSION
echo 'Docker Compose 安装包下载地址(在线安装时使用) '$DOCKER_COMPOSE_PACKAGE_URL
echo 'Docker Compose 安装包名称(离线安装时使用) '$DOCKER_COMPOSE_PACKAGE_NAME
echo '是否开机自动启动: '$NEED_ENABLE_DOCKER
echo '请确认安装参数是否正确并根据提示进入安装Y安装N不安装E退出'
read NEED_DELETE
case $NEED_DELETE in
Y)
if [ $NEED_INSTALL_ENGINE == "true" ]; then
onlyInstallDockerEngine
fi
if [ $NEED_INSTALL_COMPOSE == "true" ]; then
onlyInstallDockerCompose
fi
;;
N)
echo '取消安装。'
;;
E)
echo '退出安装。'
exit 1
;;
*)
echo '参数错误。'
exit 1
;;
esac
echo '============================== Docker 安装完成!!! =============================='
echo `date +%Y-%m-%d` `date +%H:%M:%S`
echo '===================================================================================================='
}
## 卸载 Docker
uninstall () {
echo '===================================================================================================='
echo `date +%Y-%m-%d` `date +%H:%M:%S`
echo '============================== 开始卸载 Docker ...... =============================='
echo '删除目录如下 '
echo 'Docker 安装目录 '$DOCKER_INSTALL_DIR
echo 'Docker 数据目录 '$DOCKER_DATA_DIR
echo '此操作将会卸载 Docker 服务,并删除所有文件(包含 Docker 程序文件、镜像、容器文件等请确认是否卸载Y卸载N不卸载E退出'
read NEED_DELETE
case $NEED_DELETE in
Y)
disableDocker
stopDocker
removeService
removeEnv
removeSystemConfig
deleteUser
deleteDir
;;
N)
echo '取消卸载。'
;;
E)
echo '退出卸载。'
exit 1
;;
*)
echo '参数错误。'
exit 1
;;
esac
echo '============================== Docker 卸载完成!!! =============================='
echo `date +%Y-%m-%d` `date +%H:%M:%S`
echo '===================================================================================================='
}
## 更新 Docker
update () {
echo '===================================================================================================='
echo `date +%Y-%m-%d` `date +%H:%M:%S`
echo '============================== 开始更新 Docker ...... =============================='
echo '更新参数如下 '
echo 'CPU 架构 '$CPU_ARCH
echo 'Docker 安装目录 '$DOCKER_INSTALL_DIR
echo 'Docker 数据目录 '$DOCKER_DATA_DIR
echo '是否离线安装 '$NEED_OFFLINE_INSTALL
echo '是否安装 Docker Engine '$NEED_INSTALL_ENGINE
echo 'Docker Engine 版本 '$DOCKER_VERSION
echo 'Docker Engine 安装包下载地址(在线安装时使用): '$DOCKER_PACKAGE_URL
echo 'Docker Engine 安装包名称(离线安装时使用) '$DOCKER_PACKAGE_NAME
echo '是否安装 Docker Compose '$NEED_INSTALL_COMPOSE
echo 'Docker Compose 版本 '$DOCKER_COMPOSE_VERSION
echo 'Docker Compose 安装包下载地址(在线安装时使用) '$DOCKER_COMPOSE_PACKAGE_URL
echo 'Docker Compose 安装包名称(离线安装时使用) '$DOCKER_COMPOSE_PACKAGE_NAME
echo '是否开机自动启动: '$NEED_ENABLE_DOCKER
echo '此操作将会更新当前 Docker 版本存在一定风险请确认是否更新Y更新N不更新E退出'
read NEED_UPDATE
case $NEED_UPDATE in
Y)
if [ $NEED_INSTALL_ENGINE == "true" ]; then
onlyUpdateDockerEngine
fi
if [ $NEED_INSTALL_COMPOSE == 'true' ]; then
onlyUpdateDockerCompose
fi
;;
N)
echo '取消更新。'
;;
E)
echo '退出更新。'
exit 1
;;
*)
echo '参数错误。'
exit 1
;;
esac
echo '============================== Docker 更新完成!!! =============================='
echo `date +%Y-%m-%d` `date +%H:%M:%S`
echo '===================================================================================================='
}
# 初始化选项
echo $@
while getopts "v:i:d:p:c:n:ab" opt; do
case $opt in
v)
## 设置 Docker Engine 版本
DOCKER_VERSION="$OPTARG"
echo '用户自定义 Docker Engine 版本: '$OPTARG
;;
i)
## 设置 Docker 安装目录
DOCKER_INSTALL_DIR="$OPTARG"
echo '用户自定义 Docker 安装目录: '$OPTARG
;;
d)
## 设置 Docker 数据目录
DOCKER_DATA_DIR="$OPTARG"
echo '用户自定义 Docker 数据目录: '$OPTARG
;;
p)
## 设置 Docker 安装包名称
NEED_OFFLINE_INSTALL=true
DOCKER_PACKAGE_NAME="$OPTARG"
echo '【离线安装】用户自定义 Docker Engine 安装包名称: '$OPTARG
;;
c)
## 设置 Docker Compose 版本
DOCKER_COMPOSE_VERSION="$OPTARG"
echo '用户自定义 Docker Compose 版本: '$OPTARG
;;
n)
## 设置 Docker Compose 安装包名称
NEED_OFFLINE_INSTALL=true
DOCKER_COMPOSE_PACKAGE_NAME="$OPTARG"
echo '【离线安装】用户自定义 Docker Compose 安装包名称: '$OPTARG
;;
a)
## 设置仅安装 Docker Engine
NEED_INSTALL_ENGINE=true
NEED_INSTALL_COMPOSE=false
echo '用户自定义: 仅安装 Docker Engine'
;;
b)
## 设置仅安装 Docker Compose
NEED_INSTALL_ENGINE=false
NEED_INSTALL_COMPOSE=true
echo '用户自定义: 仅安装 Docker Compose'
;;
esac
done
# 移除已经使用的参数
shift $((OPTIND-1))
# 根据参数执行方法
case $@ in
help)
help
;;
version)
version
;;
install)
install
;;
uninstall)
uninstall
;;
update)
update
;;
info)
info
;;
start)
startDocker
;;
stop)
stopDocker
;;
restart)
restartDocker
;;
enable)
enableDocker
;;
disable)
disableDocker
;;
*)
help
;;
esac