feat: добавлена универсальная роль docker и обновлена документация
Some checks failed
Ansible Testing / lint (push) Has been cancelled
Ansible Testing / test (default) (push) Has been cancelled
Ansible Testing / test (minimal) (push) Has been cancelled
Ansible Testing / test (performance) (push) Has been cancelled
Ansible Testing / deploy-check (push) Has been cancelled

- Создана универсальная роль docker для установки Docker и Docker Compose
- Поддержка Debian, Ubuntu, CentOS, AlmaLinux, Rocky, RHEL
- Установка через официальный репозиторий или get.docker.com
- Полностью переписана документация README.md с актуальной информацией
- Добавлен preset mytest для тестирования
- Обновлен roles/deploy.yml с актуальными ролями

Автор: Сергей Антропов
Сайт: https://devops.org.ru
This commit is contained in:
Сергей Антропов
2025-10-26 00:58:00 +03:00
parent 304a5e4ebf
commit b41c110c16
11 changed files with 1047 additions and 1990 deletions

250
roles/docker/tasks/main.yml Normal file
View File

@@ -0,0 +1,250 @@
---
# Задачи для роли docker
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
# Определяем семейство ОС для выбора правильного метода установки
- name: Определение семейства ОС
set_fact:
docker_os_family: "{{ ansible_os_family }}"
docker_pkg_manager: "{{ 'yum' if ansible_pkg_mgr == 'yum' else ('dnf' if ansible_pkg_mgr == 'dnf' else 'apt') }}"
# Устанавливаем предварительные зависимости
- name: Установка зависимостей для Debian/Ubuntu
become: true
apt:
name:
- apt-transport-https
- ca-certificates
- curl
- gnupg
- lsb-release
- software-properties-common
state: present
update_cache: yes
when: ansible_os_family == "Debian"
- name: Установка зависимостей для Red Hat
become: true
package:
name:
- yum-utils
- device-mapper-persistent-data
- lvm2
state: present
when: ansible_os_family == "RedHat"
failed_when: false
# Добавляем официальный репозиторий Docker для Debian/Ubuntu
- name: Добавление GPG ключа Docker для Debian/Ubuntu
become: true
shell: |
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/{{ (ansible_distribution | lower) }}/gpg -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc
args:
creates: /etc/apt/keyrings/docker.asc
when:
- ansible_os_family == "Debian"
- docker_use_official_repo
- name: Добавление репозитория Docker для Debian/Ubuntu
become: true
apt_repository:
repo: "deb [arch={{ ansible_architecture }} signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/{{ (ansible_distribution | lower) }} {{ ansible_distribution_release }} stable"
state: present
filename: docker
update_cache: yes
when:
- ansible_os_family == "Debian"
- docker_use_official_repo
# Добавляем официальный репозиторий Docker для Red Hat
- name: Добавление репозитория Docker для Red Hat через dnf
become: true
shell: |
dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
args:
creates: /etc/yum.repos.d/docker-ce.repo
when:
- ansible_os_family == "RedHat"
- ansible_pkg_mgr == "dnf"
- docker_use_official_repo
failed_when: false
- name: Добавление репозитория Docker для Red Hat через yum-config-manager
become: true
shell: |
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
args:
creates: /etc/yum.repos.d/docker-ce.repo
when:
- ansible_os_family == "RedHat"
- ansible_pkg_mgr == "yum"
- docker_use_official_repo
failed_when: false
# Устанавливаем Docker через официальный репозиторий
- name: Установка Docker CE для Debian/Ubuntu (официальный репозиторий)
become: true
apt:
name:
- docker-ce
- docker-ce-cli
- containerd.io
- docker-buildx-plugin
state: "{{ 'present' if docker_version == 'latest' else docker_version }}"
update_cache: yes
when:
- ansible_os_family == "Debian"
- docker_use_official_repo
- docker_install_method == "official"
- name: Установка Docker CE для Red Hat (официальный репозиторий)
become: true
package:
name:
- docker-ce
- docker-ce-cli
- containerd.io
- docker-buildx-plugin
state: "{{ 'present' if docker_version == 'latest' else docker_version }}"
when:
- ansible_os_family == "RedHat"
- docker_use_official_repo
- docker_install_method == "official"
# Устанавливаем Docker через скрипт get.docker.com
- name: Проверка наличия Docker
stat:
path: /usr/bin/docker
register: docker_binary
- name: Скачивание скрипта установки Docker
become: true
get_url:
url: https://get.docker.com
dest: /tmp/get-docker.sh
mode: '0755'
when:
- docker_install_method == "get.docker.com" or docker_use_official_repo == false
- not docker_binary.stat.exists
- name: Установка Docker через скрипт get.docker.com
become: true
command: /tmp/get-docker.sh
args:
creates: /usr/bin/docker
when:
- docker_install_method == "get.docker.com" or docker_use_official_repo == false
- not docker_binary.stat.exists
- name: Проверка установки Docker
become: true
command: docker --version
register: docker_version_check
changed_when: false
failed_when: false
- name: Вывод версии Docker
debug:
msg: "{{ docker_version_check.stdout if docker_version_check.rc == 0 else 'Docker не установлен' }}"
# Устанавливаем docker-compose-plugin для Debian/Ubuntu
- name: Установка docker-compose-plugin для Debian/Ubuntu
become: true
apt:
name:
- docker-compose-plugin
state: present
when:
- ansible_os_family == "Debian"
- docker_use_compose_plugin
- docker_use_official_repo
# Устанавливаем docker-compose-plugin для Red Hat
- name: Установка docker-compose-plugin для Red Hat
become: true
package:
name:
- docker-compose-plugin
state: present
when:
- ansible_os_family == "RedHat"
- docker_use_compose_plugin
- docker_use_official_repo
# Устанавливаем standalone docker-compose
- name: Скачивание docker-compose
become: true
get_url:
url: "https://github.com/docker/compose/releases/{{ 'latest/download' if docker_compose_version == 'latest' else 'download/v' + docker_compose_version }}/docker-compose-{{ ansible_system }}-{{ ansible_machine }}"
dest: /usr/local/bin/docker-compose
mode: '0755'
when:
- not docker_use_compose_plugin or docker_compose_version != 'latest'
- name: Проверка установки Docker Compose
become: true
shell: |
set -o pipefail
if command -v docker compose &> /dev/null; then
docker compose version
elif command -v docker-compose &> /dev/null; then
docker-compose --version
else
echo "Docker Compose не установлен"
fi
register: docker_compose_version_check
changed_when: false
failed_when: false
- name: Вывод версии Docker Compose
debug:
msg: "{{ docker_compose_version_check.stdout if docker_compose_version_check.rc == 0 else 'Docker Compose не установлен' }}"
# Запускаем и включаем службу Docker
- name: Запуск службы Docker
become: true
systemd:
name: docker
state: started
enabled: yes
# Создаем группу docker
- name: Создание группы docker
become: true
group:
name: docker
state: present
# Добавляем пользователей в группу docker
- name: Добавление пользователей в группу docker
become: true
user:
name: "{{ item }}"
groups: docker
append: yes
loop: "{{ docker_users }}"
when: docker_users | length > 0
# Устанавливаем дополнительные пакеты
- name: Установка дополнительных пакетов
become: true
package:
name: "{{ docker_additional_packages }}"
state: present
when: docker_additional_packages | length > 0
# Проверка статуса Docker
- name: Проверка статуса Docker
become: true
command: docker info
register: docker_info
changed_when: false
failed_when: false
- name: Вывод информации о Docker
debug:
msg: "Docker успешно установлен и запущен"
when: docker_info.rc == 0