如何使用 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 了。

相关推荐
Ice星空14 分钟前
Docker 镜像创建和管理以及 buildx 交叉编译
运维·docker·容器
飞翔沫沫情16 分钟前
OpenEuler 发行版 二进制部署docker
docker·openeuler·容器引擎
Cyber4K17 分钟前
【Kubernetes专项】Docker 容器部署及基本用法
运维·docker·云原生·容器
techzhi22 分钟前
Docker 多架构镜像构建方案实施指南
docker·架构
暴躁的鱼42 分钟前
docker运行可登录的gerrit容器
运维·docker·容器
赵文宇(温玉)1 小时前
Docker与VM的差异与最佳场景
docker·容器·eureka
无限进步_1 小时前
【C语言&数据结构】相同的树:深入理解二叉树的结构与值比较
c语言·开发语言·数据结构·c++·算法·github·visual studio
techzhi1 小时前
docker compose和docker-compose的区别
运维·docker·容器
CoderJia程序员甲2 小时前
GitHub 热榜项目 - 日榜(2026-1-10)
ai·开源·大模型·github·ai教程
Rabbit_QL10 小时前
【网络设置】Docker 自定义网络深度解析:从踩坑到工程实践
网络·docker·容器