完整脚本内容
#!/bin/bash
# openEuler 22.03 一键安装Docker脚本
# 作者:LMZF
# 日期:2025-11-19
set -e
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
# 日志函数
log_info() {
echo -e "${GREEN}[INFO]${NC} $1"
}
log_warn() {
echo -e "${YELLOW}[WARN]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# 检查系统版本
check_os_version() {
if [ ! -f /etc/openEuler-release ]; then
log_error "当前系统不是openEuler,脚本退出"
exit 1
fi
OS_VERSION=$(cat /etc/openEuler-release | grep -oP 'release \K[0-9.]+')
log_info "检测到系统版本: openEuler $OS_VERSION"
if [[ "$OS_VERSION" != "22.03" ]]; then
log_warn "此脚本专为openEuler 22.03设计,当前版本可能不兼容"
fi
}
# 卸载旧版本Docker
remove_old_docker() {
log_info "检查并卸载旧版本Docker..."
yum remove -y docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine \
2>/dev/null || true
}
# 安装依赖包
install_dependencies() {
log_info "安装必要依赖包..."
yum install -y dnf-plugins-core device-mapper-persistent-data lvm2
}
# 配置Docker仓库
setup_docker_repo() {
log_info "配置Docker CE仓库..."
# 添加Docker官方仓库(使用华为云镜像加速)
dnf config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 修改仓库配置,将$releasever替换为8(因为openEuler 22.03基于CentOS 8)
sed -i 's+\$releasever+8+' /etc/yum.repos.d/docker-ce.repo
# 更新yum缓存
dnf makecache
}
# 安装Docker CE
install_docker() {
log_info "开始安装Docker CE..."
# 查询可用版本
log_info "可用的Docker版本:"
dnf list docker-ce --showduplicates | sort -r | head -10
# 安装指定版本(推荐安装较新的稳定版本)
DOCKER_VERSION="24.0.7"
log_info "安装Docker版本: $DOCKER_VERSION"
dnf install -y docker-ce-$DOCKER_VERSION \
docker-ce-cli-$DOCKER_VERSION \
containerd.io \
docker-buildx-plugin \
docker-compose-plugin
}
# 配置Docker
configure_docker() {
log_info "配置Docker..."
# 创建配置目录
mkdir -p /etc/docker
# 创建daemon.json配置文件
cat > /etc/docker/daemon.json << EOF
{
"data-root": "/var/lib/docker",
"registry-mirrors": [
"https://docker.1panel.live",
"https://docker.1ms.run",
"https://dytt.online",
"https://docker-0.unsee.tech",
"https://lispy.org",
"https://docker.xiaogenban1993.com",
"https://666860.xyz",
"https://hub.rat.dev",
"https://docker.m.daocloud.io",
"https://demo.52013120.xyz",
"https://proxy.vvvv.ee",
"https://registry.cyou",
"https://mirror.ccs.tencentyun.com"
],
"log-opts": {
"max-size": "10m",
"max-file": "3"
},
"storage-driver": "overlay2",
"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
}
# 启动Docker服务
start_docker_service() {
log_info "启动Docker服务..."
# 启动并设置开机自启
systemctl enable docker --now
# 检查服务状态
if systemctl is-active --quiet docker; then
log_info "Docker服务启动成功"
else
log_error "Docker服务启动失败"
journalctl -u docker --no-pager -n 20
exit 1
fi
}
# 验证安装
verify_installation() {
log_info "验证Docker安装..."
# 检查Docker版本
docker --version
# 运行测试容器
if docker run --rm hello-world; then
log_info "Docker安装验证成功!"
else
log_error "Docker安装验证失败"
exit 1
fi
# 显示Docker信息
docker info | grep -E "Server Version|Containers|Running|Paused|Stopped|Images|Storage Driver"
}
# 安装后优化
post_install_optimization() {
log_info "进行安装后优化..."
# 将当前用户加入docker组(避免每次使用sudo)
if id -u $SUDO_USER >/dev/null 2>&1; then
usermod -aG docker $SUDO_USER
log_info "已将用户 $SUDO_USER 添加到docker组,重新登录后生效"
fi
# 显示使用提示
echo ""
log_info "=== Docker安装完成 ==="
log_info "常用命令:"
log_info " docker ps # 查看运行中的容器"
log_info " docker images # 查看镜像"
log_info " docker run -it ubuntu bash # 运行Ubuntu容器"
log_info " docker-compose up -d # 启动docker-compose服务"
}
# 主函数
main() {
log_info "开始openEuler 22.03 Docker一键安装..."
# 检查是否为root用户
if [[ $EUID -ne 0 ]]; then
log_error "请使用root用户运行此脚本"
echo "使用: sudo bash $0"
exit 1
fi
# 执行安装步骤
check_os_version
remove_old_docker
install_dependencies
setup_docker_repo
install_docker
configure_docker
start_docker_service
verify_installation
post_install_optimization
log_info "Docker安装全部完成!"
}
# 执行主函数
main "$@"
1421

被折叠的 条评论
为什么被折叠?



