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 命令
相关推荐
leeyi9 小时前
把软件装进不能上网的机房——一套建好了、还没上过战场的交付工程(第101篇)
docker·aigc·agent
YIAN11 小时前
Docker + Nginx 核心原理扫盲:从环境隔离到反向代理,运维面试必考点
后端·docker·面试
IT大白鼠13 小时前
Docker 实战 ELKF 日志监控:容器日志全栈收集分析方案
运维·docker·容器
小张同学a.1 天前
Docker 容器实战 1—— docker 基础与镜像构建
linux·运维·docker·容器
NJCloud1 天前
Docker 容器技术入门:部署、核心概念与基础命令
运维·docker·容器
2601_962072331 天前
docker自建rustdesk-server远程桌面
运维·docker·容器
pnoker1 天前
从零部署 IoT DC3:四步快速启动实录
物联网·docker·部署
虎王物联1 天前
RK3568嵌入式Linux跑Docker:内核配置排查到AIoT容器化的完整路径
linux·运维·docker·rk3568·aiot·嵌入式linux
缘友一世1 天前
GLM-5.3-NVFP4 部署实战系列[二]Docker 镜像选择与补丁镜像构建:纯 Python overlay,不重编一行 CUDA
python·docker·容器·vllm
数字化小张1 天前
Docker镜像优化——从1GB到100MB的瘦身实践
docker