Вопрос или проблема
У меня есть сервер Ubuntu на физическом оборудовании, который был настроен третьей стороной. Он запускает проприетарный сервис. Нет должной документации о том, что именно работает и как.
Мне пришлось перепрофилировать этот сервер для другого сервиса, сервера Ubuntu с Docker-контейнерами, запускающими новый сервис.
Мне нужно запустить предыдущий проприетарный сервис, который работал на сервере с физическим оборудованием. Также мне нужно запустить его в контейнере для упрощения развертывания и управления.
Я не уверен, как переместить сервер Ubuntu в контейнеры.
Я знаю, что это не “докеровский путь”.
Один из подходов, который я нашел, — это создать образ с нуля и перенести файловую систему, за исключением следующих папок: /proc, /sys, /dev, /tmp, /mnt, /media, /run, /boot и /swapfile.
FROM scratch
ADD folders-to-transfer.tar.gz /
CMD ["/bin/bash"]
Это верный способ?
Другие предложили использовать виртуальную машину, что кажется излишним.
Я бы предпочел клонировать весь диск сервера, на котором установлено программное обеспечение, с помощью чего-то вроде Clonezilla и запустить его как виртуальную машину.
Не зная точно, как работает это программное обеспечение и какие библиотеки ему нужны, это вовсе не кажется излишним.
Ответ или решение
Для переноса сервера Ubuntu на контейнер, особенно учитывая, что на нем работает проприетарное ПО без должной документации, необходимо подходить к задаче осмотрительно и внимательно. Для начала, давайте рассмотрим возможность использования Docker для этой цели, хотя это может и не сразу показаться наиболее очевидным решением. Ниже приведены шаги, которые помогут вам в процессе миграции:
Анализ текущей системы
-
Аудит системы: Сначала проведите тщательный анализ текущей системы. Это включает в себя понимание всех запущенных служб и установленных пакетов. Вам может понадобиться инструменты типа
ps
,top
,df
,netstat
,lsof
и другие для сбора нужной информации. -
Выявление зависимости: Попробуйте определить критические зависимости, которые могут быть необходимы для работы приложения. Возможно, придется разбираться в структуре файловой системы вручную, пробегая скрипты и конфигурационные файлы.
Перенос системы в контейнер
-
Создание Docker образа: Ваше предложение создать образ с нуля и перенести файловую систему, за исключением специфичных директорий (/proc, /sys, /dev и т.д.), хотя и необычно для Docker, теоретически осуществимо. Однако следует помнить о возможных проблемах с конфигурацией и зависимостями.
-
Проверка и настройка: После того, как вы перенесете файловую систему в Docker контейнер, нужно будет тщательно протестировать работу всех служб и исправить появившиеся проблемы. Используйте команды
docker exec
, чтобы войти в работающий контейнер и проводить диагностику.
Альтернативные решения
-
Виртуальная машина: Если цель заключается исключительно в сохранении текущего состояния сервера и его развертывании с минимальными изменениями, виртуализация может быть более подходящим решением. Clonezilla поможет создать образ всего диска, который затем можно развернуть как виртуальную машину в среде, поддерживающей такие образы.
-
Специализированные контейнерные инструменты: Рассмотрите возможность использования таких инструментов, как LXD, которые предоставляют возможности более близкие к виртуализации, чем традиционные Docker контейнеры. LXD может более точно воспроизвести состояние текущего сервера.
Заключение
Переход с физической машины на контейнер, особенно в условиях неопределенности с конфигурацией ПО, требует тщательного планирования и понимания рисков. Основная задача здесь — минимизация возможных ошибок при запуске приложения в новой среде и обеспечение его стабильной работы. Если возможности Docker не полностью укладываются в эту задачу, рассмотрение виртуализации может быть оправданным и практичным выбором.
Эти шаги помогут вам провести миграцию осознанно и с минимальными потерями функциональности. Подходите к каждому этапу с нужным вниманием и тестируйте каждое изменение перед применением в продуктивной среде.