Такая потребность возникает, когда в уже существующем контейнере ручками всё настроили и установили всё то чего не хватало в исходном и хотелось бы это сохранить для переиспользования или тиражирования.
Здесь конечно по-хорошему сделать Dockerfile и в нём внести все команды которые вы выполняли для доведения вашего контейнера до нужной кондиции, но часто просто это делается какое-то время и проходить повторно этот путь для восстановления последовательности исполняемы инструкций нет ни желания ни времени. Тут нам поможет commit -> tag -> push.
И так инструкция:
//посмотрим какие контейнеры имеются
docker ps -a
//для целевого контейнера делаем commit (сохраняем в image)
docker commit {CONTAINER ID} {имя создаваемого image-а}
//убедимся, что image создан
docker images
//создаём тег с нужной версией (latest создан при комите)
docker tag {имя существующего image} {имя image}:{версия\тег}
//Авторизируемся в dockerhub
docker login
//Загружаем новый image в DockerHub
docker push {имя image}:{версия\тег}
Вот и всё!