Я бы почти никогда не нацелился на Ansible против контейнера Docker. Модель
Ansible гораздо больше подходит для нацеливания на ВМ. Если у вас есть игровая книга Ansible, предназначенная для физической системы или экземпляра облака, виртуальная машина будет хорошим зеркалом ожидаемой среды операционной системы, но настройка Docker будет совсем другой.
Ansible обычно планирует установить соединение s sh с целевым хостом, запустить установленный там Python, и его изменения должны быть достаточно постоянными. Напротив, контейнер Docker почти никогда не запускает демон s sh, часто не имеет Python, и любые внесенные изменения будут потеряны, как только контейнер выйдет. Типичная ориентированная на сервер Ansible playbook будет делать такие вещи, как настройка конфигурации службы и сценариев инициализации, но в системе Docker отсутствует инициализация, и обычно конфигурация службы вводится.
Вероятно, лучше здесь думать о контейнере Docker как об упаковке вокруг одного процесса. Вы можете использовать bind mounts для внедрения конфигурации с хоста, и вы можете использовать Ansible на хосте, чтобы запустить контейнер, но вы не будете использовать Ansible, чтобы «настроить» контейнер. Если вам требуется программное обеспечение, установленное в контейнере, то при использовании собственной системы Docker docker build
это можно сделать воспроизводимым способом, не требуя дополнительных действий после запуска контейнера.
Единственное заметное исключение для "почти никогда" не запускает тесты молекул внутри контейнера , но учтите, что эта настройка имеет характер временных и кратковременных изменений (как только тест закончится, вы хотите разрушить контейнер).