Использую Docker примерно с 2017 года как для dev-окружений, так и для production. За это время технология стала для меня стандартным инструментом для контейнеризации приложений и сервисов.
Основной опыт - это работа с готовыми образами и их доработка под конкретные нужды проекта. Когда только знакомился с технологией, разбирался как правильно писать Dockerfile'ы с нуля, но в реальной работе чаще приходилось дорабатывать существующие конфигурации под требования проекта.
Использую docker-compose практически всегда, потому что это существенно упрощает конфигурирование совместной работы сервисов. Даже для одного сервиса порой удобнее создать compose-файл - так вся предварительная настройка собрана в унифицированный вид, и управлять запуском можно простыми командами.
С docker swarm и kubernetes не работал - в проектах, где применял Docker, хватало возможностей docker-compose для управления контейнерами.