Вопрос или проблема
У меня есть установка сервера Ubuntu, которая была настроена третьей стороной. На нем выполнялся проприетарный сервис (bare metal). Нет надлежащей документации о том, что работает и как. Мне пришлось перепрофилировать этот сервер под другой сервис (Ubuntu Server + докер-контейнеры, в которых работает новый сервис). Теперь меня попросили заново запустить этот старый сервис. Я бы хотел также переместить его в контейнер для облегчения развертывания и управления. Я не уверен, как переместить существующую установку Ubuntu Server в (или несколько) контейнеров.
Я понимаю, что это не “Docker way” делать это.
Один из найденных мной способов — создать образ с нуля и перенести файловую систему, за исключением следующих папок:
/proc /sys /dev /tmp /mnt /media /run /boot /swapfile
FROM scratch
ADD folders-to-transfer.tar.gz /
CMD ["/bin/bash"]
Интересно, правильно ли это делать? Некоторые также предлагали использовать виртуальные машины, что кажется излишним.
Я бы предпочел клонировать весь диск сервера, на котором установлено программное обеспечение, с помощью чего-то вроде Clonezilla и запустить его как виртуальную машину.
Без знания точного функционирования программного обеспечения и необходимых библиотек, это совершенно не кажется излишним.
Ответ или решение
* Перемещение установки Ubuntu Server в контейнер без учета конкретных служб: руководство для IT-экспертов *
Перенос существующей установки Ubuntu Server, особенно такой, которая была настроена третьей стороной и работает без надлежащей документации, представляет собой сложную задачу. Важно сделать это правильно, чтобы добиться более легкой развертки и управления, не зная точно, какие службы работают и какие зависимости требуются.
Шаг 1: Анализ и подготовка
Начните с тщательного анализа текущей системы. Это включает в себя:
- Оценка установленных пакетов: Используйте команды вроде
dpkg --get-selections
для получения списка всех установленных пакетов. - Сбор информации о запущенных службах: Проверьте активные службы с помощью
systemctl list-units --type=service
и отследите зависимости. - Выявите конфигурационные файлы и пользовательские скрипты: Поиск по каталогу
/etc
и домашним директориям может дать представление о специфических настройках, которые могли быть сделаны.
Шаг 2: Создание контейнера
Переход к контейнеризированной архитектуре требует создания базового изображения. Очевидно, что "Docker way" предполагает создание минимальных изображений, но в вашем случае подойдет другой подход:
- Создание базового образа:
- Используйте предложенный вами метод создания импортируемого архива со всеми необходыми файлами:
tar --exclude=/proc --exclude=/sys --exclude=/dev --exclude=/tmp --exclude=/mnt --exclude=/media --exclude=/run --exclude=/boot --exclude=/swapfile -zcvf filesystem.tar.gz /
- Затем создайте Dockerfile для импортирования этой файловой системы:
FROM scratch ADD filesystem.tar.gz / CMD ["/bin/bash"]
- Постройте образ:
docker build -t legacy-server-image .
- Используйте предложенный вами метод создания импортируемого архива со всеми необходыми файлами:
Шаг 3: Тестирование контейнера
После создания образа:
- Запустите контейнер:
docker run -it legacy-server-image /bin/bash
- Проверьте функционирование: Убедитесь, что все сервисы запускаются корректно, исправьте обнаруженные проблемы, связанные с конфигурациями и зависимостями.
- Логи и мониторинг: Используйте инструменты анализа логов и мониторинга, чтобы убедиться, что контейнер работает как ожидается.
Шаг 4: Оптимизация и документирование
- Рефакторинг: Если возможно, выделите отдельные службы в отдельные контейнеры. Это повысит отказоустойчивость и упростит управление.
- Документирование: Тщательно документируйте обновленную конфигурацию для последующего использования.
Заключительные слова
Важно признать, что этот метод не является традиционным подходом Docker и может потребовать компромиссов. Однако, в данной ситуации это позволяет сохранить функциональность устаревшей системы без необходимости полного её переосмысления.
Создание виртуальной машины может быть альтернативой, если контейнеризация создает чрезмерные сложности, особенно в плане сетевой конфигурации и совместимости библиотек.
Эти шаги помогут перенести существующую установку Ubuntu Server в контейнер, позволяя управлять ею более гибко. Реализация этого подхода требует внимательности и детального тестирования, чтобы избежать потенциальных проблем в работе услуги.