Docker 一键部署脚本(CentOS7/AlmaLinux9)+ Ansible Playbook
兼容 CentOS7 和 AlmaLinux9 的 Shell 一键脚本 (支持在线/离线安装)和 Ansible Playbook,自动识别系统版本、配置镜像源、卸载旧版本、安装依赖、启动Docker并设置开机自启。
一、环境说明
- 支持系统:
CentOS 7 x86_64、AlmaLinux 9 x86_64 - Docker版本:稳定版(26.0+)
- 离线包:提前下载对应系统的Docker离线包(脚本内附下载地址)
- 权限:必须使用
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)
无网络环境专用,提前下载离线包放到脚本同目录即可
离线包下载地址
- CentOS7:https://download.docker.com/linux/centos/7/x86_64/stable/Packages/
- AlmaLinux9:https://download.docker.com/linux/rhel/9/x86_64/stable/Packages/
必须下载4个包 :
docker-ce、docker-ce-cli、containerd.io、docker-compose-plugin
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
四、核心功能总结
- 自动适配系统:一键识别 CentOS7 / AlmaLinux9
- 完整流程:卸载旧版 → 安装依赖 → 配置源 → 安装 → 启动 → 验证
- 离线/在线双模式:满足内外网环境
- 生产可用:配置开机自启、守护进程重载、状态检查
总结
- 单台服务器 :直接用 Shell脚本,复制粘贴即可运行
- 批量服务器 :用 Ansible Playbook,一键批量部署
- 离线安装只需提前下载rpm包,无依赖、无网络也能快速部署
- 安装完成后可直接使用
docker和docker compose命令