--- # Задачи для роли 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 not docker_use_official_repo - 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 not docker_use_official_repo - 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