Установка и настройка Docker с помощью Ansible в Ubuntu 18.04
Ubuntu | Комментировать запись
Вместе с популярностью контейнерных приложений и микросервисов растет и необходимость автоматизации серверов в системном администрировании. Это также позволяет заранее определить стандартные процедуры установки новых серверов и уменьшить количество человеческих ошибок.
В этом мануале мы расскажем, как использовать Ansible для автоматизации всех действий, описанных в другом нашем мануале, Установка и использование Docker в Ubuntu 18.04.
Docker – это приложение, которое упрощает управление контейнерами. Контейнеры – это изолированные процессы, которые ведут себя подобно виртуальным машинам, но при этом являются более переносимыми, дружественными к ресурсам и в большей степени зависят от операционной системы хоста.
Конечно, вы можете выполнить эту настройку вручную, но автоматизация процесса с помощью инструмента управления конфигурацией (типа Ansible) сэкономит ваше время. Кроме того, это определит стандартные процедуры, которые можно повторять на десятках и сотнях новых хостов. Ansible предлагает простую архитектуру, не требующую установки специального программного обеспечения на всех хостах. Также в Ansible есть надежный набор функций и встроенных модулей, которые облегчают написание сценариев автоматизации.
Требования
- Установка Ansible на локальной машине или удаленном сервере (Control Node). Необходимые инструкции можно найти в мануале Установка и настройка Ansible в Ubuntu 18.04.
- Если вы собираетесь работать на удаленной машине Ubuntu 18.04, настройте ее по этому мануалу.
- Доступ к одному или нескольким серверам Ubuntu 18.04, которые будут использоваться в качестве хостов Ansible. На каждом должен быть пользователь sudo и настроенный базовый брандмауэр. Следуйте мануалу по автоматической начальной настройке сервера Ubuntu 18.04 с помощью Ansible. Кроме того, вы можете настроить хосты Ansible вручную, следуя этому руководству.
Тестирование подключения к нодам
Чтобы Ansible мог выполнять команды на нодах, выполните следующую команду с Ansible Control Node:
ansible -m ping all
Эта команда использует встроенный модуль Ansible ping для проверки подключения всех нод из файла инвентаря по умолчанию, подключаясь к ним как текущий пользователь системы. Модуль ping проверит:
- доступны ли ваши хосты Ansible;
- действительны ли учетные данные SSH на Ansible Control Node;
- могут ли хосты запускать модули Ansible с помощью Python.
Если вы правильно установили и настроили Ansible, вы получите подобный вывод:
server1 | SUCCESS => {
"changed": false,
"ping": "pong"
}
server2 | SUCCESS => {
"changed": false,
"ping": "pong"
}
server3 | SUCCESS => {
"changed": false,
"ping": "pong"
}
Если вы получаете от хоста ответ pong, это означает, что вы можете запускать команды Ansible и плейбуки на этом сервере.
Примечание: Если вы не получили такой ответ от своих серверов, обратитесь к руководству Как работать с Ansible: простая и удобная шпаргалка.
Что делает этот плейбук?
Данный плейбук Ansible является автоматизированной альтернативой процедуры, описанной в руководстве Установка и использование Docker в Ubuntu 18.04.
При запуске этого плейбука на хостах Ansible будут выполняться следующие действия:
- Установка aptitude, который Ansible использует в качестве альтернативы менеджеру пакетов apt.
- Установка необходимых системных пакетов.
- Установка GPG APT ключа Docker.
- Добавление официального репозитория Docker в список apt.
- Установка Docker.
- Установка модуля Python Docker через pip.
- Извлечение с Docker Hub образа по умолчанию, указанного в default_container_image.
- Создание количества контейнеров, указанного в поле create_containers, каждый из которых использует образ, указанный в default_container_image, и выполняет команду, определенную в default_container_command.
После выполнения плейбука у вас будет несколько контейнеров, автоматически созданных на основе опций, которые вы определили в переменных конфигурации.
Как использовать этот плейбук?
Для начала нужно загрузить содержимое плейбука на Ansible Control Node. Для удобства содержимое плейбука также включено в следующий раздел данного мануала.
Используйте curl, чтобы загрузить этот плейбук с помощью командной строки:
curl -L https://raw.githubusercontent.com/do-community/ansible-playbooks/master/docker/ubuntu1804.yml -o docker_ubuntu.yml
Это позволит загрузить содержимое плейбука в файл docker_ubuntu.yml в вашем текущем рабочем каталоге. Вы можете просмотреть содержимое плейбука, открыв файл в редакторе командной строки:
nano docker_ubuntu.yml
После того, как вы открыли плейбук, вы должны заметить раздел vars с переменными, которые требуют вашего внимания:
. . .
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.
Теперь вы готовы запустить этот плейбук на одном или нескольких серверах. По умолчанию большинство плейбуков настроено на выполнение на всех серверах из инвентаря. Вы можете использовать флаг -l, чтобы плейбук запустился только на подмножестве серверов или на одном сервере. Чтобы выполнить плейбук только на сервере server1, вы можете использовать следующую команду:
ansible-playbook docker_ubuntu.yml -l server1
Вы увидите:
...
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
Читайте также: Как работать с Ansible: простая и удобная шпаргалка
После выполнения плейбука войдите через SSH на сервер, оркестрованный Ansible, и запустите команду docker ps -a, чтобы проверить, были ли созданы контейнеры:
sudo docker ps -a
Вы должны увидеть похожий вывод:
CONTAINER 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
Это означает, что контейнеры, определенные в плейбуке, были созданы успешно. Так как это было последнее задание в плейбуке, это также значит, что на этом сервере плейбук был выполнен полностью.
Содержание плейбука
Плейбук для Docker, описанный в этом руководстве, можно найти в репозитории ansible-playbooks на GitHub. Чтобы скопировать или загрузить содержимое сценария напрямую, нажмите кнопку Raw в верхней части сценария или нажмите сюда, чтобы просмотреть исходное содержимое плейбука.
Мы опубликуем здесь полное содержание плейбука для вашего удобства:
---
- 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 на удаленном сервере. Поскольку при работе с контейнерами у всех пользователей обычно разные потребности, мы рекомендуем вам ознакомиться с официальной документацией Ansible для получения дополнительной информации и примеров использования модуля docker_container.
Если вы хотите включить в этот плейбук другие задачи для дальнейшей настройки сервера, пожалуйста, обратитесь к нашему вводному руководству Создание плейбука Ansible.
Tags: Ansible, Docker, Ubuntu, Ubuntu 18.04