Как использовать Ansible для установки и настройки Docker в Ubuntu 18.04

Вступление

Благодаря популяризации контейнерных приложений и микросервисов автоматизация серверов теперь играет важную роль в системном администрировании. Это также способ установить стандартные процедуры для новых серверов и уменьшить количество человеческих ошибок.

В этом руководстве объясняется, как использоватьAnsible для автоматизации шагов, содержащихся в нашем руководстве поHow To Install and Use Docker on Ubuntu 18.04. Docker - это приложение, которое упрощает процесс управленияcontainers, изолированными от ресурсов процессами, которые ведут себя аналогично виртуальным машинам, но более переносимы, более дружественны к ресурсам и в большей степени зависят от операционная система хоста.

В то время как вы можете выполнить эту настройку вручную, использование инструмента управления конфигурацией, такого как Ansible, для автоматизации процесса сэкономит ваше время и установит стандартные процедуры, которые можно повторять на десятках или сотнях узлов. Ansible предлагает простую архитектуру, которая не требует установки специального программного обеспечения на узлах, и предоставляет надежный набор функций и встроенных модулей, которые облегчают написание сценариев автоматизации.

Предполетная проверка

Чтобы выполнить автоматическую настройку, описанную в книге, описанной в этом руководстве, вам потребуется:

  • Ansible установлен либо на вашем локальном компьютере, либо на удаленном сервере, который вы настроили какAnsible Control Node. Вы можете выполнить шаг 1 руководстваHow to Install and Configure Ansible on Ubuntu 18.04, чтобы настроить эту настройку.

    • Если вы планируете использовать удаленный сервер в качестве узла управления Ansible, у него должен быть пользователь без полномочий root с правами sudo и базовый брандмауэр, настроенный до установки Ansible. Следуйте нашимInitial Server Setup Guide for Ubuntu 18.04, чтобы настроить это.

  • Доступ к одному или нескольким серверам Ubuntu 18.04, которые будут использоваться в качествеAnsible hosts. У каждого должен быть пользователь без полномочий root с привилегиями sudo и настроенный базовый брандмауэр. Следуйте нашему руководству поAutomating Initial Server Setup with Ansible on Ubuntu 18.04, чтобы настроить это автоматически. Кроме того, вы можете настроить это вручную, следуя нашимInitial Server Setup Guide for Ubuntu 18.04 на каждом из ваших хостов Ansible.

Тестирование подключения к узлам

Чтобы Ansible мог выполнять команды на ваших узлах, выполните следующую команду с вашего Ansible Control Node:

ansible -m ping all

Эта команда будет использовать встроенный в Ansible модульping для запуска теста подключения на всех узлах из вашего файла инвентаризации по умолчанию, подключаясь как текущий пользователь системы. Модульping проверит:

  • ваши Ansible хосты доступны;

  • ваш Ansible Control Node имеет действительные учетные данные SSH;

  • Ваши хосты могут запускать модули Ansible с использованием Python.

Если вы правильно установили и настроили Ansible, вы получите вывод, подобный следующему:

Outputserver1 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
server2 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
server3 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

Когда вы получаете ответpong от хоста, это означает, что вы готовы выполнять команды и сценарии Ansible на этом сервере.

[.note] #Note: Если вы не можете получить успешный ответ от своих серверов, проверьте нашAnsible Cheat Sheet Guide для получения дополнительной информации о том, как запускать команды Ansible с настраиваемыми параметрами подключения.
#

Что делает этот Playbook?

Эта инструкция по использованию Ansible предоставляет альтернативу ручному выполнению процедуры, описанной в нашем руководстве поHow To Install and Use Docker on Ubuntu 18.04.

При запуске этого playbook на хостах Ansible будут выполняться следующие действия:

  1. Установитеaptitude, который Ansible предпочитает в качестве альтернативы диспетчеру пакетовapt.

  2. Установите необходимые системные пакеты.

  3. Установите ключ Docker GPG APT.

  4. Добавьте официальный репозиторий Docker в исходникиapt.

  5. Установите Docker.

  6. Установите модуль Python Docker черезpip.

  7. Получите образ по умолчанию, указанныйdefault_container_image, из Docker Hub.

  8. Создайте количество контейнеров, определенных полемcreate_containers, каждый из которых использует изображение, определенноеdefault_container_image, и выполните команду, определенную вdefault_container_command, в каждом новом контейнере.

После завершения воспроизведения, у вас будет несколько контейнеров, созданных на основе опций, которые вы определили в переменных конфигурации.

Как использовать эту книгу

Для начала мы загрузим содержимоеplaybook на ваш узел управления Ansible. Для вашего удобства содержимое playbook также включено вthe next section of this guide.

Используйтеcurl, чтобы загрузить этот playbook из командной строки:

curl -L https://raw.githubusercontent.com/do-community/ansible-playbooks/master/docker/ubuntu1804.yml -o docker_ubuntu.yml

Это загрузит содержимое playbook в файл с именемdocker_ubuntu.yml в вашем текущем рабочем каталоге. Вы можете просмотреть содержимое книги воспроизведения, открыв файл в редакторе командной строки по своему выбору:

nano docker_ubuntu.yml

После того, как вы открыли файл playbook, вы должны заметить раздел с именемvars с переменными, требующими вашего внимания:

docker_ubuntu.yml

. . .
vars:
  create_containers: 4
  default_container_name: docker
  default_container_image: ubuntu
  default_container_command: sleep 1d
. . .

