公司内网一键安装Docker(CentOS 7)

背景

一般公司内网不允许直连公网,安装Docker往往需要通过yum代理,才能够实现安装。

程序

Feature

前提
  1. 能通内网,能使用yum安装软件
新申请服务器场景

默认没有挂载数据盘,建议挂载数据盘,参考如下文章。

或者将清理脚本保存到远程服务器,提供下载链接出来。本程序再执行下载引用

一键清理Docker磁盘文件-CSDN博客

适用场景

未安装过Docker,需要新装的场景。

已安装过Docker的场景

  1. 请先卸载再重新执行本脚本
  2. 或者走升级流程
软件源内网源
支持操作系统CentOS 7
功能
  1. 检测内网软件安装源是否能连通,给出无法连通提示
  2. 自动配置内网软件安装源
  3. 指定Docker版本:默认 23.0.6-1.el7
  4. 自动设置Docker数据目录(最大挂载点,且非根目录)
  5. 配置Docker Daemon文件:日志滚动等优化
  6. 设置磁盘定期清理:凌晨五点清理前一天的无用的数据
  7. 兼容docker-compose使用
  8. 修改docker默认内网IP网段,防止跟公司网络冲突(docker默认的172.x.x.x网段若被其它网段占用,则会造成回环网络,容器无法正常访问外部服务)

脚本

#!/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

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值