# Docker образы для универсальной системы тестирования AnsibleLab **Автор:** Сергей Антропов **Сайт:** https://devops.org.ru **Версия:** 2.0.0 ## 🐳 Обзор Эта директория содержит Docker образы для различных операционных систем и компонентов, используемых в универсальной системе тестирования Ansible ролей. Все образы поддерживают multi-arch сборку (amd64, arm64, riscv64, ppc64le, s390x, 386, arm/v7, arm/v6) и автоматически публикуются в Docker Hub. ## 📁 Структура ``` dockerfiles/ ├── ansible-controller/ # Ansible контроллер с предустановленными коллекциями │ ├── Dockerfile │ ├── docker-compose.yml │ └── requirements.txt ├── alt-linux/ # ALT Linux P9 с systemd │ └── Dockerfile ├── astra-linux/ # Astra Linux 1.7 с systemd │ └── Dockerfile ├── redos/ # RED OS 9 с systemd │ └── Dockerfile ├── rhel/ # Red Hat Enterprise Linux 8 с systemd │ └── Dockerfile ├── centos7/ # CentOS 7 с systemd │ └── Dockerfile ├── centos8/ # CentOS 8 Stream с systemd │ └── Dockerfile ├── centos9/ # CentOS 9 Stream с systemd │ └── Dockerfile ├── alma/ # AlmaLinux 8 с systemd │ └── Dockerfile ├── rocky/ # Rocky Linux 8 с systemd │ └── Dockerfile ├── ubuntu20/ # Ubuntu 20.04 LTS (focal) с systemd │ └── Dockerfile ├── ubuntu22/ # Ubuntu 22.04 LTS (jammy) с systemd │ └── Dockerfile ├── ubuntu24/ # Ubuntu 24.04 LTS (noble) с systemd │ └── Dockerfile ├── debian9/ # Debian 9 (stretch) с systemd │ └── Dockerfile ├── debian10/ # Debian 10 (buster) с systemd │ └── Dockerfile ├── debian11/ # Debian 11 (bullseye) с systemd │ └── Dockerfile ├── debian12/ # Debian 12 (bookworm) с systemd │ └── Dockerfile └── README.md # Документация ``` ## 🚀 Доступные образы ### 1. ansible-controller **Базовый образ:** `ubuntu:22.04` **Тег:** `inecs/ansible-lab:ansible-controller-latest` **Описание:** Ansible контроллер с предустановленными коллекциями и инструментами #### Компоненты: - **Ansible Core** с последними коллекциями - **Docker CLI** для работы с контейнерами - **kubectl** для управления Kubernetes - **Helm** для управления пакетами Kubernetes - **Kind** для локального Kubernetes - **yq** для работы с YAML - **jq** для работы с JSON #### Предустановленные коллекции: ```yaml collections: - name: community.docker version: ">=3.0.0" - name: community.general version: ">=7.0.0" - name: ansible.posix version: ">=1.5.4" ``` #### Предустановленные роли: - `geerlingguy.docker` - управление Docker - `geerlingguy.kubernetes` - управление Kubernetes #### Переменные окружения: ```bash DOCKER_HOST=unix:///var/run/docker.sock ANSIBLE_FORCE_COLOR=1 ANSIBLE_STDOUT_CALLBACK=yaml ANSIBLE_CALLBACKS_ENABLED=profile_tasks ``` #### Использование: ```bash # Запуск контроллера docker run -it --rm \ -v /var/run/docker.sock:/var/run/docker.sock \ -v $(pwd):/workspace \ -w /workspace \ inecs/ansible-lab:ansible-controller-latest # Выполнение Ansible команд docker run --rm \ -v /var/run/docker.sock:/var/run/docker.sock \ -v $(pwd):/workspace \ -w /workspace \ inecs/ansible-lab:ansible-controller-latest \ ansible-playbook site.yml ``` ### 2. Ubuntu #### Ubuntu 20.04 (focal) **Базовый образ:** `ubuntu:20.04` **Тег:** `inecs/ansible-lab:ubuntu20` **Описание:** Ubuntu 20.04 LTS с systemd **Компоненты:** - Ubuntu 20.04 LTS (Focal Fossa) - systemd, Python 3, базовые утилиты - Пользователь ansible с sudo правами #### Ubuntu 22.04 (jammy) - основная версия **Базовый образ:** `ubuntu:22.04` **Тег:** `inecs/ansible-lab:ubuntu-latest` или `inecs/ansible-lab:ubuntu22` **Описание:** Ubuntu 22.04 LTS с systemd **Компоненты:** - Ubuntu 22.04 LTS (Jammy Jellyfish) - systemd, Python 3, базовые утилиты - Пользователь ansible с sudo правами #### Ubuntu 24.04 (noble) **Базовый образ:** `ubuntu:24.04` **Тег:** `inecs/ansible-lab:ubuntu24` **Описание:** Ubuntu 24.04 LTS с systemd **Компоненты:** - Ubuntu 24.04 LTS (Noble Numbat) - systemd, Python 3, базовые утилиты - Пользователь ansible с sudo правами **Примечание:** Docker CE и Docker Compose НЕ установлены (закомментированы в Dockerfile) **Использование:** ```bash # Запуск Ubuntu контейнера docker run -d --privileged \ --name ubuntu-test \ -v /sys/fs/cgroup:/sys/fs/cgroup:ro \ --tmpfs /run --tmpfs /run/lock \ --cap-add SYS_ADMIN \ inecs/ansible-lab:ubuntu22 ``` ### 3. Debian #### Debian 9 (stretch) **Базовый образ:** `debian:stretch` **Тег:** `inecs/ansible-lab:debian9` **Описание:** Debian 9 Stretch с systemd **Компоненты:** - Debian 9 (Stretch) - systemd, Python 3, базовые утилиты - Пользователь ansible с sudo правами #### Debian 10 (buster) **Базовый образ:** `debian:buster` **Тег:** `inecs/ansible-lab:debian10` **Описание:** Debian 10 Buster с systemd **Компоненты:** - Debian 10 (Buster) - systemd, Python 3, базовые утилиты - Пользователь ansible с sudo правами #### Debian 11 (bullseye) **Базовый образ:** `debian:bullseye` **Тег:** `inecs/ansible-lab:debian11` **Описание:** Debian 11 Bullseye с systemd **Компоненты:** - Debian 11 (Bullseye) - systemd, Python 3, базовые утилиты - Пользователь ansible с sudo правами #### Debian 12 (bookworm) - основная версия **Базовый образ:** `debian:bookworm` **Тег:** `inecs/ansible-lab:debian-latest` или `inecs/ansible-lab:debian12` **Описание:** Debian 12 Bookworm с systemd **Компоненты:** - Debian 12 (Bookworm) - systemd, Python 3, базовые утилиты - Пользователь ansible с sudo правами **Примечание:** Docker CE и Docker Compose НЕ установлены (закомментированы в Dockerfile) **Использование:** ```bash # Запуск Debian контейнера docker run -d --privileged \ --name debian-test \ -v /sys/fs/cgroup:/sys/fs/cgroup:ro \ --tmpfs /run --tmpfs /run/lock \ --cap-add SYS_ADMIN \ inecs/ansible-lab:debian12 ``` ### 4. RHEL (Red Hat Enterprise Linux) **Базовый образ:** `registry.access.redhat.com/ubi8/ubi` **Тег:** `inecs/ansible-lab:rhel-latest` **Описание:** Red Hat Enterprise Linux 8 с systemd **Компоненты:** - RHEL 8 (Universal Base Image) - systemd, Python 3, базовые утилиты - Пользователь ansible с sudo правами **Примечание:** Docker CE и Docker Compose НЕ установлены (закомментированы в Dockerfile) **Использование:** ```bash # Запуск RHEL контейнера docker run -d --privileged \ --name rhel-test \ -v /sys/fs/cgroup:/sys/fs/cgroup:ro \ --tmpfs /run --tmpfs /run/lock \ --cap-add SYS_ADMIN \ inecs/ansible-lab:rhel-latest ``` ### 5. CentOS #### CentOS 7 **Базовый образ:** `centos:7` **Тег:** `inecs/ansible-lab:centos7` **Описание:** CentOS 7 с systemd **Компоненты:** - CentOS 7 - systemd, Python 3, базовые утилиты - Пользователь ansible с sudo правами #### CentOS 8 **Базовый образ:** `quay.io/centos/centos:stream8` **Тег:** `inecs/ansible-lab:centos8` **Описание:** CentOS 8 Stream с systemd **Компоненты:** - CentOS 8 Stream - systemd, Python 3, базовые утилиты - Пользователь ansible с sudo правами #### CentOS 9 (stream) - основная версия **Базовый образ:** `quay.io/centos/centos:stream9` **Тег:** `inecs/ansible-lab:centos-latest` или `inecs/ansible-lab:centos9` **Описание:** CentOS Stream 9 с systemd **Компоненты:** - CentOS Stream 9 - systemd, Python 3, базовые утилиты - Пользователь ansible с sudo правами **Примечание:** Docker CE и Docker Compose НЕ установлены (закомментированы в Dockerfile) **Использование:** ```bash # Запуск CentOS контейнера docker run -d --privileged \ --name centos-test \ -v /sys/fs/cgroup:/sys/fs/cgroup:ro \ --tmpfs /run --tmpfs /run/lock \ --cap-add SYS_ADMIN \ inecs/ansible-lab:centos9 ``` #### Настройки systemd: ```bash systemctl set-default multi-user.target ``` #### Использование: ```bash # Запуск CentOS контейнера docker run -d --privileged \ --name centos-test \ -v /sys/fs/cgroup:/sys/fs/cgroup:ro \ --tmpfs /run --tmpfs /run/lock \ --cap-add SYS_ADMIN \ inecs/ansible-lab:centos-latest ``` ### 6. alma **Базовый образ:** `almalinux:8` **Тег:** `inecs/ansible-lab:alma-latest` **Описание:** AlmaLinux 8 с systemd и Docker #### Компоненты: - **AlmaLinux 8** - **systemd** для управления сервисами - **Python 3** с pip - **Пользователь ansible** с sudo правами #### Установленные пакеты: - **Примечание**: Docker CE и Docker Compose НЕ установлены (закомментированы в Dockerfile) ```bash systemd systemd-sysv dbus curl wget git vim nano jq python3 python3-pip ``` #### Настройки systemd: ```bash systemctl set-default multi-user.target ``` #### Использование: ```bash # Запуск AlmaLinux контейнера docker run -d --privileged \ --name alma-test \ -v /sys/fs/cgroup:/sys/fs/cgroup:ro \ --tmpfs /run --tmpfs /run/lock \ --cap-add SYS_ADMIN \ inecs/ansible-lab:alma-latest ``` ### 7. rocky **Базовый образ:** `rockylinux:8` **Тег:** `inecs/ansible-lab:rocky-latest` **Описание:** Rocky Linux 8 с systemd и Docker #### Компоненты: - **Rocky Linux 8** - **systemd** для управления сервисами - **Python 3** с pip - **Пользователь ansible** с sudo правами #### Установленные пакеты: - **Примечание**: Docker CE и Docker Compose НЕ установлены (закомментированы в Dockerfile) ```bash systemd systemd-sysv dbus curl wget git vim nano jq python3 python3-pip ``` #### Настройки systemd: ```bash systemctl set-default multi-user.target ``` #### Использование: ```bash # Запуск Rocky Linux контейнера docker run -d --privileged \ --name rocky-test \ -v /sys/fs/cgroup:/sys/fs/cgroup:ro \ --tmpfs /run --tmpfs /run/lock \ --cap-add SYS_ADMIN \ inecs/ansible-lab:rocky-latest ``` ### 8. alt-linux **Базовый образ:** `altlinux/p9` **Тег:** `inecs/ansible-lab:alt-linux-latest` **Описание:** ALT Linux 9 с systemd и Docker #### Компоненты: - **ALT Linux 9** (Platform 9) - **systemd** для управления сервисами - **Python 3** с pip - **Пользователь ansible** с sudo правами #### Установленные пакеты: - **Примечание**: Docker CE и Docker Compose НЕ установлены (закомментированы в Dockerfile) ```bash systemd systemd-sysv dbus curl wget git vim nano htop tree jq python3 python3-pip ``` #### Настройки systemd: ```bash systemctl set-default multi-user.target ``` #### Использование: ```bash # Запуск ALT Linux контейнера docker run -d --privileged \ --name alt-linux-test \ -v /sys/fs/cgroup:/sys/fs/cgroup:ro \ --tmpfs /run --tmpfs /run/lock \ --cap-add SYS_ADMIN \ inecs/ansible-lab:alt-linux-latest ``` ### 9. astra-linux **Базовый образ:** `astralinux/astra-1.7` **Тег:** `inecs/ansible-lab:astra-linux-latest` **Описание:** Astra Linux 1.7 с systemd и Docker #### Компоненты: - **Astra Linux 1.7** - **systemd** для управления сервисами - **Python 3** с pip - **Пользователь ansible** с sudo правами #### Установленные пакеты: - **Примечание**: Docker CE и Docker Compose НЕ установлены (закомментированы в Dockerfile) ```bash systemd systemd-sysv dbus curl wget git vim nano htop tree jq python3 python3-pip ``` #### Настройки systemd: ```bash systemctl set-default multi-user.target ``` #### Использование: ```bash # Запуск Astra Linux контейнера docker run -d --privileged \ --name astra-linux-test \ -v /sys/fs/cgroup:/sys/fs/cgroup:ro \ --tmpfs /run --tmpfs /run/lock \ --cap-add SYS_ADMIN \ inecs/ansible-lab:astra-linux-latest ``` ### 10. redos **Базовый образ:** `redos/redos:9` **Тег:** `inecs/ansible-lab:redos-latest` **Описание:** RED OS 9 с systemd и Docker #### Компоненты: - **RED OS 9** - **systemd** для управления сервисами - **Python 3** с pip - **Пользователь ansible** с sudo правами #### Установленные пакеты: - **Примечание**: Docker CE и Docker Compose НЕ установлены (закомментированы в Dockerfile) ```bash systemd systemd-sysv dbus curl wget git vim nano htop tree jq python3 python3-pip ``` #### Настройки systemd: ```bash systemctl set-default multi-user.target ``` #### Использование: ```bash # Запуск RED OS контейнера docker run -d --privileged \ --name redos-test \ -v /sys/fs/cgroup:/sys/fs/cgroup:ro \ --tmpfs /run --tmpfs /run/lock \ --cap-add SYS_ADMIN \ inecs/ansible-lab:redos-latest ``` ## 🔧 Управление образами ### Сборка всех образов ```bash # Сборка всех образов (multi-arch) make docker build # Сборка конкретного образа make docker build-image IMAGE=ubuntu # Полная пересборка с очисткой кеша make docker rebuild ``` ### Отправка в Docker Hub ```bash # Отправка всех образов make docker push # Загрузка всех образов make docker pull ``` ### Очистка образов ```bash # Очистка локальных образов make docker clean # Полная очистка Docker make docker purge ``` ### Информация об образах ```bash # Информация о собранных образах make docker info # Диагностика проблем make docker diagnose ``` ## 🏗️ Multi-Arch поддержка ### Поддерживаемые архитектуры | Архитектура | Описание | Статус | |-------------|----------|--------| | `linux/amd64` | Intel/AMD 64-bit | ✅ Поддерживается | | `linux/arm64` | ARM 64-bit | ✅ Поддерживается | | `linux/riscv64` | RISC-V 64-bit | ✅ Поддерживается | | `linux/ppc64le` | PowerPC 64-bit LE | ✅ Поддерживается | | `linux/s390x` | IBM Z 64-bit | ✅ Поддерживается | | `linux/386` | Intel 32-bit | ✅ Поддерживается | | `linux/arm/v7` | ARM 32-bit v7 | ✅ Поддерживается | | `linux/arm/v6` | ARM 32-bit v6 | ✅ Поддерживается | ### Настройка builder'а ```bash # Настройка multi-arch builder make docker setup-builder # Проверка builder'а make docker diagnose # Сброс builder'а при проблемах make docker reset-builder ``` ## 🚀 Использование в preset'ах ### Пример preset'а с собственными образами ```yaml # molecule/presets/custom-images.yml --- #description: Preset с собственными образами AnsibleLab docker_network: labnet generated_inventory: "{{ molecule_ephemeral_directory }}/inventory/hosts.ini" # Собственные образы images: ubuntu: "inecs/ansible-lab:ubuntu-latest" debian: "inecs/ansible-lab:debian-latest" rhel: "inecs/ansible-lab:rhel-latest" centos: "inecs/ansible-lab:centos-latest" alma: "inecs/ansible-lab:alma-latest" rocky: "inecs/ansible-lab:rocky-latest" alt: "inecs/ansible-lab:alt-linux-latest" astra: "inecs/ansible-lab:astra-linux-latest" redos: "inecs/ansible-lab:redos-latest" systemd_defaults: privileged: true command: "/sbin/init" volumes: - "/sys/fs/cgroup:/sys/fs/cgroup:ro" tmpfs: ["/run", "/run/lock"] capabilities: ["SYS_ADMIN"] hosts: - name: ubuntu1 family: ubuntu groups: [web, frontend] - name: debian1 family: debian groups: [web, frontend] - name: rhel1 family: rhel groups: [database, backend] - name: centos1 family: centos groups: [database, backend] - name: alma1 family: alma groups: [monitoring] - name: rocky1 family: rocky groups: [monitoring] - name: alt1 family: alt groups: [security] - name: astra1 family: astra groups: [security] - name: redos1 family: redos groups: [security] ``` ### Тестирование с собственными образами ```bash # Тестирование с собственными образами make custom-images test full # Проверка наличия образов make custom-images check # Сборка всех образов make custom-images build ``` ## 📊 Мониторинг и диагностика ### Проверка образов ```bash # Проверка размера образов docker images | grep inecs/ansible-lab # Проверка архитектур docker manifest inspect inecs/ansible-lab:ubuntu-latest # Проверка содержимого образа docker run --rm inecs/ansible-lab:ubuntu-latest cat /etc/os-release ``` ### Логи сборки ```bash # Подробные логи сборки make docker build 2>&1 | tee build.log # Логи конкретного образа make docker build-image IMAGE=ubuntu 2>&1 | tee ubuntu-build.log ``` ## 🐛 Troubleshooting ### Проблемы с сборкой 1. **Builder не создается:** ```bash make docker diagnose make docker reset-builder ``` 2. **Образы не собираются:** ```bash make docker clean make docker setup-builder make docker build ``` 3. **Проблемы с multi-arch:** ```bash make docker clean-builder make docker setup-builder ``` ### Проблемы с образами 1. **Образы не запускаются:** ```bash # Проверка systemd docker run --rm --privileged inecs/ansible-lab:ubuntu-latest systemctl status # Проверка Docker docker run --rm --privileged inecs/ansible-lab:ubuntu-latest docker --version ``` 2. **Проблемы с правами:** ```bash # Проверка пользователя ansible docker run --rm inecs/ansible-lab:ubuntu-latest id ansible # Проверка sudo прав docker run --rm inecs/ansible-lab:ubuntu-latest sudo -l ``` ## 📈 Производительность ### Оптимизация сборки ```bash # Использование кеша Docker make docker build # Очистка кеша при проблемах make docker rebuild ``` ### Оптимизация образов - **Многоэтапная сборка** для уменьшения размера - **Кеширование слоев** для ускорения сборки - **Минимальные базовые образы** для безопасности - **Оптимизированные зависимости** для производительности ## 🔒 Безопасность ### Безопасность образов - **Регулярные обновления** базовых образов - **Минимальные права** для пользователей - **Сканирование уязвимостей** в CI/CD - **Подписанные образы** для целостности ### Лучшие практики 1. **Используйте конкретные теги** вместо `latest` 2. **Регулярно обновляйте** базовые образы 3. **Сканируйте образы** на уязвимости 4. **Используйте multi-arch** для совместимости ## 📚 Дополнительные ресурсы - [Docker Multi-Arch Build](https://docs.docker.com/buildx/working-with-buildx/) - [Ansible Collections](https://docs.ansible.com/ansible/latest/collections_guide/index.html) - [Molecule Documentation](https://molecule.readthedocs.io/) - [Systemd in Containers](https://systemd.io/CONTAINER_INTERFACE/) --- **Автор:** Сергей Антропов **Сайт:** https://devops.org.ru