docker自动化部署脚本

Docker Engine 加固安装包

bash 复制代码
mkdir -p /opt/docker-install

cd /opt/docker-install

vim install-docker.sh
#!/usr/bin/env bash
# install-docker.sh --- hardened Docker Engine install for CentOS 7/8/Stream.
# Idempotent: re-running is safe. Run as root: sudo bash install-docker.sh
# Config knobs are variables at the top --- edit before first run if needed.
set -euo pipefail

# ---------- config (edit as needed) ----------
# 镜像加速器:国内拉镜像更快。阿里云需换成你自己的加速器地址(容器镜像服务 -> 加速器)。
REGISTRY_MIRROR="${REGISTRY_MIRROR:-https://docker.m.daocloud.io}"
# Docker 网桥子网:刻意避开宿主机 192.168.214.0/24,防路由冲突。
DOCKER_SUBNET_BASE="${DOCKER_SUBNET_BASE:-172.20.0.0/16}"
LOG_MAX_SIZE="${LOG_MAX_SIZE:-50m}"
LOG_MAX_FILE="${LOG_MAX_FILE:-5}"
# 把该用户加入 docker 组(免 sudo)。默认取执行 sudo 的用户;留空则不添加。
DOCKER_USER="${DOCKER_USER:-${SUDO_USER:-}}"

DAEMON_JSON="/etc/docker/daemon.json"

need_root(){ [ "$(id -u)" -eq 0 ] || { echo "ERROR: 请使用 root 执行 (sudo bash install-docker.sh)"; exit 1; }; }

detect_os(){
  if [ -r /etc/os-release ]; then . /etc/os-release; echo "$ID $VERSION_ID"; else echo "unknown"; fi
}

install_docker(){
  if command -v docker >/dev/null 2>&1 && docker compose version >/dev/null 2>&1; then
    echo ">> docker 已安装: $(docker --version) / $(docker compose version)"; return 0
  fi
  echo ">> 安装 Docker Engine ($(detect_os))..."
  if command -v dnf >/dev/null 2>&1; then
    dnf -y install dnf-plugins-core
    dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    dnf -y install docker-ce docker-ce-cli containerd.io docker-compose-plugin
  else
    yum -y install yum-utils
    yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    yum -y install docker-ce docker-ce-cli containerd.io docker-compose-plugin
  fi
}

configure_daemon(){
  mkdir -p /etc/docker
  cat > "$DAEMON_JSON" <<EOF
{
  "registry-mirrors": ["$REGISTRY_MIRROR"],
  "log-driver": "json-file",
  "log-opts": { "max-size": "$LOG_MAX_SIZE", "max-file": "$LOG_MAX_FILE" },
  "storage-driver": "overlay2",
  "default-address-pools": [{ "base": "$DOCKER_SUBNET_BASE", "size": 24 }]
}
EOF
  echo ">> 已写入 $DAEMON_JSON"
  # 显示有效配置,便于核对
  cat "$DAEMON_JSON"
}

start_docker(){
  systemctl daemon-reload
  systemctl enable docker
  systemctl restart docker   # 让新的 daemon.json 生效
  # firewalld 放行容器流量(docker0 加入 trusted 区),否则容器可能出网异常
  if command -v firewall-cmd >/dev/null 2>&1 && systemctl is-active --quiet firewalld; then
    firewall-cmd --permanent --zone=trusted --add-interface=docker0 2>/dev/null || true
    firewall-cmd --reload
    echo ">> firewalld: docker0 已加入 trusted 区"
  fi
}

setup_nonroot(){
  if [ -n "$DOCKER_USER" ] && id "$DOCKER_USER" >/dev/null 2>&1; then
    usermod -aG docker "$DOCKER_USER"
    echo ">> 已将用户 '$DOCKER_USER' 加入 docker 组(重新登录后生效,之后可免 sudo)"
  fi
}

