Docker 一键部署脚本(CentOS7/AlmaLinux9)+ Ansible Playbook

Docker 一键部署脚本(CentOS7/AlmaLinux9)+ Ansible Playbook

兼容 CentOS7 和 AlmaLinux9Shell 一键脚本 (支持在线/离线安装)和 Ansible Playbook,自动识别系统版本、配置镜像源、卸载旧版本、安装依赖、启动Docker并设置开机自启。

一、环境说明

  1. 支持系统:CentOS 7 x86_64AlmaLinux 9 x86_64
  2. Docker版本:稳定版(26.0+)
  3. 离线包:提前下载对应系统的Docker离线包(脚本内附下载地址)
  4. 权限:必须使用 root 用户执行

二、Shell 一键部署脚本(推荐)

1. 在线安装脚本(docker_install_online.sh

自动配置官方YUM源,在线安装最新稳定版Docker

bash 复制代码
#!/bin/bash
# Docker 在线一键安装脚本 | 支持 CentOS7 / AlmaLinux9
# 执行方式:chmod +x docker_install_online.sh && sh docker_install_online.sh

set -e

# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'

# 检查root权限
if [ $(id -u) != "0" ]; then
    echo -e "${RED}错误:请使用 root 用户执行此脚本${NC}"
    exit 1
fi

# 获取系统版本
get_os_version() {
    if [ -f /etc/redhat-release ]; then
        OS_VER=$(grep -oE '[0-9]+\.[0-9]+' /etc/redhat-release | cut -d'.' -f1)
        OS_NAME=$(cat /etc/redhat-release | awk '{print $1}')
    else
        echo -e "${RED}不支持的操作系统${NC}"
        exit 1
    fi
}

# 卸载旧版本
uninstall_old_docker() {
    echo -e "${YELLOW}===== 卸载旧版本 Docker =====${NC}"
    yum remove -y docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine >/dev/null 2>&1
}

# 安装依赖
install_deps() {
    echo -e "${YELLOW}===== 安装系统依赖 =====${NC}"
    yum install -y yum-utils device-mapper-persistent-data lvm2
}

# 配置Docker YUM源
config_docker_repo() {
    echo -e "${YELLOW}===== 配置 Docker 官方源 =====${NC}"
    if [ "$OS_VER" == "7" ]; then
        yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    elif [ "$OS_VER" == "9" ]; then
        yum-config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo
    fi
}

# 安装Docker
install_docker() {
    echo -e "${YELLOW}===== 安装 Docker Engine =====${NC}"
    yum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
}

# 启动并设置开机自启
start_docker() {
    echo -e "${YELLOW}===== 启动 Docker 并设置开机自启 =====${NC}"
    systemctl daemon-reload
    systemctl enable --now docker
    systemctl status docker --no-pager
}

# 验证安装
verify_install() {
    echo -e "${YELLOW}===== 验证 Docker 安装 =====${NC}"
    docker -v
    docker compose version
    echo -e "${GREEN}===== Docker 安装成功!=====${NC}"
}

# 主函数
main() {
    get_os_version
    echo -e "${GREEN}检测到系统:${OS_NAME} ${OS_VER}${NC}"
    
    uninstall_old_docker
    install_deps
    config_docker_repo
    install_docker
    start_docker
    verify_install
}

main

2. 离线安装脚本(docker_install_offline.sh

无网络环境专用,提前下载离线包放到脚本同目录即可

离线包下载地址

bash 复制代码
#!/bin/bash
# Docker 离线一键安装脚本 | 支持 CentOS7 / AlmaLinux9
# 使用说明:将下载好的Docker离线rpm包放在脚本同目录,执行:chmod +x docker_install_offline.sh && sh docker_install_offline.sh

set -e

# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'

# 检查root权限
if [ $(id -u) != "0" ]; then
    echo -e "${RED}错误:请使用 root 用户执行此脚本${NC}"
    exit 1
fi

# 检查离线包是否存在
check_rpm_files() {
    RPM_COUNT=$(ls | grep -E "(docker-ce|containerd.io|docker-compose-plugin)" | grep -E "\.rpm$" | wc -l)
    if [ $RPM_COUNT -lt 4 ]; then
        echo -e "${RED}错误:当前目录缺少Docker离线rpm包!${NC}"
        echo -e "${YELLOW}请下载以下4个包并放在脚本目录:${NC}"
        echo "docker-ce、docker-ce-cli、containerd.io、docker-compose-plugin"
        exit 1
    fi
}

# 卸载旧版本
uninstall_old_docker() {
    echo -e "${YELLOW}===== 卸载旧版本 Docker =====${NC}"
    yum remove -y docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine >/dev/null 2>&1
}

# 离线安装Docker
install_docker_offline() {
    echo -e "${YELLOW}===== 离线安装 Docker =====${NC}"
    yum localinstall -y *.rpm --nogpgcheck
}

# 启动并设置开机自启
start_docker() {
    echo -e "${YELLOW}===== 启动 Docker 并设置开机自启 =====${NC}"
    systemctl daemon-reload
    systemctl enable --now docker
    systemctl status docker --no-pager
}

# 验证安装
verify_install() {
    echo -e "${YELLOW}===== 验证 Docker 安装 =====${NC}"
    docker -v
    docker compose version
    echo -e "${GREEN}===== Docker 离线安装成功!=====${NC}"
}

# 主函数
main() {
    check_rpm_files
    echo -e "${GREEN}Docker离线包检测通过,开始安装...${NC}"
    
    uninstall_old_docker
    install_docker_offline
    start_docker
    verify_install
}

main

3. Shell脚本使用方法

在线安装

bash 复制代码
# 1. 创建脚本
vi docker_install_online.sh

# 2. 粘贴代码,保存退出

# 3. 授权并执行
chmod +x docker_install_online.sh
sh docker_install_online.sh

离线安装

bash 复制代码
# 1. 下载对应系统的4个rpm包,上传到服务器同一目录

# 2. 创建脚本
vi docker_install_offline.sh

# 3. 粘贴代码,保存退出

# 4. 授权并执行
chmod +x docker_install_offline.sh
sh docker_install_offline.sh

三、Ansible Playbook(批量部署)

1. 主机清单(hosts

ini 复制代码
[docker_servers]
centos7 ansible_host=192.168.1.10 ansible_user=root
almalinux9 ansible_host=192.168.1.11 ansible_user=root

2. Docker 部署 Playbook(docker_deploy.yml

支持在线批量安装,自动适配CentOS7/AlmaLinux9

yaml 复制代码
---
- name: 批量部署 Docker CE | 支持 CentOS7 / AlmaLinux9
  hosts: docker_servers
  become: yes
  gather_facts: yes
  tasks:
    - name: 检查系统版本
      fail:
        msg: "仅支持 CentOS7 和 AlmaLinux9 系统"
      when: ansible_distribution not in ['CentOS','RedHat','AlmaLinux'] or ansible_distribution_major_version not in ['7','9']

    - name: 卸载旧版本 Docker
      yum:
        name:
          - docker
          - docker-client
          - docker-client-latest
          - docker-common
          - docker-latest
          - docker-latest-logrotate
          - docker-logrotate
          - docker-engine
        state: absent
      ignore_errors: yes

    - name: 安装依赖工具
      yum:
        name:
          - yum-utils
          - device-mapper-persistent-data
          - lvm2
        state: present

    - name: 配置 Docker YUM 源 (CentOS7)
      command: yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
      when: ansible_distribution_major_version == '7'

    - name: 配置 Docker YUM 源 (AlmaLinux9)
      command: yum-config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo
      when: ansible_distribution_major_version == '9'

    - name: 安装 Docker Engine
      yum:
        name:
          - docker-ce
          - docker-ce-cli
          - containerd.io
          - docker-compose-plugin
        state: present

    - name: 启动 Docker 并设置开机自启
      systemd:
        name: docker
        state: started
        enabled: yes
        daemon_reload: yes

    - name: 验证 Docker 版本
      command: docker -v
      register: docker_version

    - name: 输出安装结果
      debug:
        msg: "Docker 安装成功 | 版本:{{ docker_version.stdout }}"

3. Ansible 使用方法

bash 复制代码
# 1. 安装ansible
yum install -y ansible

# 2. 创建主机清单和playbook文件
vi hosts
vi docker_deploy.yml

# 3. 执行批量部署
ansible-playbook -i hosts docker_deploy.yml

四、核心功能总结

  1. 自动适配系统:一键识别 CentOS7 / AlmaLinux9
  2. 完整流程:卸载旧版 → 安装依赖 → 配置源 → 安装 → 启动 → 验证
  3. 离线/在线双模式:满足内外网环境
  4. 生产可用:配置开机自启、守护进程重载、状态检查

总结

  1. 单台服务器 :直接用 Shell脚本,复制粘贴即可运行
  2. 批量服务器 :用 Ansible Playbook,一键批量部署
  3. 离线安装只需提前下载rpm包,无依赖、无网络也能快速部署
  4. 安装完成后可直接使用 dockerdocker compose 命令
相关推荐
杨浦老苏1 小时前
大模型安全接入网关LinkAI
人工智能·docker·ai·群晖·隐私保护
jc06204 小时前
6.1云原生之Docker
c++·docker·云原生
道清茗4 小时前
【RH294知识点汇总】第 7 章 《 使用角色和 Ansible 内容集合简化 Playbook 》常见问题
ansible
JellyfishMIX7 小时前
k8s 容器 cpu 概念
docker·容器·kubernetes
运维全栈笔记10 小时前
K8S部署WordPress+MySQL:模块化YAML配置详解
服务器·mysql·docker·云原生·容器·kubernetes·服务发现
张青贤11 小时前
linux离线部署docker和docker-compose
linux·docker·docker-compose
Zender Han11 小时前
Docker 部署 OpenClaw:从安装到日常使用的完整指南
docker·openclaw
杨浦老苏13 小时前
自托管网络监控工具LanLens
网络·docker·监控·群晖
剩下了什么13 小时前
docker-compose up -d --build 和 docker-compose up -d 和 docker-compose build 区别
docker·容器·eureka
Zender Han14 小时前
常见 Docker 命令介绍与使用指南
docker