如何使用 Ansible 安装 Docker
这个过程分为六个步骤,从设置 Ansible 到自定义。让我们从安装和配置 Ansible 开始。
1. 安装并配置 Ansible
在将 Docker 与 Ansible 一起安装之前,需要先设置 Ansible 本身。在本教程中,将把它安装在计划安装 Docker 的同一台服务器上——这台机器将同时充当控制节点和被管理节点。如果是新手或正在使用 VPS,那么将所有操作都集中在一台服务器上可以简化操作。
首先,[通过 SSH 连接到你的 Ubuntu 服务器]。连接后,你需要更新系统的软件包列表。此步骤可确保你的服务器已安装最新的可用软件和安全补丁:
sudo apt update
运行此命令不会安装任何东西。它只是刷新系统可以访问的软件包列表——这是一个快速步骤,有助于避免在 Ansible 安装过程中出现问题。
现在可以安装 Ansible 了。Ubuntu 已将其包含在其标准软件库中,因此安装非常简单:
sudo apt install ansible -y
此命令安装主要的 Ansible 工具及其运行所需的一切。
完成后,最好检查 Ansible 是否安装正确:
ansible --version
应该会在屏幕上看到版本详细信息。如果看到了,就可以继续下一步了。

就是这样。有了 Ansible,就可以配置下一步它将管理哪些服务器了。
2. 设置库存文件
Ansible 使用清单文件来了解它应该管理哪些服务器。可以将其视为 Ansible 可以连接并运行任务的主机列表。即使只管理一台服务器(例如本教程中所示),仍然需要在清单文件中定义它。
默认情况下,清单文件位于 /etc/ansible/hosts 。可以直接编辑此文件,也可以创建自己的文件。在本指南中,我们将在的工作目录中创建一个简单的自定义清单文件,以保持一切井然有序。
创建一个名为 hosts.ini 的文件:
nano hosts.ini
然后,添加以下内容:
[local]
localhost ansible_connection=local
介绍:
- [local] 是群组名称。可以随意命名群组。
- localhost 告诉 Ansible 在同一台机器上运行任务。
- ansible_connection=local 告诉 Ansible 跳过 SSH 连接步骤,因为它管理的是安装它的同一台机器。

如果要管理多个远程服务器,的清单必须包含它们的 IP 地址或**主机名 。还需要指定 SSH 连接类型以及 Ansible 用于连接的远程主机的用户名 **。
重要! 为了增强安全性,我们强烈建议在控制节点和远程主机之间使用 SSH 密钥进行 Ansible SSH 身份验证。
但在本指南中, localhost 就足够了。请务必将“server.hostname.tld”替换为自己的服务器地址,并将“username”替换为自己的用户名。
[webservers]
192.168.1.10 ansible_connection=ssh ansible_user=username
server.hostname.tld ansible_connection=ssh ansible_user=username
保存文件,清单设置就完成了。接下来,你将编写——一组告诉 Ansible 如何安装 Docker 的指令。
3. 编写 Ansible
接下来,是时候编写 **Ansible 了 **,它包含 Ansible 将执行的一系列任务,用于安装和配置 Docker。无需手动逐个输入命令,只需以结构化的格式定义所有内容,Ansible 将处理剩下的工作。
创建一个名为 install-docker.yml 的文件:
nano install-docker.yml
然后粘贴以下内容:
- name: Install Docker on Ubuntuhosts: localbecome: truetasks:- name: Install required packagesapt:name:- apt-transport-https- ca-certificates- curl- software-properties-commonstate: presentupdate_cache: true- name: Add Docker’s official GPG keyapt_key:url: https://download.docker.com/linux/ubuntu/gpgstate: present- name: Add Docker repositoryapt_repository:repo: deb https://download.docker.com/linux/ubuntu focal stablestate: present- name: Install Dockerapt:name: docker-cestate: latestupdate_cache: true
让我们分解一下:
- name 是对所做事情的描述,使日志更具可读性。
- hosts: local 告诉 Ansible 从的库存中在本地主机组上运行任务。
- become: true 以管理员权限运行任务,就像在终端中使用 sudo 一样。
- 在tasks下,每个项目都是安装过程中的一个步骤。

每个tasks的作用如下:
- **安装所需的软件包 **。首先安装系统在安装 Docker 之前需要的一组工具。
这些包括:- curl 下载文件- apt-transport-https 用于访问安全存储库
- ca-certificates 用于处理 SSL 证书
- software-properties-common ,帮助管理软件源
- **添加 Docker 的 GNU Privacy Guard (GPG) 密钥 **。这允许的系统在安装 Docker 软件包之前通过添加 Docker 的官方 GPG 密钥来验证其真实性。
- **添加 Docker 仓库 **。切换到官方 Docker 仓库,而不是内置的 Ubuntu 仓库。这样,的服务器将始终直接从源安装最新的稳定 Docker 版本。
- **安装 Docker 本身 **。会再次刷新软件包列表,以确保拉取最新版本,然后安装它。
以这种方式编写可以确保 Docker 以一致、可重复的方式安装,这正是 Ansible 的设计初衷。如果需要在另一台 Ubuntu 计算机上再次执行此操作,则可以重复使用此文件。
保存并关闭文件 - 现在可以运行了。
运行 Ansible
要执行,请使用以下命令:
ansible-playbook -i hosts.ini install-docker.yml
以下是此命令中发生的情况:
- ansible-playbook 是用于运行的 Ansible 工具
- -i hosts.ini 告诉 Ansible 使用你之前创建的清单文件
- install-docker.yml 是包含 Docker 安装步骤的
运行该命令后,Ansible 会开始连接到清单中列出的服务器。由于使用的是 localhost 和 ansible_connection=local ,因此它不使用 SSH。相反,它会直接在安装 Ansible 的同一台计算机上运行任务。
将在终端中看到每个任务运行时打印出来的成功或失败信息。这让可以轻松发现任何问题并监控进度。

在后台,Ansible 会检查每个任务是否需要运行或是否已完成。例如,如果目标主机上已安装 Docker,Ansible 将跳过该步骤。这是使用 Ansible 的主要优势之一:它只在需要时运行步骤。
一旦完成,Docker 就应该安装完毕并可以使用了。下一步是确保一切正常。
5.验证安装
运行完成后,检查 Docker 是否正确安装。首先,检查版本以确认 Docker 可用:
docker --version
如果安装成功,将在终端中看到打印的**版本号 **。

接下来,确保 Docker 服务正在运行:
sudo systemctl status docker
应该会看到状态为 active (running) 。按 q 退出状态屏幕。

最后,运行一个快速测试,从默认镜像注册表 Docker Hub 中提取一个小型 Docker 镜像,并在容器中运行它:
sudo docker run hello-world
如果一切设置成功,将看到打印出一条来自 Docker 的 Hello! 消息。

安装并验证 Docker 后,就可以自定义 Ansible 了。
