# Docker образы DevOpsLab **Автор:** Сергей Антропов **Сайт:** https://devops.org.ru **Версия:** 3.0.0 ## 🐳 Обзор DevOpsLab использует предварительно собранные Docker образы для различных операционных систем с полной поддержкой systemd. Все образы поддерживают multi-arch сборку и автоматически публикуются в Docker Hub под namespace `inecs/ansible-lab`. ## 📁 Структура dockerfiles/ ``` dockerfiles/ ├── ansible-controller/ # Ansible контроллер │ ├── Dockerfile │ ├── docker-compose.yml │ ├── requirements.txt │ └── requirements.yml ├── k8s/ # Kubernetes контроллер (Kind, kubectl, Helm, Istio) │ └── Dockerfile ├── k8s-portforward/ # Port-forward контейнер (устаревший) │ ├── Dockerfile │ └── portforward-container.py ├── alt-linux/ # ALT Linux P9 ├── astra-linux/ # Astra Linux 1.7 ├── redos/ # RED OS 9 ├── rhel/ # Red Hat Enterprise Linux 8 ├── centos7/ # CentOS 7 ├── centos8/ # CentOS 8 ├── centos9/ # CentOS Stream 9 ├── alma/ # AlmaLinux 8 ├── rocky/ # Rocky Linux 8 ├── ubuntu20/ # Ubuntu 20.04 LTS ├── ubuntu22/ # Ubuntu 22.04 LTS ├── ubuntu24/ # Ubuntu 24.04 LTS ├── debian9/ # Debian 9 Stretch ├── debian10/ # Debian 10 Buster ├── debian11/ # Debian 11 Bullseye ├── debian12/ # Debian 12 Bookworm └── README.md # Документация по Dockerfiles ``` ## 🚀 Доступные образы ### ansible-controller **Базовый образ:** `ubuntu:22.04` **Теги:** `inecs/ansible-lab:ansible-controller-latest` **Платформы:** linux/amd64, linux/arm64 Ansible контроллер с предустановленными коллекциями и инструментами для разработки и тестирования. #### Компоненты: - Ansible Core с последними коллекциями - Docker CLI для работы с контейнерами - yq для работы с YAML - jq для работы с JSON - Molecule для тестирования ролей **Примечание:** Kubernetes инструменты (kubectl, Helm, Kind, Istio) были перенесены в отдельный образ `k8s`. #### Предустановленные коллекции: ```yaml collections: - name: community.docker version: ">=3.0.0" - name: community.general version: ">=7.0.0" - name: ansible.posix version: ">=1.5.4" - name: kubernetes.core version: ">=2.0.0" ``` #### Использование: ```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 # Выполнение команды 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 ``` ### k8s **Базовый образ:** `ubuntu:22.04` **Теги:** `inecs/ansible-lab:k8s-latest` **Платформы:** linux/amd64, linux/arm64 Kubernetes контроллер с инструментами для работы с Kubernetes, Helm, Istio и Kind кластерами. #### Компоненты: - **Docker CLI** (20.10.24) для работы с контейнерами - **kubectl** (1.34.1) для управления Kubernetes - **Helm** (latest) для управления пакетами Kubernetes - **Kind** (0.30.0) для локальных Kubernetes кластеров - **Istio CLI** (1.22.1) для управления Service Mesh - Python 3 с модулем yaml для выполнения скриптов #### Использование: ```bash # Создание Kind кластера docker run -it --rm \ --name k8s-controller \ --network kind \ -v /var/run/docker.sock:/var/run/docker.sock:rw \ inecs/ansible-lab:k8s-latest \ kind create cluster --name lab # Выполнение kubectl команд docker exec k8s-controller kubectl get nodes # Установка Helm релиза docker exec k8s-controller helm install prometheus prometheus-community/kube-prometheus-stack ``` **Примечание:** Этот образ используется автоматически при выполнении `make k8s` команд. Контейнер запускается с именем `k8s-controller` и подключен к Docker daemon хоста. ### Ubuntu **Базовые образы:** - `ubuntu:20.04` → `inecs/ansible-lab:ubuntu20-latest` - `ubuntu:22.04` → `inecs/ansible-lab:ubuntu22-latest` - `ubuntu:24.04` → `inecs/ansible-lab:ubuntu24-latest` **Платформы:** linux/amd64, linux/arm64 Ubuntu LTS с systemd. #### Компоненты: - systemd для управления сервисами - Python 3 с pip - Пользователь ansible с sudo правами - Основные утилиты (curl, wget, git, vim, nano, htop, tree, jq) - **Примечание**: Docker CE и Docker Compose не установлены (закомментированы в Dockerfile) #### Использование: ```bash docker run -d --privileged \ --name ubuntu-test \ -v /sys/fs/cgroup:/sys/fs/cgroup:rw \ --tmpfs /run --tmpfs /run/lock \ --cap-add SYS_ADMIN \ inecs/ansible-lab:ubuntu22-latest ``` ### Debian **Базовые образы:** - `debian:9` → `inecs/ansible-lab:debian9-latest` - `debian:10` → `inecs/ansible-lab:debian10-latest` - `debian:11` → `inecs/ansible-lab:debian11-latest` - `debian:bookworm` → `inecs/ansible-lab:debian12-latest` **Платформы:** linux/amd64, linux/arm64 Debian с systemd. #### Компоненты: - systemd для управления сервисами - Python 3 с pip - Пользователь ansible с sudo правами - Основные утилиты - **Примечание**: Docker CE и Docker Compose не установлены #### Использование: ```bash docker run -d --privileged \ --name debian-test \ -v /sys/fs/cgroup:/sys/fs/cgroup:rw \ --tmpfs /run --tmpfs /run/lock \ --cap-add SYS_ADMIN \ inecs/ansible-lab:debian12-latest ``` ### CentOS **Базовые образы:** - `centos:7` → `inecs/ansible-lab:centos7-latest` - `quay.io/centos/centos:8` → `inecs/ansible-lab:centos8-latest` - `quay.io/centos/centos:stream9` → `inecs/ansible-lab:centos9-latest` **Платформы:** linux/amd64, linux/arm64 CentOS с systemd. #### Компоненты: - systemd для управления сервисами - Python 3 с pip - Пользователь ansible с sudo правами - Основные утилиты - **Примечание**: Docker CE и Docker Compose не установлены #### Использование: ```bash docker run -d --privileged \ --name centos-test \ -v /sys/fs/cgroup:/sys/fs/cgroup:rw \ --tmpfs /run --tmpfs /run/lock \ --cap-add SYS_ADMIN \ inecs/ansible-lab:centos9-latest ``` ### AlmaLinux **Базовый образ:** `almalinux:8` **Тег:** `inecs/ansible-lab:alma-latest` **Платформы:** linux/amd64, linux/arm64 AlmaLinux 8 с systemd. ### Rocky Linux **Базовый образ:** `rockylinux:8` **Тег:** `inecs/ansible-lab:rocky-latest` **Платформы:** linux/amd64, linux/arm64 Rocky Linux 8 с systemd. ### Red Hat Enterprise Linux **Базовый образ:** `registry.access.redhat.com/ubi8/ubi` **Тег:** `inecs/ansible-lab:rhel-latest` **Платформы:** linux/amd64, linux/arm64 Red Hat Enterprise Linux 8 с systemd. ### ALT Linux **Базовые образы:** - `altlinux/p9` → `inecs/ansible-lab:alt9-latest` - `altlinux/p10` → `inecs/ansible-lab:alt10-latest` **Платформы:** linux/amd64, linux/arm64 ALT Linux P9 и P10 с systemd. #### Компоненты: - systemd для управления сервисами - Python 3 с pip - Пользователь ansible с sudo правами - Основные утилиты (curl, wget, nano, sudo) #### Использование: ```bash docker run -d --privileged \ --name alt-test \ -v /sys/fs/cgroup:/sys/fs/cgroup:rw \ --tmpfs /run --tmpfs /run/lock \ --cap-add SYS_ADMIN \ inecs/ansible-lab:alt9-latest ``` ### Astra Linux **Базовые образы:** - `registry.astralinux.ru/library/astra/ubi17:1.7.6.uu2` → `inecs/ansible-lab:astra-linux-latest` (AMD64) - `debian:bookworm-slim` → `inecs/ansible-lab:astra-linux-arm64-latest` (ARM64 совместимый) **Платформы:** linux/amd64, linux/arm64 Astra Linux 1.7 с systemd. Для ARM64 используется совместимый образ на базе Debian. #### Компоненты: - systemd для управления сервисами - Python 3 с pip - Пользователь ansible с sudo правами - Docker CE и Docker Compose - yq для работы с YAML - Основные утилиты (curl, wget, nano, sudo) #### Особенности ARM64 версии: - Эмулирует Astra Linux через настройку `/etc/os-release` - Максимально совместим с оригинальным Astra Linux - Поддерживает все необходимые пакеты и конфигурации #### Использование: ```bash # AMD64 версия (оригинальная) docker run -d --privileged \ --name astra-test \ -v /sys/fs/cgroup:/sys/fs/cgroup:rw \ --tmpfs /run --tmpfs /run/lock \ --cap-add SYS_ADMIN \ inecs/ansible-lab:astra-linux-latest # ARM64 версия (совместимая) docker run -d --privileged \ --name astra-arm64-test \ -v /sys/fs/cgroup:/sys/fs/cgroup:rw \ --tmpfs /run --tmpfs /run/lock \ --cap-add SYS_ADMIN \ inecs/ansible-lab:astra-linux-arm64-latest ``` #### Сборка ARM64 версии: ```bash # Специальная команда для сборки Astra Linux с поддержкой ARM64 make docker build-astra-arm64 ``` ### RED OS **Базовый образ:** `registry.red-soft.ru/ubi7/ubi` **Тег:** `inecs/ansible-lab:redos-latest` **Платформы:** linux/amd64 (ограничение базового образа) RED OS 9 с systemd. ## 🔨 Сборка образов ### Сборка всех образов ```bash # Собрать все образы (multi-arch) make docker build # Пересборка с очисткой кеша make docker rebuild # Сборка конкретного образа make docker build-image IMAGE=centos7 ``` ### Поддерживаемые платформы По умолчанию все образы собираются для следующих платформ: - `linux/amd64` - 64-bit x86 - `linux/arm64` - 64-bit ARM Дополнительные платформы (опционально): - `linux/riscv64` - RISC-V 64-bit - `linux/ppc64le` - PowerPC 64-bit LE - `linux/s390x` - IBM Z - `linux/386` - 32-bit x86 - `linux/arm/v7` - ARM v7 - `linux/arm/v6` - ARM v6 ### Тегирование Все образы автоматически получают теги: - `inecs/ansible-lab:<имя>-<версия>` - версионированный тег - `inecs/ansible-lab:<имя>-latest` - последняя версия Например: - `inecs/ansible-lab:centos9-9.0` - `inecs/ansible-lab:centos9-latest` - `inecs/ansible-lab:ubuntu22-22.04` - `inecs/ansible-lab:ubuntu22-latest` ## 📤 Публикация в Docker Hub ### Требования 1. Авторизация в Docker Hub: ```bash docker login ``` 2. Настройка билд-ксер (buildx) для multi-arch: ```bash make docker setup-builder ``` ### Публикация ```bash # Публикация всех образов make docker push # Публикация конкретного образа make docker build-image IMAGE=centos7 # (публикуется автоматически при сборке) ``` ## 🧪 Использование в Molecule ### Preset конфигурация ```yaml # molecule/presets/my-preset.yml images: ubuntu22: "inecs/ansible-lab:ubuntu22-latest" centos9: "inecs/ansible-lab:centos9-latest" debian12: "inecs/ansible-lab:debian12-latest" hosts: - name: web1 family: ubuntu22 groups: [web, test] - name: db1 family: centos9 groups: [database, test] ``` ### Тестирование с preset ```bash # Использование preset в тестах MOLECULE_PRESET=my-preset make role test # Или напрямую make role test my-preset ``` ## 🔧 Особенности образов ### Поддержка systemd Все образы настроены для работы с systemd в контейнере: ```bash docker run -d --privileged \ --tmpfs /run --tmpfs /run/lock \ -v /sys/fs/cgroup:/sys/fs/cgroup:rw \ --cap-add SYS_ADMIN \ inecs/ansible-lab:ubuntu22-latest ``` ### Настройки по умолчанию - **Пользователь ansible**: пароль `ansible`, sudo без пароля - **SSH доступ**: включен для пользователя ansible - **systemd**: multi-user.target по умолчанию - **Временные файловые системы**: `/run`, `/run/lock` - **Volumes**: `/sys/fs/cgroup` ### Docker внутри Docker Все образы поддерживают запуск Docker внутри контейнера: ```bash docker run -d --privileged \ -v /var/run/docker.sock:/var/run/docker.sock \ -v /sys/fs/cgroup:/sys/fs/cgroup:rw \ --tmpfs /run --tmpfs /run/lock \ --cap-add SYS_ADMIN \ inecs/ansible-lab:centos9-latest ``` ## 📋 Матрица совместимости | Образ | Платформы | systemd | Docker | Python 3 | Kubernetes Tools | |-------|-----------|---------|--------|----------|------------------| | ansible-controller | amd64, arm64 | ✅ | ✅ | ✅ | ❌ | | k8s | amd64, arm64 | ❌ | ✅ | ✅ | ✅ (kubectl, Helm, Kind, Istio) | | ubuntu20/22/24 | amd64, arm64 | ✅ | ✅ | ✅ | ❌ | | debian9/10/11/12 | amd64, arm64 | ✅ | ✅ | ✅ | ❌ | | centos7/8/9 | amd64, arm64 | ✅ | ✅ | ✅ | ❌ | | alma | amd64, arm64 | ✅ | ✅ | ✅ | ❌ | | rocky | amd64, arm64 | ✅ | ✅ | ✅ | ❌ | | rhel | amd64, arm64 | ✅ | ✅ | ✅ | ❌ | | alt9/alt10 | amd64, arm64 | ✅ | ✅ | ✅ | ❌ | | astra-linux | amd64, arm64 | ✅ | ✅ | ✅ | ❌ | | astra-linux-arm64 | amd64, arm64 | ✅ | ✅ | ✅ | ❌ | | redos | amd64 | ✅ | ✅ | ✅ | ❌ | ## 🛠️ Управление образами ### Проверка наличия образов ```bash # Проверка локальных образов docker images | grep inecs/ansible-lab # Проверка в Molecule make custom-images check ``` ### Обновление образов ```bash # Загрузить свежие образы make docker pull # Пересобрать с обновлениями make docker rebuild # Полное обновление make docker update ``` ### Очистка ```bash # Удалить локальные образы make docker clean # Полная очистка make docker purge ``` ## 📚 Дополнительная информация - [Структура dockerfiles/](../dockerfiles/) - [Makefile команды](../README.md#-управление-docker-образами) - [Preset система](molecule-guide.md#preset-система) - [CI/CD конфигурация](cicd-setup.md) ## 🔗 Полезные ссылки - **Docker Hub**: https://hub.docker.com/r/inecs/ansible-lab - **DevOpsLab**: https://devops.org.ru - **Документация**: https://github.com/DevOpsLab/docs