前言
日常运维工作里,经常会面对一台甚至多台Linux服务器,每次新装机器都要手动一步步安装Docker组件,配置镜像加速、设置开机自启、调整系统内核参数。单台服务器尚且还好,一旦面对集群多节点环境,逐台登录服务器敲命令,不仅枯燥重复,还极易出现版本不一致、配置遗漏、手输命令出错等问题,耗费大量时间精力。
Ansible是当下非常流行的无Agent自动化运维工具,不需要在被管控服务器安装任何客户端,仅依靠SSH协议就可以完成远程管控。我们可以将Docker全套安装配置流程编写为Playbook剧本,把安装软件、修改配置、启动服务、优化系统参数等全部操作固化下来。
后续不管是单台机器调试,还是几十台服务器批量部署,只需要执行一条命令,就能全自动完成整套Docker环境搭建,保证所有服务器配置统一标准,极大减少重复手工操作,规避人为失误。 本文将围绕Ansible Playbook实战,手把手带你编写可直接运行的剧本文件,实现一键自动化部署Docker完整环境,帮你简化运维流程,提升服务器交付效率。
1.为什么使用ansible?
Ansible是一款开源、无Agent架构的自动化运维工具,定位是服务器批量自动化管理工具,主打简单易用、无需安装客户端、Playbook剧本编排。
✨核心特点
- 部署架构与体验
依托SSH协议完成远程管控,被管理服务器无需安装任何代理客户端,只要开启 SSH 服务即可使用;YAML格式Playbook剧本语法通俗易懂,阅读编写门槛低,便于团队维护。
-
配置标准化可复用
把软件安装、目录创建、修改配置、服务启停等操作编写为Playbook剧本,一次编写,多次执行;单台调试、集群批量部署都可以复用,保证多台服务器配置完全一致。
-
丰富内置模块
自带大量成熟运维模块,软件安装、文件同步、用户管理、服务管理都可以直接调用,不用编写复杂shell脚本逻辑,减少shell脚本的易错问题。
-
执行模式
支持单机执行、多台主机批量执行;具备幂等特性,重复执行Playbook不会重复修改已经符合预期的环境,不用担心重复执行带来破坏。
🔴适用场景
- 服务器初始化、批量部署Docker等运行环境
- 集群多节点统一配置、分发配置文件
- 软件批量安装升级、服务统一启停管理
- 运维环境标准化交付,减少人工敲命令失误
📦技术栈
基于Python开发,远程通信依靠SSH;核心组件:Inventory主机清单、Playbook剧本、内置模块,推荐直接在控制节点安装Ansible进行管理。
和Shell脚本简单对比
- Shell脚本:执行原始命令,逻辑需要自己手写,缺少幂等性,多机器批量执行需要额外处理,配置一致性需要人为保障。
- Ansible Playbook:YAML可读性强,自带大量模块,天然支持幂等;原生支持批量主机;需要控制节点安装Ansible,被管控端仅需SSH。
2.在你的虚拟机上安装ansiable
2.1 什么是Ansible?
Ansible是一个开源的 自动化运维工具,由Red Hat赞助开发,用于实现:
- 配置管理(Configuration Management)
- 应用部署(Application Deployment)
- 任务自动化(Task Automation)
- IT编排(Orchestration)
它最大的特点是:简单、无代理、基于SSH、使用YAML语法。
2.2 Ansible的核心作用
- 批量执行命令
无需逐台登录服务器,一条命令可在成百上千台机器上同时运行:
- 统一配置管理
确保所有服务器的配置一致,比如:
- 安装指定版本的软件(如 Node Exporter、Nginx)
- 同步配置文件(如 /etc/hosts、prometheus.yml)
- 创建用户、设置权限、管理服务状态
- 自动化部署应用
通过 Playbook(YAML 文件)定义部署流程,一键完成复杂应用上线:
- 幂等性(Idempotency)
重复执行同一个 Playbook,结果始终一致——没装的会装,已装的不会重复操作,安全可靠。
- 无需安装客户端(Agentless)
Ansible通过SSH 与目标主机通信,只需控制机安装Ansible,被控机只要有Python 和SSH即可。
- 支持云和容器编排
可管理AWS、Azure、阿里云等云资源,也能操作Docker、Kubernetes。
2.3 安装ansiale
我这里是ubuntu系统,如果想使用centos可以看这边文章:别再手动操作了!我用Ansible+cpolar给飞牛OS装了个“遥控器” – cpolar 极点云官网
登录到 Ubuntu系统,并在APT命令下运行以应用更新:
sudo apt update
sudo apt upgrade -y
安装最新版本的Ansible:
apt install -y ansible
安装完成后,验证ansiable版本:
ansible --version
我们查看一下,有没有启动文件:
ls /etc/ansible
我发现我这里没有,那我们手动配一下,创建ansiable文件:
mkdir -p /etc/ansible
编写hosts文件:
cat > /etc/ansible/hosts <<EOF
[local]
localhost ansible_connection=local
EOF
编写ansiable.cfg文件:
cat > /etc/ansible/ansible.cfg <<EOF
[defaults]
inventory = /etc/ansible/hosts
host_key_checking = False
remote_user = root
stdout_callback = yaml
EOF
验证是否成功:
ansible localhost -m ping
3.配置ansiable文件搞定其他主机docker部署
3.1 编写hosts文件
确保你在playbook所在目录(假设是 /etc/ansible):
cd /etc/ansible
提前填写需要部署 Docker 的服务器 IP,支持多台机器批量部署(在hosts文件中):
[dbservers]- 方括号
[]定义主机组名称,组名叫dbservers,字面含义:数据库服务器组。
[dbservers]
192.168.42.146 ansible_user=root ansible_port=22 ansible_password=*****
3.2 编写安装docker运行脚本
编写运行脚本deploy_docker.yml:
- playbook 里写
hosts: dbservers,代表:对这个分组下面所有IP执行剧本任务。
---
- name: Ansible一键部署Docker环境
hosts: docker_group
become: true
tasks:
- name: 安装yum工具依赖
yum:
name: yum-utils
state: present
- name: 添加Docker yum软件源
yum_repository:
name: docker-ce
description: Docker CE stable repo
baseurl: https://download.docker.com/linux/centos/$releasever/$basearch/stable
gpgcheck: yes
gpgkey: https://download.docker.com/linux/centos/gpg
- name: 安装Docker全套组件
yum:
name:
- docker-ce
- docker-ce-cli
- containerd.io
state: present
- name: 启动docker服务并设置开机自启
systemd:
name: docker
state: started
enabled: yes
- name: 将登录用户加入docker组,免sudo操作docker
user:
name: "{{ ansible_user }}"
groups: docker
append: true
3.3 执行Playbook命令
ansible-playbook -i hosts deploy_docker.yml
3.4 验证是否成功
在被控机器执行:
docker -v
systemctl status docker
看到版本号、服务状态为active(running)即为部署完成。
借助Ansible Playbook,读取hosts清单里dbservers主机组服务器,批量完成Docker环境部署、服务开机自启与权限配置;同时自动安装cpolar内网穿透,无需公网IP,即可把内网中Docker运行的各类容器服务对外暴露,实现外网远程访问内网Docker业务,把重复部署和外网访问打通全部交给自动化剧本完成。
4.安装cpolar实现随时随地开发
cpolar 可以将你本地电脑中的服务(如 SSH、Web、数据库)映射到公网。即使你在家里或外出时,也可以通过公网地址连接回本地运行的开发环境。
❤️以下是安装cpolar步骤:
使用一键脚本安装命令:
sudo curl https://get.cpolar.sh | sh
安装完成后,执行下方命令查看cpolar服务状态:(如图所示即为正常启动)
sudo systemctl status cpolar
Cpolar安装和成功启动服务后,在浏览器上输入虚拟机主机IP加9200端口即:【http://ip:9200】访问Cpolar管理界面,使用Cpolar官网注册的账号登录,登录后即可看到cpolar web 配置界面,接下来在web 界面配置即可:
打开浏览器访问本地9200端口,使用cpolar账户密码登录即可,登录后即可对隧道进行管理。
5.配置公网地址
通过配置,你可以在本地 WSL 或 Linux 系统上运行 SSH 服务,并通过 Cpolar 将其映射到公网,从而实现从任意设备远程连接开发环境的目的。
- 隧道名称:可自定义,本例使用了:ssh,注意不要与已有的隧道名称重复
- 协议:tcp
- 本地地址:22
- 端口类型:随机临时TCP端口
- 地区:China Top
创建成功后,打开左侧在线隧道列表,可以看到刚刚通过创建隧道生成了公网地址,接下来就可以在其他电脑或者移动端设备(异地)上,使用任意一个地址在终端中访问即可。
- tcp 表示使用的协议类型
-
2.tcp.cpolar.top是 Cpolar 提供的域名
-
15197是随机分配的公网端口号
通过 Cpolar 提供的公网地址和端口,就可以使用ansible进行远程部署啦!
接下来我们操作一下。
修改hosts配置文件:
[dbservers]
2.tcp.cpolar.top ansible_user=root ansible_port=15197 ansible_password=***
接下来我们执行配置文件:
ansible-playbook -i hosts deploy_docker.yml
执行成功,我们去对应主机查看docker项目是否安装成功:
我们可以看见,目标主机已经成功安装~
6.保留固定TCP公网地址
使用cpolar为其配置TCP地址,该地址为固定地址,不会随机变化。
选择区域和描述:有一个下拉菜单,当前选择的是“China VIP”。
右侧输入框,用于填写描述信息。
保留按钮:在右侧有一个橙色的“保留”按钮,点击该按钮可以保留所选的TCP地址。
列表中显示了一条已保留的TCP地址记录。
登录cpolar web UI管理界面,点击左侧仪表盘的隧道管理——隧道列表,找到所要配置的隧道ssh,点击右侧的编辑。
修改隧道信息,将保留成功的TCP端口配置到隧道中。
- 端口类型:选择固定TCP端口
- 预留的TCP地址:填写保留成功的TCP地址
点击更新。
创建完成后,打开在线隧道列表,此时可以看到随机的公网地址已经发生变化,地址名称也变成了保留和固定的TCP地址。
这样我们的ansible操作就没有任何的阻碍啦!
总结
本文主要介绍使用Ansible编写Playbook剧本批量部署Docker环境,通过主机清单定义dbservers服务器分组,可对多台主机执行自动化部署;自动配置软件源、安装Docker组件、设置服务开机自启,还可以结合cpolar内网穿透,在无公网IP条件下,将内网Docker容器服务映射到公网,实现外网远程访问,把重复的手工部署工作交给剧本执行,降低人为操作失误,有效提升运维工作效率。
感谢您对本篇文章的喜爱,有任何问题欢迎留言交流。cpolar官网-安全的内网穿透工具 | 无需公网ip | 远程访问 | 搭建网站























