# 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 контроллер с предустановленными коллекциями ├── alt-linux/ # ALT Linux с systemd ├── astra-linux/ # Astra Linux с systemd ├── redos/ # RED OS с systemd ├── rhel/ # Red Hat Enterprise Linux с systemd ├── centos/ # CentOS Stream с systemd ├── alma/ # AlmaLinux с systemd ├── rocky/ # Rocky Linux с systemd ├── ubuntu/ # Ubuntu с systemd ├── debian/ # Debian с systemd └── 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:22.04` **Тег:** `inecs/ansible-lab:ubuntu-latest` **Описание:** Ubuntu 22.04 LTS с systemd и Docker #### Компоненты: - **Ubuntu 22.04 LTS** (Jammy Jellyfish) - **systemd** для управления сервисами - **Docker CE** с Docker Compose - **Python 3** с pip - **Пользователь ansible** с sudo правами #### Установленные пакеты: ```bash systemd systemd-sysv dbus curl wget git vim nano htop tree jq python3 python3-pip docker-ce docker-ce-cli containerd.io docker-compose-plugin ``` #### Настройки systemd: ```bash systemctl set-default multi-user.target ``` #### Использование: ```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:ubuntu-latest # Подключение к контейнеру docker exec -it ubuntu-test bash ``` ### 3. debian **Базовый образ:** `debian:bookworm` **Тег:** `inecs/ansible-lab:debian-latest` **Описание:** Debian 12 (Bookworm) с systemd и Docker #### Компоненты: - **Debian 12** (Bookworm) - **systemd** для управления сервисами - **Docker CE** с Docker Compose - **Python 3** с pip - **Пользователь ansible** с sudo правами #### Установленные пакеты: ```bash systemd systemd-sysv dbus curl wget git vim nano htop tree jq python3 python3-pip docker-ce docker-ce-cli containerd.io docker-compose-plugin ``` #### Настройки systemd: ```bash systemctl set-default multi-user.target ``` #### Использование: ```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:debian-latest ``` ### 4. rhel **Базовый образ:** `registry.access.redhat.com/ubi8/ubi` **Тег:** `inecs/ansible-lab:rhel-latest` **Описание:** Red Hat Enterprise Linux 8 с systemd и Docker #### Компоненты: - **RHEL 8** (Universal Base Image) - **systemd** для управления сервисами - **Docker CE** с Docker Compose - **Python 3** с pip - **Пользователь ansible** с sudo правами #### Установленные пакеты: ```bash systemd systemd-sysv dbus curl wget git vim nano jq python3 python3-pip docker-ce docker-ce-cli containerd.io docker-compose-plugin ``` #### Настройки systemd: ```bash systemctl set-default multi-user.target ``` #### Использование: ```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 **Базовый образ:** `quay.io/centos/centos:stream9` **Тег:** `inecs/ansible-lab:centos-latest` **Описание:** CentOS Stream 9 с systemd и Docker #### Компоненты: - **CentOS Stream 9** - **systemd** для управления сервисами - **Docker CE** с Docker Compose - **Python 3** с pip - **Пользователь ansible** с sudo правами #### Установленные пакеты: ```bash systemd systemd-sysv dbus curl wget git vim nano jq python3 python3-pip docker-ce docker-ce-cli containerd.io docker-compose-plugin ``` #### Настройки 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** для управления сервисами - **Docker CE** с Docker Compose - **Python 3** с pip - **Пользователь ansible** с sudo правами #### Установленные пакеты: ```bash systemd systemd-sysv dbus curl wget git vim nano jq python3 python3-pip docker-ce docker-ce-cli containerd.io docker-compose-plugin ``` #### Настройки 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** для управления сервисами - **Docker CE** с Docker Compose - **Python 3** с pip - **Пользователь ansible** с sudo правами #### Установленные пакеты: ```bash systemd systemd-sysv dbus curl wget git vim nano jq python3 python3-pip docker-ce docker-ce-cli containerd.io docker-compose-plugin ``` #### Настройки 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** для управления сервисами - **Docker CE** с Docker Compose - **Python 3** с pip - **Пользователь ansible** с sudo правами #### Установленные пакеты: ```bash systemd systemd-sysv dbus curl wget git vim nano htop tree jq python3 python3-pip docker-ce docker-ce-cli containerd.io docker-compose-plugin ``` #### Настройки 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** для управления сервисами - **Docker CE** с Docker Compose - **Python 3** с pip - **Пользователь ansible** с sudo правами #### Установленные пакеты: ```bash systemd systemd-sysv dbus curl wget git vim nano htop tree jq python3 python3-pip docker-ce docker-ce-cli containerd.io docker-compose-plugin ``` #### Настройки 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** для управления сервисами - **Docker CE** с Docker Compose - **Python 3** с pip - **Пользователь ansible** с sudo правами #### Установленные пакеты: ```bash systemd systemd-sysv dbus curl wget git vim nano htop tree jq python3 python3-pip docker-ce docker-ce-cli containerd.io docker-compose-plugin ``` #### Настройки 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