#!/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限制来增强系统的易用性和稳定性。