shell脚本安装Docker(rpm版)
2021/6/30 7:20:42
本文主要是介绍shell脚本安装Docker(rpm版),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
#!/bin/bash # vim:sw=4:ts=4:et <<INFO AUTHOR:运维@小兵 DATE:2021-01-28 DESCRIBE:1、rpm方式安装/卸载Docker,可以指定数据盘作为Docker的存储盘 SYSTEM:CentOS7/RedHat7 WARNING: MODIFY: INFO set -e WORKDIR=$(cd `dirname $0`;pwd) LOG_PATH=${WORKDIR}/docker.log DOCKER_VERSION="18.09.0" DOCKER_STORAGE="/data/docker" #使用逻辑卷时,挂载到该路径 VG_NAME="dockervg" LV_NAME="${VG_NAME}_storage" #${FUNCNAME[1]代表调用该函数的函数,$LINENO代表当前代码行号 Log(){ local log_level=$1 local log_info=$2 local line=$3 local script_name=$(basename $0) case ${log_level} in "INFO") echo -e "\033[32m$(date "+%Y-%m-%d %T.%N") [INFO]: ${log_info}\033[0m";; "WARN") echo -e "\033[33m$(date "+%Y-%m-%d %T.%N") [WARN]: ${log_info}\033[0m";; "ERROR") echo -e "\033[31m$(date "+%Y-%m-%d %T.%N") [ERROR ${script_name} ${FUNCNAME[1]}:$line]: ${log_info}\033[0m";; *) echo -e "${@}" ;; esac } # 检查当前环境 Check_Env(){ local docker_status=$(systemctl is-active docker) if [[ ${docker_status} == "active" ]];then Log WARN "Docker Is Installed" && exit 0 elif which docker &> /dev/null ]];then Log WARN "Docker Is Installed" && exit 0 fi if ! grep '^docker:' /etc/group &> /dev/null;then groupadd docker fi if [[ ! -d ${WORKDIR}/rpm_x86 ]];then Log ERROR "${WORKDIR}/rpm_x86 Not Found" $LINENO && exit 1 fi } # 创建逻辑卷,当作Docker存储路径 Create_Lvm(){ Log INFO "Begin Create LVM....." local disk_name=$1 local disk_num=$(fdisk -l |grep "${disk_name}" |wc -l) [[ ${disk_num} -gt 1 ]] && Log ERROR "${disk_name} Is Used,Please Format or Change New Disk" $LINENO && exit 1 if pvs | grep -w ${disk_name};then Log ERROR "${disk_name} Is Used,Please Format or Change New Disk" $LINENO && exit 1 fi Log INFO "挂载磁盘为:${disk_name}" #创建卷组 if ! vgs | grep -w "${VG_NAME}" >/dev/null;then vgcreate "${VG_NAME}" "${disk_name}" else Log ERROR "${VG_NAME} Is Exist" $LINENO && exit 1 fi #创建逻辑卷 if ! lvs | grep -w "${LV_NAME}" >/dev/null;then lvcreate -n ${LV_NAME} -l 100%VG ${VG_NAME} -y mkfs.ext4 /dev/${VG_NAME}/${LV_NAME} >/dev/null else Log ERROR "${LV_NAME} Is Exist" $LINENO && exit 1 fi if lvs | grep -w ${LV_NAME};then Log INFO "${LV_NAME} Create Success" else Log ERROR "${LV_NAME} Create Faild" $LINENO && exit 1 fi # 挂载逻辑卷 if [[ ! -d ${DOCKER_STORAGE} ]];then mkdir -p ${DOCKER_STORAGE} local uuid=$(blkid | grep -w "${VG_NAME}-${LV_NAME}" |awk '{print $2}') [[ ! -f /etc/fstab.bak ]] && cp /etc/fstab{,.bak} sed -ri "s#(.*)${DOCKER_STORAGE}(.*)##" /etc/fstab #防止多次写入相同的挂载内容 echo "${uuid} ${DOCKER_STORAGE} ext4 defaults 0 0" >> /etc/fstab sed -i '/^$/d' /etc/fstab mount -a if df -h | grep -w "${DOCKER_STORAGE}$";then Log INFO "${DOCKER_STORAGE} Mount Success" else Log ERROR "${DOCKER_STORAGE} Mount Faild" $LINENO && exit 1 fi else Log ERROR "${DOCKER_STORAGE} Is Exist" $LINENO && exit 1 fi } # 删除逻辑卷 Remove_Lvm(){ Log INFO "Begin Remove LVM....." local disk_name=$1 if df -h | grep -w "${DOCKER_STORAGE}$" &> /dev/null;then umount ${DOCKER_STORAGE} fi [[ ! -f /etc/fstab.bak ]] && cp /etc/fstab{,.bak} sed -ri "s#(.*)${DOCKER_STORAGE}(.*)##" /etc/fstab sed -i '/^$/d' /etc/fstab #删除逻辑卷 if lvs | grep -w "${LV_NAME}" >/dev/null;then lvremove -f /dev/${VG_NAME}/${LV_NAME} fi #删除卷组 if vgs | grep -w "${VG_NAME}" >/dev/null;then vgremove ${VG_NAME} fi #删除物理卷 if pvs | grep -w "${disk_name}" >/dev/null;then pvremove "${disk_name}" fi [[ -d ${DOCKER_STORAGE} ]] && rm -rf ${DOCKER_STORAGE} Log INFO "Remove LVM Success" } # 修改Docker存储路径 Modify_Docker_Storage(){ [[ ! -d /etc/docker ]] && mkdir /etc/docker cat > /etc/docker/daemon.json << EOF { "graph":"${DOCKER_STORAGE}" } EOF } Install_Docker(){ Log INFO "Begin Install Docker ${DOCKER_VERSION}....." local disk_name=$1 Check_Env [[ -f /etc/sysconfig/docker ]] && mv /etc/sysconfig/docker /etc/sysconfig/docker.bak if [[ -n ${disk_name} ]];then Create_Lvm ${disk_name} Modify_Docker_Storage fi cd ${WORKDIR}/rpm_x86 && rpm -ivh *.rpm --force --nodeps systemctl enable docker systemctl restart docker local docker_status=$(systemctl is-active docker) if [[ ${docker_status} == "active" ]];then docker -v Log INFO "Install Docker Success" else Log ERROR "Install Docker Faild" $LINENO && exit 1 fi } Uninstall_Docker(){ Log INFO "Begin Uninstall Docker......" local disk_name=$1 local docker_status=$(systemctl is-active docker) if [[ ${docker_status} == "active" ]];then docker ps | grep -v 'CONTAINER' | awk '{print $1}' | xargs -i docker stop {} docker system prune -a -f systemctl disable docker systemctl stop docker else Log WARN "Docker Is Stop" fi yum remove docker-engine docker-engine-selinux -y if [[ -n ${disk_name} ]];then Remove_Lvm ${disk_name} else [[ -d /var/lib/docker ]] && rm -rf /var/lib/docker fi if grep '^docker:' /etc/group &> /dev/null;then groupdel docker fi [[ -f /etc/sysconfig/docker ]] && rm -f /etc/sysconfig/docker local docker_status=$(systemctl is-active docker) if [[ ${docker_status} != "active" ]];then if ! which docker &> /dev/null;then Log INFO "Uninstall Docker Success" && exit 0 else Log ERROR "Uninstall Docker Faild" $LINENO && exit 1 fi else Log ERROR "Uninstall Docker Faild" $LINENO && exit 1 fi } #帮助信息 Help(){ cat << EOF Usage: ======================================================================= optional arguments: help 提供帮助信息 install 安装docker,存储路径为/var/lib/docker install /dev/xvde 安装docker,创建逻辑卷,存储路径为:${DOCKER_STORAGE} uninstal 卸载docker,如果安装时指定了磁盘,卸载也需要指定磁盘 EXAMPLE: bash install_docker.sh install /dev/xvde bash install_docker.sh uninstall /dev/xvde bash install_docker.sh install bash install_docker.sh uninstall EOF } ######################主程序###################### [[ $UID -ne 0 ]] && Log ERROR "Please Use Admin(root) Excute......" $LINENO | tee -a ${LOG_PATH} && exit 1 [[ $# -ne 1 && $# -ne 2 ]] && Help && exit 1 if [[ -n $2 ]];then if [[ -b $2 ]];then DISK_NAME=$2 Log INFO "Docker数据盘为:${DISK_NAME}" else Log ERROR "$2 Not Is Disk Or Not Found" $LINENO | tee -a ${LOG_PATH} && exit 1 fi fi case $1 in install) Install_Docker ${DISK_NAME} | tee -a ${LOG_PATH};; uninstall) Uninstall_Docker ${DISK_NAME} | tee -a ${LOG_PATH};; help) Help;; *) Log ERROR "Invalid option:bash `basename $0` help" $LINENO | tee -a ${LOG_PATH} && exit 1 esac
这篇关于shell脚本安装Docker(rpm版)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-19Docker-Compose容器集群化项目实战:新手入门指南
- 2024-11-19Docker镜像仓库项目实战:新手入门教程
- 2024-11-19Docker容器化部署项目实战:新手入门教程
- 2024-11-19Docker-Compose容器集群化资料入门教程
- 2024-11-19Docker镜像仓库资料详解:新手入门教程
- 2024-11-19Docker容器化部署资料:新手入门指南
- 2024-11-19Docker-Compose容器集群化教程:从入门到实践
- 2024-11-19Docker镜像仓库教程:新手入门指南
- 2024-11-19Docker容器化部署教程:初学者指南
- 2024-11-18Docker-Compose容器集群化入门教程