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.