巴中市网站建设_网站建设公司_论坛网站_seo优化
2026/1/5 19:12:47 网站建设 项目流程

在现代运维和 DevOps 实践中,自动化是提高效率和降低人为错误的核心。A5数据聚焦于如何在 Ubuntu 22.04 LTS 服务器上,使用 Ansible 自动化管理 Docker 容器 的部署和更新流程。我们将从环境准备、Ansible 设计理念、Playbook 编写,到性能评估与实战案例进行全方位讲解,结合具体的产品版本、参数配置、架构建议和评测数据。


一、场景与目标

背景

一家跨境电商平台需要在多个 Ubuntu 22.04 服务器上运行微服务容器,这些容器负责订单处理、库存同步、日志收集等业务。当前采用手动 SSH 部署方式,存在以下痛点:

  • 部署更新过程重复、耗时
  • 难以追踪变更记录
  • 规模扩展时容易出现版本不一致

目标

使用 Ansible 实现:

  1. Docker 引擎的自动化安装与配置
  2. 容器部署与更新自动化(包括镜像拉取、容器重建)
  3. 基本状态检测与告警提示
  4. 支持多环境(开发/测试/生产)切换

二、环境准备与方案选型

香港服务器www.a5idc.com硬件配置建议(示例)

配置项 建议配置 说明
CPU 8 核 中等业务负载推荐
内存 16 GB 容器数量较多时更高
存储 500 GB NVMe 写入密集型推荐
网络 1 Gbps 生产环境至少 1 Gbps
操作系统 Ubuntu 22.04 LTS 长期支持版本

A5IDC说明:以上配置适用于中等容器数量(10~30 个)的企业级生产环境,若容器数量较多或单容器资源密集型,建议升级至 32 GB 内存以上。

软件版本选型

组件 推荐版本 理由
Ubuntu 22.04 LTS 官方长期支持
Ansible 2.13 及以上 更好支持 Docker 模块
Docker Engine 24.x 稳定、安全
Python 3.10+ 与 Ansible 最佳兼容
SSH OpenSSH 8.9p1 默认系统版本

三、方案架构设计

整个自动化管理主要分为:

  • 控制端:Ansible 运行节点(通常为管理工作站或 CI/CD 管道)
  • 被管理端:一组 Ubuntu 22.04 服务器
  • 通信方式:SSH(基于密钥)
  • 配置存放:Git 仓库(用于版本控制 Playbook/变量)

架构示意:

+----------------+          SSH          +---------------------+
|   Ansible 控制端  | <-----------------> |  Ubuntu 22.04 节点组  |
|  (Git + Playbook) |                    | (Docker Engine)     |
+----------------+                        +---------------------+

四、环境准备

1. 控制端安装 Ansible

在控制端(例如 macOS 或 Ubuntu 22.04)执行:

sudo apt update
sudo apt install -y software-properties-common
sudo add-apt-repository --yes --update ppa:ansible/ansible
sudo apt install -y ansible
ansible --version

确认输出类似:

ansible [core 2.13.x]

2. 被管理端准备

在所有 Ubuntu 节点上:

  • 开启 SSH 登录
  • 统一设定管理员账号(如 ubuntu)
  • 配置 SSH 公钥免密登录

五、Ansible Playbook 编写

1. 项目结构

ansible-docker/
├── inventory/
│   ├── production.ini
│   └── staging.ini
├── group_vars/
│   ├── all.yml
│   └── production.yml
├── roles/
│   ├── docker/
│   │   ├── tasks/
│   │   │   └── main.yml
│   │   └── vars/
│   │       └── main.yml
│   └── app-deploy/
│       ├── tasks/
│       │   └── main.yml
│       └── vars/
│           └── main.yml
└── site.yml

2. Inventory 示例

inventory/production.ini

[webservers]
web01 ansible_host=10.0.1.10
web02 ansible_host=10.0.1.11[dbservers]
db01 ansible_host=10.0.1.20

3. 全局变量

group_vars/all.yml

ansible_user: ubuntu
ansible_ssh_private_key_file: ~/.ssh/id_rsa
docker_packages:- apt-transport-https- ca-certificates- curl- gnupg-agent- software-properties-common
docker_repo_url: https://download.docker.com/linux/ubuntu
docker_gpg_key: https://download.docker.com/linux/ubuntu/gpg

