Files
DevOpsLab/dockerfiles
Сергей Антропов bfed0d1ea8 refactor: Переименование проекта с AnsibleTemplate на AnsibleLab
- Обновлено название проекта во всех файлах
- Изменена документация (README.md, docs/*.md)
- Обновлены конфигурационные файлы (Makefile, env.example)
- Изменены CI/CD файлы (GitHub Actions, Azure DevOps, Jenkins)
- Обновлены скрипты и Dockerfile
- Изменено название в molecule.yml и dockerfiles/README.md

Все ссылки и упоминания проекта теперь используют название AnsibleLab
2025-10-25 19:30:54 +03:00
..

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

Предустановленные коллекции:

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

Переменные окружения:

DOCKER_HOST=unix:///var/run/docker.sock
ANSIBLE_FORCE_COLOR=1
ANSIBLE_STDOUT_CALLBACK=yaml
ANSIBLE_CALLBACKS_ENABLED=profile_tasks

Использование:

# Запуск контроллера
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 правами

Установленные пакеты:

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:

systemctl set-default multi-user.target

Использование:

# Запуск 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 правами

Установленные пакеты:

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:

systemctl set-default multi-user.target

Использование:

# Запуск 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 правами

Установленные пакеты:

systemd systemd-sysv dbus
curl wget git vim nano jq
python3 python3-pip
docker-ce docker-ce-cli containerd.io docker-compose-plugin

Настройки systemd:

systemctl set-default multi-user.target

Использование:

# Запуск 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 правами

Установленные пакеты:

systemd systemd-sysv dbus
curl wget git vim nano jq
python3 python3-pip
docker-ce docker-ce-cli containerd.io docker-compose-plugin

Настройки systemd:

systemctl set-default multi-user.target

Использование:

# Запуск 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 правами

Установленные пакеты:

systemd systemd-sysv dbus
curl wget git vim nano jq
python3 python3-pip
docker-ce docker-ce-cli containerd.io docker-compose-plugin

Настройки systemd:

systemctl set-default multi-user.target

Использование:

# Запуск 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 правами

Установленные пакеты:

systemd systemd-sysv dbus
curl wget git vim nano jq
python3 python3-pip
docker-ce docker-ce-cli containerd.io docker-compose-plugin

Настройки systemd:

systemctl set-default multi-user.target

Использование:

# Запуск 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 правами

Установленные пакеты:

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:

systemctl set-default multi-user.target

Использование:

# Запуск 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 правами

Установленные пакеты:

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:

systemctl set-default multi-user.target

Использование:

# Запуск 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 правами

Установленные пакеты:

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:

systemctl set-default multi-user.target

Использование:

# Запуск 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

🔧 Управление образами

Сборка всех образов

# Сборка всех образов (multi-arch)
make docker build

# Сборка конкретного образа
make docker build-image IMAGE=ubuntu

# Полная пересборка с очисткой кеша
make docker rebuild

Отправка в Docker Hub

# Отправка всех образов
make docker push

# Загрузка всех образов
make docker pull

Очистка образов

# Очистка локальных образов
make docker clean

# Полная очистка Docker
make docker purge

Информация об образах

# Информация о собранных образах
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'а

# Настройка multi-arch builder
make docker setup-builder

# Проверка builder'а
make docker diagnose

# Сброс builder'а при проблемах
make docker reset-builder

🚀 Использование в preset'ах

Пример preset'а с собственными образами

# 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]

Тестирование с собственными образами

# Тестирование с собственными образами
make custom-images test full

# Проверка наличия образов
make custom-images check

# Сборка всех образов
make custom-images build

📊 Мониторинг и диагностика

Проверка образов

# Проверка размера образов
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

Логи сборки

# Подробные логи сборки
make docker build 2>&1 | tee build.log

# Логи конкретного образа
make docker build-image IMAGE=ubuntu 2>&1 | tee ubuntu-build.log

🐛 Troubleshooting

Проблемы с сборкой

  1. Builder не создается:

    make docker diagnose
    make docker reset-builder
    
  2. Образы не собираются:

    make docker clean
    make docker setup-builder
    make docker build
    
  3. Проблемы с multi-arch:

    make docker clean-builder
    make docker setup-builder
    

Проблемы с образами

  1. Образы не запускаются:

    # Проверка 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. Проблемы с правами:

    # Проверка пользователя ansible
    docker run --rm inecs/ansible-lab:ubuntu-latest id ansible
    
    # Проверка sudo прав
    docker run --rm inecs/ansible-lab:ubuntu-latest sudo -l
    

📈 Производительность

Оптимизация сборки

# Использование кеша Docker
make docker build

# Очистка кеша при проблемах
make docker rebuild

Оптимизация образов

  • Многоэтапная сборка для уменьшения размера
  • Кеширование слоев для ускорения сборки
  • Минимальные базовые образы для безопасности
  • Оптимизированные зависимости для производительности

🔒 Безопасность

Безопасность образов

  • Регулярные обновления базовых образов
  • Минимальные права для пользователей
  • Сканирование уязвимостей в CI/CD
  • Подписанные образы для целостности

Лучшие практики

  1. Используйте конкретные теги вместо latest
  2. Регулярно обновляйте базовые образы
  3. Сканируйте образы на уязвимости
  4. Используйте multi-arch для совместимости

📚 Дополнительные ресурсы


Автор: Сергей Антропов
Сайт: https://devops.org.ru