Вопрос или проблема
Сегодня я заметил новое сообщение, когда зашел в свой контейнер Docker на Ubuntu 18.04.
Эта система была минимизирована путем удаления пакетов и контента, которые не требуются в системе, в которую не входят пользователи.
Чтобы восстановить этот контент, вы можете выполнить команду ‘unminimize’.
Тем не менее, это контейнер, в который я захожу время от времени.
На мой взгляд, это не очень разумная стратегия изменять системы без согласия пользователя таким образом, но оставим это на своем месте. Как я могу предотвратить минимизацию моих систем в Ubuntu?
Минимизация нарушает функциональность моего контейнера, и команда unminimize
завершает работу с ошибкой ядра.
Отвечаю, потому что у меня нет репутации для комментариев.
Хотя вы технически не можете предотвратить минимизацию вашей установки Ubuntu на базе Docker (поскольку Docker-образ идет в таком виде, когда вы его загружаете), вы определенно можете это отменить: добавьте вызов
yes | unminimize
в ваш Dockerfile. Команда “unminimize
” (/usr/local/sbin/unminimize
) отменяет процесс минимизации; поскольку она интерактивна и задает ряд вопросов “y/n
“, мы используем команду “yes
“, которая постоянно выводит строку “y
” до тех пор, пока не будет завершена.
Дело не в том, что Canonical изменила образ без согласия пользователей. То, что вы получаете, это преднастроенный ubuntu-minimal
, который используется большинством провайдеров облачного хостинга и контейнеров, таких как Docker.
Вы можете узнать больше о том, что такое Minimal Ubuntu.
Цитата для контекста:
Minimal Ubuntu – это набор образов Ubuntu, предназначенных для автоматизированного развертывания в масштабе и доступных на различных облачных платформах. Они используют оптимизированные ядра и оптимизированный процесс загрузки на своей целевой вычислительной платформе. Эти образы имеют значительно уменьшенный набор пакетов по умолчанию, без множества полезных инструментов для интерактивного использования. Они намного меньше, загружаются быстрее и требуют меньше обновлений безопасности со временем, поскольку в них установлено меньше пакетов.
Чтобы ответить на ваш вопрос – у вас есть более одного выбора:
- Используйте что-то другое, кроме ubuntu-minimal, в качестве базового образа
- Настройте образ, чтобы включить необходимые вам пакеты
Чтобы предотвратить минимизацию образов docker ubuntu, я написал Dockerfile. Пожалуйста, разверните контейнер, используя содержимое ниже Dockerfile.
From ubuntu
#Цель: Как развернуть контейнер ubuntu без минимизированных пакетов
#RUN apt-get install apt-utils -y
ENV DEBIAN_FRONTEND noninteractive
ENV TZ=Asia/Kolkata DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt install tzdata -y && apt install net-tools vim man file -y
RUN yes| unminimize
RUN apt-get update -y && apt-get upgrade -y && apt-get install ubuntu-minimal ubuntu-server-minimal -y
RUN apt-get install -y vim perl wget tar man sudo adduser netstat-nat net-tools curl w3m
RUN useradd -m -s /bin/bash ubuntu
RUN usermod -aG sudo ubuntu && echo "ubuntu ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/ubuntu
RUN chmod 044 /etc/sudoers.d/ubuntu
USER ubuntu:ubuntu
WORKDIR /home/ubuntu
CMD ["/bin/bash"]
#docker run -itd --privileged #type_here_target_image_id /usr/sbin/init #команда для запуска systemctl внутри контейнера Docker
ubuntu 24.04
по умолчанию не имеет unminimize
вот как это исправить:
apt-get update -y && \
DEBIAN_FRONTEND=noninteractive apt-get install -y unminimize \
&& rm -rf /var/lib/apt/lists/* \
&& yes | /usr/local/sbin/unminimize
связанная жалоба
Ответ или решение
Для предотвращения минимизации системы в контейнере Ubuntu, работающем на базе Docker, важно понимать концепцию минимизации и ваши возможные шаги по управлению этой проблемой. Минимизация в Ubuntu подразумевает удаление ненужных пакетов для оптимизации ресурсоемкости системы. Она чаще применяется в облачных окружениях и контейнерах, где важна эффективность работы и минимальные размеры образа.
Шаги для предотвращения минимизации
-
Использование подходящего базового образа:
Вместо использования образаubuntu-minimal
, который по умолчанию минимизирован, вы можете использовать стандартный образ Ubuntu. Это позволит вам избежать ненужного удаления пакетов, так как он содержит более полный набор инструментов и пакетов изначально.Пример в Dockerfile:
FROM ubuntu:latest
-
Обновление образа и установка необходимых пакетов:
Вы можете явно установить необходимые пакеты для вашего окружения. Важно обратить внимание на процесс установки и конфигурации.Пример установки нужных пакетов:
RUN apt-get update && apt-get install -y \ vim \ net-tools \ curl \ && rm -rf /var/lib/apt/lists/*
-
Автоматическое восстановление с помощью
unminimize
:
Если вы уже используете минимизированный образ, у вас есть возможность восстанавливать отсутствие пакетного обеспечения с помощью командыunminimize
. Это командное действие интерактивно, но для автоматизации вы можете использовать командуyes
.Пример использования:
RUN yes | unminimize
-
Настройка переменных окружения для упрощения установки:
Установите переменные окружения для автоматизации конфигурации, таких какDEBIAN_FRONTEND=noninteractive
, чтобы избежать интерактивных запросов во время установки пакетов.Пример:
ENV DEBIAN_FRONTEND=noninteractive
-
Создание пользовательского окружения:
Если вам необходимо настроить доступ пользователей, создайте нового пользователя, добавьте его в группу sudo и настройте права.Пример:
RUN useradd -m -s /bin/bash ubuntu \ && usermod -aG sudo ubuntu \ && echo "ubuntu ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/ubuntu \ && chmod 044 /etc/sudoers.d/ubuntu
-
Контроль после установки:
После завершения конфигурации убедитесь, что все нужные инструменты установлены и функционируют. Это предостережение поможет поймать любые проблемы, прежде чем они окажутся в производственной среде.
Заключение
В целом, несмотря на то, что для предотвращения минимизации напрямую нет возможности при использовании минимизированных образов, использование стандартных образов Ubuntu и последующее добавление нужных библиотек и инструментов представляет собой эффективное решение. Создавая соответствующий Dockerfile, вы сможете поддерживать необходимую структуру вашего контейнера, а также избежать ненужных проблем, которые могут возникнуть из-за минимизации.