Files
DevOpsLab/docs/dockerfiles.md
Сергей Антропов 4e86b7f0c3
Some checks failed
Ansible Testing / lint (push) Has been cancelled
Ansible Testing / test (default) (push) Has been cancelled
Ansible Testing / test (minimal) (push) Has been cancelled
Ansible Testing / test (performance) (push) Has been cancelled
Ansible Testing / deploy-check (push) Has been cancelled
Обновлена документация dockerfiles.md: добавлен образ k8s, обновлена структура и матрица совместимости
2025-10-26 12:51:30 +03:00

456 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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:alt-linux-latest`
**Платформы:** linux/amd64 (ограничение базового образа)
ALT Linux P9 с systemd.
### Astra Linux
**Базовый образ:** `registry.astralinux.ru/library/astra/ubi17:1.7.6.uu2`
**Тег:** `inecs/ansible-lab:astra-linux-latest`
**Платформы:** linux/amd64 (ограничение базового образа)
Astra Linux 1.7 с systemd.
### 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 | ✅ | ✅ | ✅ | ❌ |
| alt-linux | amd64 | ✅ | ✅ | ✅ | ❌ |
| astra-linux | amd64 | ✅ | ✅ | ✅ | ❌ |
| 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