如何使用Ansible在远程服务器上安装Docker

本文主要介绍如何使用 Ansible Playbook 安装 Docker

配置

在此之前需要安装 Ansible。Ansible 安装 请参考官网docs.ansible.com/ansible/lat...

安装后,创建名为 ansible-docker的目录。

bash 复制代码
mkdir ansible-docker && cd ansible-docker

创建一个名为ansible.cfg的Ansible 配置文件,文件内容如下。

ini 复制代码
[defaults]
inventory = hosts
host_key_checking = True
deprecation_warnings = False
collections = ansible.posix, community.general

然后创建一个名为 hosts 的文件,其中文件名称需要在ansible.cfg上定义。

ini 复制代码
[example-server]
0.0.0.0 ansible_user=root

注意:不要忘记更改 IP 地址和主机名。

设置 Ansible 配置清单文件后,接下来创建一个名为playbook.ymlYAML

yaml 复制代码
---
- name: Setup Docker on Ubuntu Server 22.04
  hosts: all
  become: true
  remote_user: root
  roles:
    - config
    - docker

创建角色目录:

  • Config,在这个目录下,创建一个名为tasks的目录。之后,创建名为main.yml的文件,用于运行更新、升级和安装多个依赖项。
yaml 复制代码
---
- name: Update&Upgrade
  ansible.builtin.apt:
    name: aptitude
    state: present
    update_cache: true

- name: Install dependencies
  ansible.builtin.apt:
    name:
      - net-tools
      - apt-transport-https
      - ca-certificates
      - curl
      - software-properties-common
      - python3-pip
      - virtualenv
      - python3-setuptools
      - gnupg-agent
      - autoconf
      - dpkg-dev
      - file
      - g++
      - gcc
      - libc-dev
      - make
      - pkg-config
      - re2c
      - wget
    state: present
    update_cache: true
  • Docker,在此目录下创建 2 个名为taskstemplates 目录。

在tasks目录上创建名为 main.yml的文件。该文件包含_Docker 、Docker Compose 安装和私有注册表设置_。

yaml 复制代码
---
- name: Add Docker GPG apt Key
  ansible.builtin.apt_key:
    url: https://download.docker.com/linux/ubuntu/gpg
    state: present

- name: Add repository into sources list
  ansible.builtin.apt_repository:
    repo: deb [arch=amd64] https://download.docker.com/linux/ubuntu {{ ansible_lsb.codename }} stable
    state: present
    filename: docker

- name: Install Docker 23.0.1-1
  ansible.builtin.apt:
    name:
      - docker-ce=5:23.0.1-1~ubuntu.22.04~jammy
      - docker-ce-cli=5:23.0.1-1~ubuntu.22.04~jammy
      - containerd.io
    state: present
    update_cache: true

- name: Setup docker user
  ansible.builtin.user:
    name: docker
    groups: "docker"
    append: true
    sudo_user: yes

- name: Install Docker module for Python
  ansible.builtin.pip:
    name: docker

- name: Install Docker-Compose&Set Permission
  ansible.builtin.get_url:
    url: https://github.com/docker/compose/releases/download/1.29.2/docker-compose-Linux-x86_64
    dest: /usr/local/bin/docker-compose
    mode: '755'

- name: Create Docker-Compose symlink
  ansible.builtin.command:
    cmd: ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
    creates: /usr/bin/docker-compose

- name: Add private registry
  ansible.builtin.template:
    src: daemon.j2
    dest: /etc/docker/daemon.json
    mode: preserve

- name: Restart Docker
  ansible.builtin.service:
    name: docker
    state: restarted
    enabled: true

在模板中,使用名为 daemon.j2的 jinja 文件创建一个模板文件。该文件包含私有注册表的配置(可选)。

json 复制代码
{
    "insecure-registries" : ["http://0.0.0.0:5000"]
}

注意:IP字段使用远程服务器私有 IP

完成所有设置后,项目目录应如下所示:

css 复制代码
$ tree
.
├── ansible.cfg
├── config
│   └── tasks
│       └── main.yml
├── docker
│   ├── tasks
│   │   └── main.yml
│   └── templates
│       └── daemon.j2
├── hosts
└── playbook.yml

测试运行

现在使用此命令测试yml文件。

css 复制代码
$ ansible-playbook --syntax-check playbook.yml

如果没有任何错误,请使用此命令运行剧本。

css 复制代码
$ ansible-playbook -i hosts playbook.yml

输出,等待完成。

markdown 复制代码
 ____________________________________________
< PLAY [Setup Docker on Ubuntu Server 22.04] >
 --------------------------------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

 ________________________
< TASK [Gathering Facts] >
 ------------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

结论

本文,主要展示如何使用 Ansible Playbook 安装特定版本的 Docker。对于需要同时在多台服务器部署Docker,这会极大提高工作效率。

本文使用 文章同步助手 同步

相关推荐
程序员cxuan17 分钟前
Claude Code 为了封禁中国用户,竟然在代码里下毒
人工智能·后端·程序员
郡杰23 分钟前
Git基础与开发平台搭建
git·后端
ServBay40 分钟前
MCP (Model Context Protocol) 深度指南,协议原理、Python 实现与生产级安全实践
后端·ai编程·mcp
道友可好1 小时前
Claude Code 泄露源码里的 89 个秘密
前端·人工智能·后端
用户8356290780512 小时前
使用 Python 保护和取消保护 Excel 工作表和工作簿
后端·python
Java面试题总结2 小时前
CubeSandbox 实战:从零部署到快照/克隆/回滚全体验
后端
Csvn2 小时前
Python 开发技巧:函数式编程与 lambda 进阶
后端
考虑考虑2 小时前
nginx配置ssl
运维·后端·nginx
uhakadotcom2 小时前
Python 中,`None` 不等于 `False`导致的问题
后端·面试·github
SamDeepThinking2 小时前
面向对象真正管理的,不是对象,而是依赖
java·后端·程序员