如何使用 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 Ubuntu
  hosts: local
  become: true
  tasks:
    - name: Install required packages
      apt:
        name:
          - apt-transport-https
          - ca-certificates
          - curl
          - software-properties-common
        state: present
        update_cache: true

    - name: Add Docker's official GPG key
      apt_key:
        url: https://download.docker.com/linux/ubuntu/gpg
        state: present

    - name: Add Docker repository
      apt_repository:
        repo: deb https://download.docker.com/linux/ubuntu focal stable
        state: present

    - name: Install Docker
      apt:
        name: docker-ce
        state: latest
        update_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 会开始连接到清单中列出的服务器。由于使用的是 localhostansible_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 了。

相关推荐
Shannon Law4 小时前
Docker连接超时的解决方法
docker·容器
侯喵喵7 小时前
Jetson orin agx配置ultralytics 使用docker或conda
yolo·docker·1024程序员节·ultralytics
小彭律师9 小时前
Docker/K8s部署MySQL的创新实践与优化技巧大纲
mysql·docker·kubernetes
lastHertz9 小时前
Docker 占用导致 C 盘空间不足的排查与解决
运维·docker·容器
专家大圣9 小时前
Docker+Redis监控新方案:cpolar让远程管理“零配置”
网络·redis·docker·容器·内网穿透
CoderJia程序员甲10 小时前
GitHub 热榜项目 - 日榜(2025-10-23)
ai·开源·大模型·github·ai教程
chen_note12 小时前
Dockerfile及其部署镜像步骤
docker·容器·镜像·dockerfile
想学全栈的菜鸟阿董16 小时前
Crew连接多个 MCP 服务器
运维·服务器·github
想学全栈的菜鸟阿董16 小时前
通过 Stdio(标准输入/输出)传输机制,实现 CrewAI 与本地 MCP 服务器的连接
运维·服务器·github