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.
相关推荐
IT大白鼠2 小时前
Docker 实战 ELKF 日志监控:容器日志全栈收集分析方案
运维·docker·容器
天远Date Lab13 小时前
零信任架构实战:基于天远双人婚姻评估查询构建自动化房产按揭联合审查网关
运维·人工智能·架构·自动化
小张同学a.14 小时前
Docker 容器实战 1—— docker 基础与镜像构建
linux·运维·docker·容器
NJCloud15 小时前
Docker 容器技术入门:部署、核心概念与基础命令
运维·docker·容器
2601_9620723315 小时前
docker自建rustdesk-server远程桌面
运维·docker·容器
pnoker16 小时前
从零部署 IoT DC3:四步快速启动实录
物联网·docker·部署
志栋智能16 小时前
从关联到因果:智能超自动化如何实现真正的根因分析定界
运维·自动化
虎王物联16 小时前
RK3568嵌入式Linux跑Docker:内核配置排查到AIoT容器化的完整路径
linux·运维·docker·rk3568·aiot·嵌入式linux
2601_9623818618 小时前
Python办公联动:Excel数据一键自动生成PPT图表
python·数据分析·自动化·excel·ppt
Wang's Blog18 小时前
Vibe Coding一人即团队系列40: 基于Git历史与自定义Skill的自动化周报生成实践
人工智能·自动化