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

14 KiB
Raw Permalink Blame History

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.

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

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"

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

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

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

# Создание 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.04inecs/ansible-lab:ubuntu20-latest
  • ubuntu:22.04inecs/ansible-lab:ubuntu22-latest
  • ubuntu:24.04inecs/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)

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

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:9inecs/ansible-lab:debian9-latest
  • debian:10inecs/ansible-lab:debian10-latest
  • debian:11inecs/ansible-lab:debian11-latest
  • debian:bookworminecs/ansible-lab:debian12-latest

Платформы: linux/amd64, linux/arm64

Debian с systemd.

Компоненты:

  • systemd для управления сервисами
  • Python 3 с pip
  • Пользователь ansible с sudo правами
  • Основные утилиты
  • Примечание: Docker CE и Docker Compose не установлены

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

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:7inecs/ansible-lab:centos7-latest
  • quay.io/centos/centos:8inecs/ansible-lab:centos8-latest
  • quay.io/centos/centos:stream9inecs/ansible-lab:centos9-latest

Платформы: linux/amd64, linux/arm64

CentOS с systemd.

Компоненты:

  • systemd для управления сервисами
  • Python 3 с pip
  • Пользователь ansible с sudo правами
  • Основные утилиты
  • Примечание: Docker CE и Docker Compose не установлены

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

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.

🔨 Сборка образов

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

# Собрать все образы (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:
docker login
  1. Настройка билд-ксер (buildx) для multi-arch:
make docker setup-builder

Публикация

# Публикация всех образов
make docker push

# Публикация конкретного образа
make docker build-image IMAGE=centos7
# (публикуется автоматически при сборке)

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

Preset конфигурация

# 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

# Использование preset в тестах
MOLECULE_PRESET=my-preset make role test

# Или напрямую
make role test my-preset

🔧 Особенности образов

Поддержка systemd

Все образы настроены для работы с systemd в контейнере:

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 внутри контейнера:

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

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

Проверка наличия образов

# Проверка локальных образов
docker images | grep inecs/ansible-lab

# Проверка в Molecule
make custom-images check

Обновление образов

# Загрузить свежие образы
make docker pull

# Пересобрать с обновлениями
make docker rebuild

# Полное обновление
make docker update

Очистка

# Удалить локальные образы
make docker clean

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

📚 Дополнительная информация

🔗 Полезные ссылки