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 命令
相关推荐
s9123601012 小时前
【docker】Ubuntu22使用skopeo离线推送镜像
运维·docker·容器
我爱学习好爱好爱2 小时前
Ansible Loop循环 循环遍历的属性 Notify和Handlers
linux·运维·ansible
迷路爸爸1802 小时前
Docker 配置镜像源后仍然 `pull` 失败:问题、原因与解决方案
docker·容器·eureka
❀͜͡傀儡师3 小时前
使用 Docker 一键部署 EasyNVR 视频流媒体平台
java·docker·媒体
迷路爸爸1803 小时前
Docker 入门学习笔记 02:基础命令、前后台运行,以及 attach、logs、exec 的区别
笔记·学习·docker
中国lanwp3 小时前
Docker TLS 证书一键生成脚本(安全加密远程访问)
docker
张3233 小时前
OCI 镜像标准 ↔ Docker 镜像分层原理
docker
斯普信云原生组3 小时前
Docker 开源软件应急处理方案及操作手册——日常维护与监控命令集
docker·容器·eureka
迷路爸爸1803 小时前
Docker 入门学习笔记 01:它到底解决了什么问题,镜像和容器又是什么
服务器·笔记·学习·docker·容器