Вот что означают эти переменные:

  • create_containers: количество создаваемых контейнеров.

  • default_container_name: Имя контейнера по умолчанию.

  • default_container_image: образ Docker по умолчанию, который будет использоваться при создании контейнеров.

  • default_container_command: команда по умолчанию для запуска в новых контейнерах.

Когда вы закончите обновление переменных внутриdocker_ubuntu.yml, сохраните и закройте файл. Если вы использовалиnano, сделайте это, нажавCTRL + X,Y, затемENTER.

Теперь вы готовы запустить эту книгу на одном или нескольких серверах. Большинство сценариев по умолчанию настроено для выполнения на серверахall из вашего инвентаря. Мы можем использовать флаг-l, чтобы убедиться, что playbook затрагивает только подмножество серверов или один сервер. Чтобы выполнить playbook только наserver1, вы можете использовать следующую команду:

ansible-playbook docker_ubuntu.yml -l server1

Вы получите вывод, похожий на этот:

Output...
TASK [Add Docker GPG apt Key] ********************************************************************************************************************
changed: [server1]

TASK [Add Docker Repository] *********************************************************************************************************************
changed: [server1]

TASK [Update apt and install docker-ce] **********************************************************************************************************
changed: [server1]

TASK [Install Docker Module for Python] **********************************************************************************************************
changed: [server1]

TASK [Pull default Docker image] *****************************************************************************************************************
changed: [server1]

TASK [Create default containers] *****************************************************************************************************************
changed: [server1] => (item=1)
changed: [server1] => (item=2)
changed: [server1] => (item=3)
changed: [server1] => (item=4)

PLAY RECAP ***************************************************************************************************************************************
server1                  : ok=9    changed=8    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

[.note] #Note: Для получения дополнительной информации о том, как запускать Ansible playbooks, проверьте нашAnsible Cheat Sheet Guide.
#

Когда playbook завершит работу, войдите через SSH на сервер, предоставленный Ansible, и запуститеdocker ps -a, чтобы проверить, были ли успешно созданы контейнеры:

sudo docker ps -a

Вы должны увидеть вывод, похожий на этот:

OutputCONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
a3fe9bfb89cf        ubuntu              "sleep 1d"          5 minutes ago       Created                                 docker4
8799c16cde1e        ubuntu              "sleep 1d"          5 minutes ago       Created                                 docker3
ad0c2123b183        ubuntu              "sleep 1d"          5 minutes ago       Created                                 docker2
b9350916ffd8        ubuntu              "sleep 1d"          5 minutes ago       Created                                 docker1

Это означает, что контейнеры, определенные в playbook, были созданы успешно. Так как это было последнее задание в playbook, это также подтверждает, что playbook был полностью выполнен на этом сервере.

Содержание Playbook

Вы можете найти учебник для Docker, представленный в этом руководстве, вansible-playbooks repository внутриDigitalOcean Community GitHub organization. Чтобы скопировать или загрузить содержимое сценария напрямую, нажмите кнопкуRaw в верхней части сценария илиclick here to view the raw contents directly.

Полное содержание также включено сюда для вашего удобства:

docker_ubuntu.yml

---
- hosts: all
  become: true
  vars:
    create_containers: 4
    default_container_name: docker
    default_container_image: ubuntu
    default_container_command: sleep 1d

  tasks:
    - name: Install aptitude using apt
      apt: name=aptitude state=latest update_cache=yes force_apt_get=yes

    - name: Install required system packages
      apt: name={{ item }} state=latest update_cache=yes
      loop: [ 'apt-transport-https', 'ca-certificates', 'curl', 'software-properties-common', 'python3-pip', 'virtualenv', 'python3-setuptools']

    - name: Add Docker GPG apt 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 bionic stable
        state: present

    - name: Update apt and install docker-ce
      apt: update_cache=yes name=docker-ce state=latest

    - name: Install Docker Module for Python
      pip:
        name: docker

    # Pull image specified by variable default_image from the Docker Hub
    - name: Pull default Docker image
      docker_image:
        name: "{{ default_container_image }}"
        source: pull

    # Creates the number of containers defined by the variable create_containers, using default values
    - name: Create default containers
      docker_container:
        name: "{{ default_container_name }}{{ item }}"
        image: "{{ default_container_image }}"
        command: "{{ default_container_command }}"
        state: present
      with_sequence: count={{ create_containers }}

Не стесняйтесь вносить изменения в этот сборник, чтобы он наилучшим образом соответствовал вашим индивидуальным потребностям в рамках вашего рабочего процесса. Например, вы можете использовать модульdocker_image для отправки образов в Docker Hub или модульdocker_container для настройки контейнерных сетей.

Заключение

Автоматизация настройки инфраструктуры может не только сэкономить ваше время, но и помочь обеспечить соответствие ваших серверов стандартной конфигурации, которая может быть настроена в соответствии с вашими потребностями. Благодаря распределенному характеру современных приложений и необходимости согласованности между различными промежуточными средами, подобная автоматизация стала центральным компонентом процессов разработки многих групп.

В этом руководстве мы продемонстрировали, как использовать Ansible для автоматизации процесса установки и настройки Docker на удаленном сервере. Поскольку у каждого человека обычно разные потребности при работе с контейнерами, мы рекомендуем вам проверитьofficial Ansible documentation для получения дополнительной информации и вариантов использования модуля Ansibledocker_container.

Если вы хотите включить другие задачи в это руководство для дальнейшей настройки начальной настройки сервера, обратитесь к нашему вводному руководству по AnsibleConfiguration Management 101: Writing Ansible Playbooks.

Related