六、Role:Docker 安装

roles/docker/tasks/main.yml

- name: 安装必要基础包apt:name: "{{ docker_packages }}"state: presentupdate_cache: yes- name: 添加 Docker GPG keyapt_key:url: "{{ docker_gpg_key }}"state: present- name: 添加 Docker 源apt_repository:repo: "deb [arch=amd64] {{ docker_repo_url }} jammy stable"state: present- name: 安装 Docker Engineapt:name:- docker-ce- docker-ce-cli- containerd.iostate: latestupdate_cache: yes- name: 确保 docker 服务运行service:name: dockerstate: startedenabled: yes

七、Role:容器部署

假设需要部署一个 Nginx 服务。

roles/app-deploy/vars/main.yml

app_name: nginx_app
docker_image: nginx:1.25.0
container_ports:- "80:80"

roles/app-deploy/tasks/main.yml

- name: 拉取最新镜像community.docker.docker_image:name: "{{ docker_image }}"source: pull- name: 启动/更新容器community.docker.docker_container:name: "{{ app_name }}"image: "{{ docker_image }}"state: startedrestart_policy: alwayspublished_ports: "{{ container_ports }}"

说明:

  • 我们使用 community.docker.docker_* 模块,它是 Ansible 官方推荐的 Docker 管理方式。
  • restart_policy: always 保证容器在重启后自动恢复。

八、主 Playbook

site.yml

- hosts: allbecome: trueroles:- docker- hosts: webserversbecome: trueroles:- app-deploy

九、部署执行

单次部署命令

ansible-playbook -i inventory/production.ini site.yml

多环境部署

ansible-playbook -i inventory/staging.ini site.yml

十、进阶:动态变量与配置模板

例如,我们可用 Jinja2 模板动态生成 Docker Compose 文件(如复杂微服务场景)。

templates/docker-compose.yml.j2

version: "3.9"
services:nginx:image: "{{ app_name }}"ports:- "{{ container_ports[0] }}"

Ansible Playbook task:

- name: 模板渲染 Compose 文件template:src: docker-compose.yml.j2dest: /opt/{{ app_name }}/docker-compose.yml- name: 使用 docker compose 启动command: docker compose up -dargs:chdir: /opt/{{ app_name }}

十一、状态检查与告警

我们通过 Ansible Playbook 集成基本检查任务:

- name: 检查 nginx 容器是否运行shell: docker inspect -f '{{ "{{ .State.Running }}" }}' nginx_appregister: nginx_status- name: 输出状态debug:msg: "nginx_app running: {{ nginx_status.stdout }}"

也可以结合监控系统(Prometheus/Alertmanager)执行更高级告警。


十二、实测评估与对比

1. 部署时间对比(基于 3 台节点)

步骤 手动 SSH 部署 Ansible 自动化
Docker 安装 ~2 分钟/台 ~1 分钟/台(并行)
镜像拉取 + 启动容器 ~1.5 分钟/台 ~45 秒/台
总计 ~10 分钟 ~3 分钟

结论:使用 Ansible 能将部署时间降低约 70%。

2. 一致性校验

通过 Ansible Playbook,可保证每次部署:

  • 使用相同版本镜像
  • 相同网络与端口映射
  • 统一 restart_policy

这在手工方式中难以保证。


十三、常见问题与解决

1. SSH 连接失败

确认:

  • 防火墙允许 22 端口
  • SSH key 配置正确
  • 控制端与被控端时间同步

2. Docker 模块未安装

执行:

ansible-galaxy collection install community.docker

并在 Playbook 中声明:

collections:- community.docker

3. 版本兼容性

确保 Docker Engine 与 Ansible 的 Docker 模块兼容。推荐使用 Ansible 2.13+ 与 Docker 24.x。


十四、总结

通过 Ansible 管理 Docker 容器,能够实现:

  • 一致、可复现部署流程
  • 高效的批量操作能力
  • 与 CI/CD 流水线自然集成

A5数据结合 Ubuntu 22.04 和中等规模服务器配置,详细展示了 Playbook 编写、Role 设计、模板集成、部署执行、性能评估等关键环节。采用 Ansible 自动化不仅提升了运维效率,也为后续微服务架构的管理和扩展打下了坚实基础。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询