feat: добавлена пометка типа операции (Build/Push) в истории сборок Dockerfile

- Добавлена колонка 'Тип' во все таблицы истории сборок
- Для push операций отображается registry вместо платформ
- Сохранение пользователя при создании push лога
- Исправлена ошибка с logger в push_docker_image endpoint
- Улучшено отображение истории сборок с визуальными индикаторами
This commit is contained in:
Сергей Антропов
2026-02-15 22:59:02 +03:00
parent 23e1a6037b
commit 1fbf9185a2
232 changed files with 38075 additions and 5 deletions

View File

@@ -0,0 +1,790 @@
# Docker образы для универсальной системы тестирования DevOpsLab
**Автор:** Сергей Антропов
**Сайт:** https://devops.org.ru
**Версия:** 3.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
│ └── requirements.yml
├── k8s/ # Kubernetes контроллер (Kind, kubectl, Helm, Istio)
│ └── Dockerfile
├── k8s-portforward/ # Port-forward контейнер (устаревший)
│ ├── Dockerfile
│ └── portforward-container.py
├── 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** для работы с контейнерами
- **yq** для работы с YAML
- **jq** для работы с JSON
**Примечание:** 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"
```
#### Предустановленные роли:
- `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 converge.yml
```
### 2. k8s
**Базовый образ:** `ubuntu:22.04`
**Тег:** `inecs/ansible-lab:k8s-latest`
**Описание:** 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 хоста.
### 3. 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
```
### 4. 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
```
### 5. 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
```
### 6. 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
```
### 7. 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
```
### 8. 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
```
### 9. 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
```
### 10. 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
```
### 11. 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 с собственными образами DevOpsLab
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