Docker 实战系列(六):用最小化 Ansible 镜像一键批量部署 Nginx

Docker 实战系列(六):用最小化 Ansible 镜像一键批量部署 Nginx

在上一期中,我们构建了一个只有几十 MB 的 Ansible 轻量化镜像,可以直接作为自动化运维的基础环境。
今天我们将直接用它来完成一个常见的运维任务:一键批量部署 Nginx


一、目标

  • 用我们上篇的 ansible-minimal 镜像
  • 部署 Nginx 到多台远程服务器
  • 全过程只需 一条 Docker 命令
  • 部署过程可复用(可扩展成任意服务安装)

二、准备条件

  1. 几台可以 SSH 登录的测试服务器(云主机或本地 VM)
  2. 已配置好 SSH 公钥免密登录(Ansible 免密执行任务更流畅)
  3. 上一篇构建好的 ansible-minimal:1.0 镜像

Tips: 公钥免密登录(配置过可忽略此步骤)

ssh-keygen -t rsa -b 2048 -N '' -f ~/.ssh/id_rsa
ssh-copy-id $IPs #$IPs为所有节点地址包括自身,按照提示输入yes 和root密码

如果你的 Ansible 容器固定在某台具体的操作机上,你可以将主机的公私钥挂载到容器中,容器使用主机的公钥和私钥,简化配置:-v /root/.ssh:/root/.ssh


三、项目结构

ansible-nginx/
├── hosts
└── site.yml

hosts(Ansible inventory 文件):

[webservers]
192.168.10.21
192.168.10.22
192.168.10.23

site.yml(Playbook 文件):

---
- hosts: webservers
  become: true
  tasks:
    - name: 安装 Nginx
      ansible.builtin.package:
        name: nginx
        state: present
    - name: 启动并启用 Nginx
      ansible.builtin.service:
        name: nginx
        state: started
        enabled: yes

四、执行部署

用 Docker 启动 Ansible 容器,映射当前目录进去:

docker run --rm \
  -v $(pwd):/ansible \
  ansible-minimal:1.0 \
  ansible-playbook site.yml -i hosts

以上配置可以增加 -v /root/.ssh:/root/.ssh 来挂载主机的私钥:

[root@ip-172-31-6-116 ansible-docker]#  ls /root/.ssh/* -l
-rw-------. 1 root root  992 Aug 12 10:42 /root/.ssh/authorized_keys
-rw-------. 1 root root 1876 Aug 12 10:42 /root/.ssh/id_rsa
-rw-r--r--. 1 root root  434 Aug 12 10:42 /root/.ssh/id_rsa.pub

执行结果:

PLAY [webservers] *********************************************************************
TASK [Gathering Facts] ****************************************************************
ok: [192.168.10.21]
ok: [192.168.10.22]
ok: [192.168.10.23]
TASK [安装 Nginx] ********************************************************************
changed: [192.168.10.21]
changed: [192.168.10.22]
changed: [192.168.10.23]
TASK [启动并启用 Nginx] **************************************************************
ok: [192.168.10.21]
ok: [192.168.10.22]
ok: [192.168.10.23]
PLAY RECAP ****************************************************************************
192.168.10.21            : ok=3    changed=1    unreachable=0    failed=0
192.168.10.22            : ok=3    changed=1    unreachable=0    failed=0
192.168.10.23            : ok=3    changed=1    unreachable=0    failed=0

五、验证部署结果

在任意一台目标服务器上运行:

curl -I http://localhost

输出:

HTTP/1.1 200 OK
Server: nginx/1.24.0
Date: ...

表示 Nginx 已正常运行。


六、这样做的好处

传统方式容器化 Ansible 方式
先在宿主机安装 Ansible,再执行 Playbook直接运行 Docker 镜像,无需安装
可能受宿主机环境影响(Python 版本、依赖)镜像内依赖固定,环境一致
执行环境不可复用镜像可在任意地方拉取复用

七、进阶扩展

这个 Playbook 可以轻松扩展:

  • 添加 Nginx 配置模板渲染(template 模块)
  • 配置 HTTPS 证书(copy 模块 + openssl 生成)
  • 部署其他 Web 服务(PHP、Node.js 等)
  • 集成到 CI/CD 管道(如 GitLab CI、Jenkins)

八、小结

到这里,我们就用上一篇的 Ansible 轻量化镜像,实现了一个真实的运维任务:批量部署 Nginx
整个过程 无需在宿主机安装 Ansible,执行环境高度一致,非常适合团队协作和持续交付场景。


📬 如果你喜欢这类深入浅出的技术解析,欢迎点赞 + 收藏 + 转发支持我继续创作!欢迎留言,我们下期见!
📣 更多原创内容、技术干货,欢迎关注「键上江湖」公众号,与你一键相逢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

derek2026

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值