背景
一般公司内网不允许直连公网,安装Docker往往需要通过yum代理,才能够实现安装。
程序
Feature
前提 |
|
新申请服务器场景 | 默认没有挂载数据盘,建议挂载数据盘,参考如下文章。 或者将清理脚本保存到远程服务器,提供下载链接出来。本程序再执行下载引用 |
适用场景 | 未安装过Docker,需要新装的场景。 已安装过Docker的场景
|
软件源 | 内网源 |
支持操作系统 | CentOS 7 |
功能 |
|
脚本
#!/bin/sh
#
# Description
# Install the Docker Service Automatically
# 1. Update the docker-ce yum repository
# 2. Config the docker docker daemon file
# 3. Install the docker
# 4. Start & enable the docker system service
# 5. Create Cron Job to Reclaim Docker disk space
#
DOCKER_CE_VERSION="23.0.6-1.el7"
# docker数据目录,后续会自动识别
DOCKER_DATA_ROOT="/app/docker"
YUM_HOST="your yum proxy ip address"
YUM_DOMAIN="yummirrors.yourdomain.com"
check_yum_host() {
ping $YUM_DOMAIN -c 2
if [ $? -ne 0 ]; then
echo "$YUM_HOST $YUM_DOMAIN" >>/etc/hosts
else
return
fi
ping $YUM_DOMAIN -c 2
if [ $? -ne 0 ]; then
echo "内网yum源网络不通,请联系运维人员。[$YUM_DOMAIN][$YUM_HOST]"
exit 1
fi
}
update_centos_base_repo() {
cd /etc/yum.repos.d
mkdir -p backup && mv *repo* backup
cat >/etc/yum.repos.d/CentOS-Base.repo <<EOF
[Centos-7-Base]
name=CentOS7-Base
baseurl=http://$YUM_DOMAIN/\$releasever/\$basearch/base/
enabled=1
gpgcheck=0
[Centos-7-epel]
name=CentOS7-Epel
baseurl=http://$YUM_DOMAIN/\$releasever/\$basearch/epel/
enabled=1
gpgcheck=0
[Centos-7-extras]
name=CentOS7-extras
baseurl=http://$YUM_DOMAIN/\$releasever/\$basearch/extras/
enabled=1
gpgcheck=0
[Centos-7-updates]
name=CentOS7-updates
baseurl=http://$YUM_DOMAIN/\$releasever/\$basearch/updates/
enabled=1
gpgcheck=0
EOF
}
update_docker_ce_yum_repo() {
cat >/etc/yum.repos.d/docker-ce-stable.repo <<EOF
[docker-ce-stable]
name=docker-ce-stable
baseurl=http://$YUM_DOMAIN/\$releasever/\$basearch/docker-ce-stable/
enabled=1
gpgcheck=0
EOF
yum clean all && yum makecache fast
}
config_docker_data_root() {
max_mount_point=$(lsblk -nbo SIZE,MOUNTPOINT|grep "/"|grep -w -v "\/" |sort -rn|head -n 1|awk '{print $2}')
echo "检测到最大磁盘挂载目录: $max_mount_point"
DOCKER_DATA_ROOT="$max_mount_point/docker"
echo "将Docker数据目录设置为:$DOCKER_DATA_ROOT"
mkdir -p $DOCKER_DATA_ROOT
}
install_docker_ce() {
if [ -x "$(command -v docker)" ]; then
echo "The Docker Service installed. Please Uninstall the docker."
# uninstall the docker service
echo "========Uninstall the Docker Service==============="
yum remove docker-ce docker-ce-cli containerd.io \
docker-compose-plugin docker-ce-rootless-extras -q -y
rm -rf /var/lib/docker
rm -rf /var/lib/containerd
echo "=========Uninstall the Docker Service Success======"
fi
echo "===============Start to Install the Docker Service. Version: ${DOCKER_CE_VERSION}"
yum install \
docker-ce-${DOCKER_CE_VERSION} \
docker-ce-cli-${DOCKER_CE_VERSION} \
containerd.io \
docker-buildx-plugin \
docker-compose-plugin -q -y
if [ $? -ne 0 ]; then
echo "安装Docker服务失败,请联系运维人员,安装Docker相关依赖失败"
exit 1
fi
}
config_docker_daemon() {
# 微调docker配置文件
test -e /etc/docker/daemon.json
if [ $? -eq 0 ]; then
echo "daemon.json file exist"
else
mkdir -p /etc/docker
touch /etc/docker/daemon.json
fi
# 设置容器日志滚动策略,默认不滚动,日志会打爆磁盘
cat >/etc/docker/daemon.json <<EOF
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
},
"data-root": "$DOCKER_DATA_ROOT",
"storage-driver": "overlay2",
"default-address-pools":
[
{"base":"10.211.0.0/16","size":24}
]
}
EOF
}
systemctl_docker_service() {
systemctl daemon-reload
systemctl enable docker
systemctl restart docker
}
create_docker_disk_space_reclaim_cron_job() {
# 前面文章的脚本,参考一键清理docker磁盘程序
sh onekey_reclaim_docker_disk_space.sh
}
config_kernel_env() {
cat >/etc/sysctl.d/docker.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_nonlocal_bind = 1
net.ipv4.ip_forward = 1
vm.swappiness = 0
EOF
sysctl --system -q
}
compatable_old_version_dockercompose(){
ln /usr/libexec/docker/cli-plugins/docker-compose /usr/bin/docker-compose
}
main() {
check_yum_host
update_centos_base_repo
update_docker_ce_yum_repo
install_docker_ce
config_docker_data_root
config_docker_daemon
config_kernel_env
systemctl_docker_service
compatable_old_version_dockercompose
create_docker_disk_space_reclaim_cron_job
echo "=========Install Docker Service Success==========="
}
main