verify(){
  echo ">> docker version:"; docker version
  echo ">> 拉取 hello-world 验证(顺便测试镜像加速 + 运行)..."
  if docker run --rm hello-world; then
    echo ">> OK: hello-world 运行成功"
  else
    echo ">> WARN: hello-world 失败(可能是网络/镜像源问题),但 docker 本身已装好"
  fi
}

need_root
install_docker
configure_daemon
start_docker
setup_nonroot
verify
echo "=== Docker 安装完成 ==="

chmod +x install-docker.sh

sudo bash install-docker.sh

装完验证一下
docker version
docker run --rm hello-world     # 跑通说明镜像加速 + 运行都 OK

docker自动化脚本

如果第一个方式不行,就用这个

1. 创建安装脚本

bash 复制代码
vim install_docker.sh
bash 复制代码
#!/bin/bash

# Docker 自动安装脚本
# 支持 CentOS 7

set -e

echo "=============================="
echo "开始安装 Docker"
echo "=============================="


# 检查 root 权限
if [ "$EUID" -ne 0 ]; then
    echo "请使用 root 用户执行"
    exit 1
fi


echo "1. 卸载旧 Docker..."

yum remove -y \
docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine \
containerd \
runc || true


echo "2. 安装依赖..."

yum install -y yum-utils \
device-mapper-persistent-data \
lvm2


echo "3. 添加 Docker 镜像源..."


yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo


echo "4. 安装 Docker..."

yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin



echo "5. 启动 Docker..."

systemctl start docker


echo "6. 设置 Docker 开机启动..."

systemctl enable docker



echo "7. 添加当前用户到 docker 用户组..."

CURRENT_USER=${SUDO_USER:-$USER}

if [ "$CURRENT_USER" != "root" ]; then

    usermod -aG docker $CURRENT_USER

    echo "用户 $CURRENT_USER 已加入 docker 组"

fi



echo "8. 配置 Docker 镜像加速..."

mkdir -p /etc/docker


cat > /etc/docker/daemon.json <<EOF
{
  "registry-mirrors": [
    "https://docker.m.daocloud.io",
    "https://registry.docker-cn.com"
  ]
}
EOF


systemctl daemon-reload

systemctl restart docker



echo "9. 查看 Docker 版本..."

docker version



echo "=============================="
echo "Docker 安装完成"
echo "=============================="

echo ""
echo "注意:"
echo "1. 普通用户需要重新登录才能免 sudo 使用 Docker"
echo "2. 测试命令:"
echo "   docker run hello-world"

2. 给脚本执行权限

bash 复制代码
chmod +x install_docker.sh

3. 执行

bash 复制代码
./install_docker.sh

4. 安装完成测试

bash 复制代码
docker run hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.
相关推荐
具身智能进化论3 小时前
协作机器人产业进入规模化部署期,未来几年的增长从何而来
大数据·运维·人工智能·机器人·自动化·工厂方法模式
GlueNa2SiO35 小时前
06-Docker存储与数据持久化
笔记·学习·docker
一位正在转型AI全栈的前端工程师6 小时前
前端转全栈:从 502 到 200,我的第一个 Docker+Nginx+Node.js 项目
docker·容器
jason_renyu6 小时前
Linux Docker 服务管理与排查实战指南(新手速查版)
linux·docker·新手docker学习·docker日志查询·docker服务管理
微硬创新6 小时前
耐达讯自动化:16路4-20mA模拟信号,该怎样平稳接入PROFINET控制系统?
人工智能·物联网·网络协议·自动化·信息与通信
童槿顏丶7 小时前
Jenkins部署(Docker)
java·docker·jenkins
维核科技7 小时前
大模型私有化部署:Docker与Kubernetes实战避坑
docker·容器·kubernetes
梦想的旅途27 小时前
企业微信API二次开发:接入 AI 大模型实现外部群智能问答
人工智能·自动化·二次开发·企业微信