一键安装二进制docker脚本

#!/bin/bash
#
#**********************************************************************************************
# Author: Easy
# QQ: 718911514
# Date: 2024-05-30
# FileName: install_docker_binary.sh
# System: 适用版本:centos 7/8 & ubuntu 18.04/20.04
# Description: 一键安装二进制docker
#*********************************************************************************************
SRC_DIR=/usr/local/src
COLOR="echo -e \\033[01;31m" # 设置终端颜色为红色
END='\033[0m' # 恢复终端颜色
URL='https://mirrors.cloud.tencent.com/docker-ce/linux/static/stable/x86_64/'
DOCKER_FILE=docker-19.03.10.tgz

# 检查系统版本
os(){
    OS_ID=`sed -rn '/^NAME=/s@.*="([[:alpha:]]+).*"$@\1@p' /etc/os-release`
}

# 检查是否存在必要的安装文件
check_file (){
    cd ${SRC_DIR}
    rpm -q wget &> /dev/null || yum -y install wget &> /dev/null
    if [ ! -e ${DOCKER_FILE} ];then
        ${COLOR}"缺少${DOCKER_FILE}文件,如果是离线包,请把文件放到${SRC_DIR}目录下"${END}
        ${COLOR}'开始下载DOCKER二进制安装包'${END}
        wget ${URL}${DOCKER_FILE} || { ${COLOR}"DOCKER二进制安装包下载失败"${END}; exit; }
    else
        ${COLOR}"相关文件已准备好"${END}
    fi
}

# 安装Docker
install(){
    [ -f /usr/bin/docker ] && { ${COLOR}"DOCKER已存在,安装失败"${END};exit; }
    ${COLOR}"开始安装DOCKER..."${END}
    tar xf ${DOCKER_FILE}
    mv docker/* /usr/bin/
    cat > /lib/systemd/system/docker.service <<-EOF
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target

[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
#add label-name and reomote visit functions
ExecStart=/usr/bin/dockerd -H unix://var/run/docker.sock --label="name=docker1-liu" -H tcp://0.0.0.0:6666
ExecReload=/bin/kill -s HUP \$MAINPID
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
# Uncomment TasksMax if your systemd version supports it.
# Only systemd 226 and above support this version.
#TasksMax=infinity
TimeoutStartSec=0
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process
# restart the docker process if it exits prematurely
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s

[Install]
WantedBy=multi-user.target
EOF
    mkdir -p /etc/docker
    tee /etc/docker/daemon.json <<-'EOF'
{
    "registry-mirrors": [
        "https://h1ea2sza.mirror.aliyuncs.com",
        "https://docker.mirrors.ustc.edu.cn",
        "http://f1361db2.m.daocloud.io",
        "https://registry.docker-cn.com",
        "https://dockerhub.azk8s.cn",
        "https://reg-mirror.qiniu.com",
        "https://hub-mirror.c.163.com",
        "https://mirror.ccs.tencentyun.com"
    ]
}
EOF
    systemctl daemon-reload
    systemctl enable --now docker &> /dev/null
    systemctl is-active docker &> /dev/null && ${COLOR}"Docker 服务启动成功"${END} || { ${COLOR}"Docker 启动失败"${END};exit; }
    docker version && ${COLOR}"Docker 安装成功"${END} || ${COLOR}"Docker 安装失败"${END}
}

# 设置Swap限制(仅适用于Ubuntu)
set_swap_limit(){
    if [ ${OS_ID} == "Ubuntu" ];then
        ${COLOR}'设置Docker的"WARNING: No swap limit support"警告'${END}
        sed -ri '/^GRUB_CMDLINE_LINUX=/s@"$@ swapaccount=1"@' /etc/default/grub
        update-grub &> /dev/null
        ${COLOR}"10秒后,机器会自动重启"${END}
        sleep 10
        reboot
    fi
}

# 设置CentOS别名
set_centos_alias(){
    cat >>~/.bashrc <<-EOF
        alias cdnet="cd /etc/sysconfig/network-scripts"
        alias vie0="vim /etc/sysconfig/network-scripts/ifcfg-eth0"
        alias vie1="vim /etc/sysconfig/network-scripts/ifcfg-eth1"
        alias scandisk="echo '- - -' > /sys/class/scsi_host/host0/scan;echo '- - -' > /sys/class/scsi_host/host1/scan;echo '- - -' > /sys/class/scsi_host/host2/scan"
        alias rmi="docker images -qa|xargs docker rmi -f"
        alias rmc="docker ps -qa|xargs docker rm -f"
EOF
    source ~/.bashrc
}

# 设置Ubuntu别名
set_ubuntu_alias(){
    cat >>~/.bashrc <<-EOF
        alias cdnet="cd /etc/netplan"
        alias scandisk="echo '- - -' > /sys/class/scsi_host/host0/scan;echo '- - -' > /sys/class/scsi_host/host1/scan;echo '- - -' > /sys/class/scsi_host/host2/scan"
        alias rmi="docker images -qa|xargs sudo docker rmi -f"
        alias rmc="docker ps -qa|xargs sudo docker rm -f"
EOF
    source ~/.bashrc
}

# 设置别名
set_alias(){
    if [ ${OS_ID} == "CentOS" ] &> /dev/null;then
        set_centos_alias
    else
        set_ubuntu_alias
    fi
}

# 主函数
main(){
    os
    check_file
    install
    set_alias
    set_swap_limit
}

main

os()函数: 该函数用于检测当前操作系统类型,并将其存储在OS_ID变量中。

check_file()函数: 这个函数用于检查所需的安装文件是否存在。如果文件不存在,则自动从指定的URL下载。

install()函数: 这个函数执行Docker的安装过程。它首先解压缩Docker安装包,然后将其中的文件移动到/usr/bin/目录下。接着,它创建了一个docker.service服务文件,并配置了Docker的启动参数。最后,它创建了/etc/docker/daemon.json文件,用于配置Docker的镜像加速器。安装完成后,它会启动Docker服务,并检查Docker版本以确保安装成功。

set_swap_limit()函数: 该函数用于设置Swap限制,仅适用于Ubuntu系统。它通过修改/etc/default/grub文件,并在10秒后重启系统来完成设置。

set_centos_alias()函数: 该函数设置了一些在CentOS系统上常用的别名,如cdnet用于切换到网络配置目录,scandisk用于扫描磁盘等。

set_ubuntu_alias()函数: 这个函数类似于set_centos_alias()函数,但是针对Ubuntu系统设置了不同的别名。

set_alias()函数: 该函数根据当前系统类型调用适当的别名设置函数。

main()函数: 这个函数是脚本的入口点。它依次调用了上述所有其他函数,以完成Docker的安装过程。

使用方法

运行./install_docker_binary.sh来执行安装脚本。根据系统提示完成安装步骤。

这个脚本提供了一个方便的方式来在CentOS和Ubuntu系统上安装Docker,并且通过设置别名和Swap限制来增强系统的易用性和稳定性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

向日葵般灿烂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值