Skip to content

Instantly share code, notes, and snippets.

@sarkrui
Last active December 14, 2023 03:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sarkrui/b779979d1c9c25501b92a591f9dd2b26 to your computer and use it in GitHub Desktop.
Save sarkrui/b779979d1c9c25501b92a591f9dd2b26 to your computer and use it in GitHub Desktop.
docker_install_debian12
#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
grep "English" /www/server/panel/config/config.json
if [ "$?" -ne 0 ]; then
public_file=/www/server/panel/install/public.sh
if [ ! -f $public_file ]; then
wget -O $public_file https://download.bt.cn/install/public.sh -T 5
fi
. $public_file
download_Url=$NODE_URL
else
download_Url="https://node.aapanel.com"
fi
echo $download_Url
mirror=''
Default_Download_Url=""
Docker_Download_Url_Check() {
ser_names=(download.docker.com mirrors.aliyun.com/docker-ce mirror.azure.cn/docker-ce)
tmp_file1=/dev/shm/net_test1.pl
[ -f "${tmp_file1}" ] && rm -f ${tmp_file1}
touch $tmp_file1
for ser_name in ${ser_names[@]};
do
NODE_CHECK=$(curl -s 2>/dev/null -w "%{http_code} %{time_total}" https://${ser_name} -o c${ser_name}.txt|xargs)
rm -rf c${ser_name}.txt
NODE_STATUS=$(echo ${NODE_CHECK}|awk '{print $1}')
TIME_TOTAL=$(echo ${NODE_CHECK}|awk '{print $2 * 1000 - 500 }'|cut -d '.' -f 1)
if [ "${NODE_STATUS}" == "200" ] || [ "${NODE_STATUS}" == "301" ] || [ "${NODE_STATUS}" == "403" ];then
if [ $TIME_TOTAL -lt 100 ];then
echo "$ser_name" >> $tmp_file1
fi
fi
done
NODE_URL=$(cat $tmp_file1|sort -r -g -t " " -k 1|head -n 1|awk '{print $1}')
rm -f $tmp_file1
mirror="$NODE_URL"
case "$mirror" in
mirrors.aliyun.com/docker-ce)
mirror="Aliyun"
;;
mirror.azure.cn/docker-ce)
mirror="AzureChinaCloud"
;;
*)
mirror=""
;;
esac
}
Docker_Download_Url_Check
case "$mirror" in
Aliyun)
Default_Download_Url="https://mirrors.aliyun.com/docker-ce"
;;
AzureChinaCloud)
Default_Download_Url="https://mirror.azure.cn/docker-ce"
;;
*)
Default_Download_Url="https://download.docker.com"
;;
esac
DEFAULT_REPO_FILE="docker-ce.repo"
if [ -z "$REPO_FILE" ]; then
REPO_FILE="$DEFAULT_REPO_FILE"
fi
Command_Exists() {
command -v "$@" >/dev/null 2>&1
}
Get_Distribution() {
lsb_dist=""
lsb_name=""
if [ -r /etc/os-release ]; then
lsb_dist="$(. /etc/os-release && echo "$ID")"
lsb_name="$(. /etc/os-release && echo "$NAME")"
fi
echo "$lsb_dist $lsb_name"
}
Docker_Stop() {
if Command_Exists docker || [ -e /var/run/docker.sock ] || [ -f /lib/systemd/system/docker.service ]; then
if which systemctl; then
systemctl stop docker
systemctl stop docker.socket
else
service docker stop
fi
fi
}
Docker_Start() {
if Command_Exists docker || [ -f /lib/systemd/system/docker.service ]; then
if which systemctl; then
systemctl stop docker
systemctl stop docker.socket
systemctl stop getty@tty1.service
# if [ $is_docker == "1"];then
# mv /etc/docker/daemon.json /root/
# fi
systemctl mask getty@tty1.service
systemctl enable docker
systemctl reset-failed docker.service
systemctl start docker.service
if [ "$?" != "0" ];then
cat /etc/docker/daemon.json
fi
else
chkconfig --add docker
chkconfig --level 2345 docker on
service docker start
fi
fi
}
Docker_Remove() {
pkgs="docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin"
pkgs_01="docker docker-common docker-selinux docker-engine docker-client docker-ce-rootless-extras"
pkgs_02="docker-client-latest docker-latest docker-latest-logrotate docker-logrotate"
set +e
if Command_Exists docker || [ -e /var/run/docker.sock ] || [ -f /lib/systemd/system/docker.service ]; then
if [ -f "/usr/bin/apt-get" ]; then
apt-get remove $pkgs -y
apt-get remove $pkgs_02 -y
elif [ -f "/usr/bin/yum" ]; then
systemctl disable docker
yum remove $pkgs_01 -y
yum remove $pkgs_02 -y
yum remove $pkgs -y
rm -rf /etc/yum.repos.d/docker-ce.repo
fi
if [ -f /var/run/docker.sock ];then
rm -rf /var/run/docker.sock*
fi
fi
if [ -f /usr/bin/docker-compose ]; then
rm -rf /usr/bin/docker-compose
fi
if [ -f /usr/local/bin/docker-compose ]; then
rm -rf /usr/local/bin/docker-compose
fi
if [ -f /usr/libexec/docker/cli-plugins/docker-compose ]; then
rm -rf /usr/libexec/docker/cli-plugins/docker-compose
fi
}
Is_Darwin() {
case "$(uname -s)" in
*darwin*) true ;;
*Darwin*) true ;;
*) false ;;
esac
}
Check_Forked() {
if Command_Exists lsb_release; then
set +e
lsb_release -a -u >/dev/null 2>&1
lsb_release_exit_code=$?
if [ "$lsb_release_exit_code" = "0" ]; then
cat <<-EOF
You're using '$lsb_dist' version '$dist_version'.
EOF
lsb_dist=$(lsb_release -a -u 2>&1 | tr '[:upper:]' '[:lower:]' | grep -E 'id' | cut -d ':' -f 2 | tr -d '[:space:]')
dist_version=$(lsb_release -a -u 2>&1 | tr '[:upper:]' '[:lower:]' | grep -E 'codename' | cut -d ':' -f 2 | tr -d '[:space:]')
cat <<-EOF
Upstream release is '$lsb_dist' version '$dist_version'.
EOF
else
if [ -r /etc/debian_version ] && [ "$lsb_dist" != "ubuntu" ] && [ "$lsb_dist" != "raspbian" ]; then
if [ "$lsb_dist" = "osmc" ]; then
lsb_dist=raspbian
else
lsb_dist=debian
fi
dist_version="$(sed 's/\/.*//' /etc/debian_version | sed 's/\..*//')"
case "$dist_version" in
12)
dist_version="bookworm"
;;
11)
dist_version="bullseye"
;;
10)
dist_version="buster"
;;
9)
dist_version="stretch"
;;
8)
dist_version="jessie"
;;
esac
fi
fi
fi
}
Init_Docker_Manager() {
docker_db="/www/server/panel/data/docker.db"
is_docker=""
if [ ! -f $docker_db ] || [ ! -s $docker_db ]; then
wget -O $docker_db $download_Url/install/src/docker_en.db
fi
if Command_Exists docker || [ -f /lib/systemd/system/docker.service ]; then
is_docker="1"
fi
echo "$is_docker"
}
Pip_Install() {
if [ -f /usr/bin/btpip ]; then
btpip install pytz
btpip install docker
else
pip install pytz
pip install docker
fi
}
Red_Error(){
echo '=================================================';
printf '\033[1;31;40m%b\033[0m\n' "$@";
GetSysInfo
exit 1;
}
Set_Centos_Repo(){
HUAWEI_CHECK=$(cat /etc/motd |grep "Huawei Cloud")
if [ "${HUAWEI_CHECK}" ] && [ "${is64bit}" == "64" ];then
\cp -rpa /etc/yum.repos.d/ /etc/yumBak
sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*.repo
sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.epel.cloud|g' /etc/yum.repos.d/CentOS-*.repo
rm -f /etc/yum.repos.d/epel.repo
rm -f /etc/yum.repos.d/epel-*
fi
ALIYUN_CHECK=$(cat /etc/motd|grep "Alibaba Cloud ")
if [ "${ALIYUN_CHECK}" ] && [ "${is64bit}" == "64" ] && [ ! -f "/etc/yum.repos.d/Centos-vault-8.5.2111.repo" ];then
rename '.repo' '.repo.bak' /etc/yum.repos.d/*.repo
wget https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo -O /etc/yum.repos.d/Centos-vault-8.5.2111.repo
wget https://mirrors.aliyun.com/repo/epel-archive-8.repo -O /etc/yum.repos.d/epel-archive-8.repo
sed -i 's/mirrors.cloud.aliyuncs.com/url_tmp/g' /etc/yum.repos.d/Centos-vault-8.5.2111.repo && sed -i 's/mirrors.aliyun.com/mirrors.cloud.aliyuncs.com/g' /etc/yum.repos.d/Centos-vault-8.5.2111.repo && sed -i 's/url_tmp/mirrors.aliyun.com/g' /etc/yum.repos.d/Centos-vault-8.5.2111.repo
sed -i 's/mirrors.aliyun.com/mirrors.cloud.aliyuncs.com/g' /etc/yum.repos.d/epel-archive-8.repo
fi
MIRROR_CHECK=$(cat /etc/yum.repos.d/CentOS-Linux-AppStream.repo |grep "[^#]mirror.centos.org")
if [ "${MIRROR_CHECK}" ] && [ "${is64bit}" == "64" ];then
\cp -rpa /etc/yum.repos.d/ /etc/yumBak
sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*.repo
sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.epel.cloud|g' /etc/yum.repos.d/CentOS-*.repo
fi
}
CentOS_89check(){
Centos8Check=$(cat /etc/redhat-release | grep ' 8.' | grep -iE 'centos|Red Hat')
Centos9Check=$(cat /etc/redhat-release | grep ' 9' | grep -iE 'centos|Red Hat')
if [ "${Centos8Check}" ];then
podman_check=$(rpm -qa|grep podman-docker)
if [ "$podman_check" != "" ];then
echo '=================================================';
echo -e "服务器内已经装有podman-docker!请备份好所有容器和镜像卸载podman-docker后再安装docker官方程序。"
echo -e "podman-docker卸载命令(请务必备份好后再执行卸载命令):"
echo -e "yum remove -y podman*"
Red_Error "服务器内已经装有podman-docker!请备份好所有容器和镜像卸载podman-docker后再安装docker官方程序。"
fi
Set_Centos_Repo
fi
# if [ "${Centos9Check}" ];then
# Red_Error "暂不支持centos 9 stream安装docker,请更换其他系统安装。"
# fi
}
Docker_Install() {
lsb_dist=$(Get_Distribution|awk -F " " '{print $1}')
lsb_dist="$(echo "$lsb_dist" | tr '[:upper:]' '[:lower:]')"
case "$lsb_dist" in
ubuntu)
if Command_Exists lsb_release; then
dist_version="$(lsb_release --codename | cut -f2)"
fi
if [ -z "$dist_version" ] && [ -r /etc/lsb-release ]; then
dist_version="$(. /etc/lsb-release && echo "$DISTRIB_CODENAME")"
fi
;;
debian | raspbian)
dist_version="$(sed 's/\/.*//' /etc/debian_version | sed 's/\..*//')"
case "$dist_version" in
11)
dist_version="bullseye"
;;
10)
dist_version="buster"
;;
9)
dist_version="stretch"
;;
8)
dist_version="jessie"
;;
esac
;;
centos | rhel | sles | ol | tencentos | alinux | anolis | rocky | euleros | almalinux)
if [ -z "$dist_version" ] && [ -r /etc/os-release ]; then
dist_version="$(. /etc/os-release && echo "$VERSION_ID")"
fi
;;
*)
if Command_Exists lsb_release; then
dist_version="$(lsb_release --release | cut -f2)"
fi
if [ -z "$dist_version" ] && [ -r /etc/os-release ]; then
dist_version="$(. /etc/os-release && echo "$VERSION_ID")"
fi
;;
esac
Check_Forked
case "$lsb_dist" in
ubuntu | debian | raspbian)
docker_gpg="/usr/share/keyrings/docker-archive-keyring.gpg"
apt_repo_file="/etc/apt/sources.list.d/docker.list"
pre_reqs="apt-transport-https ca-certificates curl"
if ! command -v gpg >/dev/null; then
pre_reqs="$pre_reqs gnupg"
fi
apt_repo="deb [arch=$(dpkg --print-architecture) signed-by=$docker_gpg] $Default_Download_Url/linux/$lsb_dist $dist_version stable"
(
apt-get update
DEBIAN_FRONTEND=noninteractive apt-get install -y $pre_reqs
if [ -f $docker_gpg ] && [ -f $apt_repo_file ]; then
rm -rf $docker_gpg
rm -rf $apt_repo_file
fi
curl -fsSL --connect-time 10 --retry 5 $Default_Download_Url/linux/$lsb_dist/gpg | gpg --dearmor --yes -o $docker_gpg
echo "$apt_repo" > $apt_repo_file
apt-get update
)
pkg_version=""
(
pkgs="$pkgs docker-ce${pkg_version%=}"
DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends $pkgs
)
;;
centos | fedora | rhel | ol | tencentos | alinux | anolis | rocky | almalinux)
if [ "$(uname -m)" != "s390x" ] && [ "$lsb_dist" = "rhel" ]; then
echo "Packages for RHEL are currently only available for s390x."
exit 1
fi
yum_repo="$Default_Download_Url/linux/$lsb_dist/$REPO_FILE"
if [ "$lsb_dist" == "ol" ] || [ "$lsb_dist" == "tencentos" ] || [ "$lsb_dist" == "alinux" ] || [ "$lsb_dist" == "anolis" ]; then
yum_repo="$Default_Download_Url/linux/centos/$REPO_FILE"
fi
if [ "$lsb_dist" == "rocky" ] || [ "$lsb_dist" == "almalinux" ]; then
yum_repo="$Default_Download_Url/linux/centos/$REPO_FILE"
fi
if ! curl -Ifs "$yum_repo" >/dev/null; then
echo "Error: Unable to curl repository file $yum_repo, is it valid?"
exit 1
fi
if [ "$lsb_dist" = "fedora" ]; then
pkg_manager="dnf"
config_manager="dnf config-manager"
enable_channel_flag="--set-enabled"
disable_channel_flag="--set-disabled"
pre_reqs="dnf-plugins-core"
pkg_suffix="fc$dist_version"
else
pkg_manager="yum"
config_manager="yum-config-manager"
enable_channel_flag="--enable"
disable_channel_flag="--disable"
pre_reqs="yum-utils"
pkg_suffix="el"
fi
(
$pkg_manager install -y $pre_reqs
$config_manager --add-repo $yum_repo
$pkg_manager makecache
)
lsb_name=$(Get_Distribution|awk -F " " '{print $3}')
if [ "$lsb_name" = "Stream" ] || [ "$lsb_dist" = "alinux" ] || [ "$lsb_dist" = "anolis" ];then
conflicting="--allowerasing"
fi
if [ "$lsb_name" = "rocky" ] || [ "$lsb_dist" = "euleros" ] || [ "$lsb_dist" = "almalinux" ];then
conflicting="--allowerasing"
fi
pkg_version=""
(
pkgs_01="atomic-registries container-storage-setup containers-common"
pkgs_02="oci-register-machine oci-systemd-hook oci-umount python-pytoml subscription-manager-rhsm-certificates yajl"
$pkg_manager install -y docker-ce$pkg_version lvm2 device-mapper-persistent-data $conflicting
$pkg_manager install -y -q $pkgs_01
$pkg_manager install -y -q $pkgs_02
)
;;
euleros)
if [ "$(uname -m)" != "s390x" ] && [ "$lsb_dist" = "rhel" ]; then
echo "Packages for RHEL are currently only available for s390x."
exit 1
fi
cd /www
pkg_manager="yum"
$pkg_manager install -y docker* --skip-broken
;;
sles)
if [ "$(uname -m)" != "s390x" ]; then
echo "Packages for SLES are currently only available for s390x"
exit 1
fi
sles_version="${dist_version##*.}"
sles_repo="$Default_Download_Url/linux/$lsb_dist/$REPO_FILE"
opensuse_repo="https://download.opensuse.org/repositories/security:SELinux/SLE_15_SP$sles_version/security:SELinux.repo"
if ! curl -Ifs "$sles_repo" >/dev/null; then
echo "Error: Unable to curl repository file $sles_repo, is it valid?"
exit 1
fi
pre_reqs="ca-certificates curl libseccomp2 awk"
(
zypper install -y $pre_reqs
zypper addrepo $sles_repo
zypper addrepo $opensuse_repo
zypper --gpg-auto-import-keys refresh
zypper lr -d
)
pkg_version=""
(
zypper install -y docker-ce$pkg_version
)
;;
*)
if [ -z "$lsb_dist" ]; then
if Is_Darwin; then
echo
echo "ERROR: Unsupported operating system 'macOS'"
echo
exit 1
fi
fi
echo
echo "ERROR: Unsupported distribution '$lsb_dist'"
echo
exit 1
;;
esac
}
Docker_Compose_Install() {
Compose_Download_Url="$download_Url/install/src/docker-compose-$(uname -s)-$(uname -m)"
Compose_Path="/usr/local/bin/docker-compose"
New_Compose_Path="/usr/libexec/docker/cli-plugins/docker-compose"
Compose_lin="/usr/bin/docker-compose"
if [ ! -f $New_Compose_Path ]; then
curl -fsSL --connect-time 5 --retry 3 $Compose_Download_Url -o $New_Compose_Path
chmod +x $New_Compose_Path
rm -rf $Compose_lin
fi
if [ ! -f ${Compose_lin} ];then
ln -s $New_Compose_Path $Compose_lin
fi
}
Docker_Uninstall() {
Docker_Stop
Docker_Remove
if [ -h "/var/lib/docker" ]; then
rm -rf /var/lib/docker
fi
}
if [ "${1}" == 'install' ]; then
set +e
Init_Docker_Manager
if [ "$is_docker" != "1" ];then
CentOS_89check
Docker_Install
fi
Docker_Compose_Install
Pip_Install
Docker_Start
elif [ "${1}" == 'uninstall' ]; then
Docker_Uninstall
fi
@sarkrui
Copy link
Author

sarkrui commented Dec 14, 2023

rm -rf /usr/bin/docker-compose
wget -O /usr/libexec/docker/cli-plugins/docker-compose https://node.aapanel.com/install/src/docker-compose-Linux-x86_64
chmod +x /usr/libexec/docker/cli-plugins/docker-compose
ln -s /usr/libexec/docker/cli-plugins/docker-compose /usr/bin/docker-compose

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment