Как изменить конфигурацию работающих контейнеров Docker — CloudSavvy IT

Контейнеры Docker обычно рассматриваются как неизменяемые после того, как они начали работать. Однако вы можете динамически обновлять некоторые параметры конфигурации, такие как имя контейнера и пределы его аппаратных ресурсов.

В этом руководстве мы покажем вам, как использовать встроенные команды Docker для изменения выбранных параметров запущенных контейнеров. Мы также рассмотрим, что вам не следует менять, и обходной путь, который вы можете использовать, если считаете, что должны это сделать.

Переименование контейнера

Программы для Windows, мобильные приложения, игры - ВСЁ БЕСПЛАТНО, в нашем закрытом телеграмм канале - Подписывайтесь:)

Самая простая модификация — это переименование созданного контейнера. Имена назначаются с помощью флага —name для запуска докера. Если имя не указано, демон Docker назначает случайное. Вы можете использовать имена для ссылок на контейнеры в командах Docker CLI; выбор подходящего запоминающегося позволяет избежать запуска docker ps для поиска автоматически назначенного имени или идентификатора контейнера.

Команда docker rename используется для изменения имен контейнеров после создания. Он принимает два аргумента: ID или текущее имя целевого контейнера и новое имя для назначения:

# docker rename <новое имя> docker rename old_name new_name

Изменение политики перезапуска

Политики перезапуска определяют, должны ли контейнеры запускаться автоматически после перезагрузки хоста или запуска демона Docker. Четыре доступные политики позволяют принудительно запускать контейнер, останавливать его или запускать по условию на основе предыдущего кода выхода или рабочего состояния контейнера.

Docker поддерживает изменение политик перезапуска на лету. Это полезно, если вы планируете перезагрузить хост или демон Docker и хотите, чтобы определенный контейнер оставался остановленным или запускался автоматически после определенного события.

docker update —restart если не остановлен demo_container

В приведенном выше примере политика перезапуска demo_container изменяется на «если не остановлено». Эта политика заставляет контейнер запускаться с демоном, если только он не был остановлен вручную перед последним выходом демона.

Изменение лимитов аппаратных ресурсов

Команду docker update также можно использовать для изменения ограничений ресурсов, применяемых к контейнерам. Вы должны передать один или несколько идентификаторов или имен контейнеров вместе со списком флагов, определяющих ограничения, устанавливаемые для этих контейнеров.

Флаги доступны для всех ограничений ресурсов, поддерживаемых Docker Run. Вот сжатый список опций, которые вы можете использовать:

  • —blkio-weight — изменить относительный вес блока ввода-вывода контейнера.
  • —cpus — установить количество ЦП, доступных для контейнера.
  • —cpu-shares — Установить относительный вес доли ЦП.
  • —memory — изменить лимит памяти контейнера (например, 1024M).
  • —memory-swap — настроить объем памяти, который контейнер может выгрузить на диск; используйте размер, например 1024M, чтобы установить определенный предел, или -1 для неограниченного обмена.
  • —kernel-memory — изменить лимит памяти ядра контейнера. Контейнеры, которым не хватает памяти ядра, могут негативно повлиять на другие рабочие нагрузки на хост-компьютере.
  • —pids-limit — настроить максимальное количество идентификаторов процессов, разрешенных внутри контейнера, ограничивая количество процессов, которые могут быть запущены.

Вот пример использования обновления докера для изменения ограничения памяти и количества ЦП для двух ваших контейнеров:

обновление докера —cpus 4 —memory 1024M первый_контейнер второй_контейнер

Все доступные флаги, кроме —kernel-memory, можно использовать с работающими контейнерами Linux. Чтобы изменить лимит памяти ядра, вы должны сначала остановить контейнер с помощью docker stop.

Имейте в виду, что ни один из этих флагов в настоящее время не поддерживается для контейнеров на базе Windows. Однако они будут работать с контейнерами Linux, работающими на хост-компьютере Windows.

Когда не использовать эти команды?

Команды docker update и docker rename следует использовать с контейнерами, которые вы создали вручную с помощью docker run. Будьте осторожны при использовании их с контейнерами, созданными другими инструментами, такими как docker-compose.

Изменение имени контейнера может сделать его необнаружимым для исходного инструмента, что может нарушить работу других компонентов вашего стека. Кроме того, если вы декларативно определяете ограничения ресурсов в файле docker-compose.yml, повторный запуск команды docker-compose up повторно применит эти исходные ограничения к вашему контейнеру.

Поэтому вам следует придерживаться существующего решения для управления контейнерами, если вы его используете. Для Compose это означает изменение имен контейнеров и ограничений ресурсов в файле docker-compose.yml, а затем запуск docker-compose up -d для автоматического применения изменений. Это гарантирует, что вы не будете непреднамеренно терять контейнеры или вызывать непреднамеренные побочные эффекты.

А как насчет других свойств (изображение/порты/тома)?

Аппаратные ограничения, политики ресурсов и имена контейнеров — единственные параметры конфигурации, которые Docker CLI позволяет вам изменить. Вы не можете изменить образ работающего контейнера; вы также не можете легко изменить другие параметры, такие как привязки портов и тома.

Вам следует создать другой контейнер, если эти значения устарели. Уничтожьте текущий экземпляр и используйте docker run, чтобы начать замену новым образом и скорректированными настройками.

Поскольку контейнеры должны быть эфемерными и не иметь состояния, вы должны иметь возможность заменить их в любое время. Используйте тома для хранения постоянных данных контейнера; этот механизм позволяет повторно прикреплять файлы с отслеживанием состояния к новому контейнеру, повторяя флаги -v, переданные исходной команде запуска докера:

docker run -v config-volume:/usr/lib/config —name demo example-image:v1 docker rm demo # Существующие данные в /usr/lib/config сохранены docker run -v config-volume:/usr/lib/ config —name demo2 пример изображения: v2

Опасная зона: изменение других свойств контейнера

Хотя вы должны стремиться заменить контейнеры везде, где это возможно, можно изменить свойства существующих, напрямую отредактировав файлы конфигурации Docker. Будьте осторожны при использовании этого метода: он полностью не поддерживается, и неуместное изменение может сломать ваш контейнер.

Хотя этот параметр позволяет произвольно редактировать существующие контейнеры, он не будет работать во время их работы. Используйте команду docker stop my-container, чтобы остановить контейнер, который вы хотите отредактировать, а затем продолжите вносить изменения.

Файлы конфигурации контейнера имеют следующий путь на вашем хосте:

/var/lib/docker/containers/<идентификатор контейнера>/config.v2.json

Вам нужно знать полный идентификатор контейнера, а не усеченную версию, показанную docker ps. Вы можете использовать команду docker inspect, чтобы получить это:

docker inspect <короткий идентификатор или имя> | jq | Идентификатор grep

Когда вы доберетесь до файла config.v2.json контейнера, вы можете открыть его в текстовом редакторе, чтобы внести необходимые изменения. JSON хранит конфигурацию контейнера, созданную при запуске docker run. Вы можете изменить содержимое, чтобы изменить такие свойства, как привязки портов, переменные среды, тома, а также точку входа и команду контейнера.

Чтобы добавить привязку порта, найдите в файле ключ PortBindings, затем вставьте новый элемент в объект:

{«PortBindings»: {«80/tcp»: {«HostIp»: «», «HostPort»: «8080»}}}

Здесь порт 80 в контейнере привязан к порту 8080 на хосте. Точно так же просто добавить переменные среды — найдите ключ Env, затем вставьте новые элементы в массив:

{ «Окруж.»: [
«FOO=bar»,
«CUSTOM_VARIABLE=example»
]}

Закончив редактирование, перезапустите службу Docker и ваш контейнер:

sudo service docker перезапустить докер запустить мой-контейнер

Теперь контейнер будет работать с обновленной конфигурацией.

Вывод

Контейнеры Docker предназначены для эфемерных единиц, которые вы заменяете, когда их конфигурация устаревает. Несмотря на это намерение, существуют сценарии, в которых необходимо изменить существующий контейнер. Docker обрабатывает наиболее распространенные варианты использования — изменение имени и корректировку лимита ресурсов в режиме реального времени — с помощью встроенных команд CLI, таких как обновление докера.

Если вы хотите изменить другое свойство, всегда пытайтесь заменить контейнер в качестве первого действия. Это сводит к минимуму риск поломки и соответствует модели неизменности Docker. Если вы окажетесь в ситуации, когда необходимо отредактировать существующий контейнер, вы можете вручную изменить внутренние файлы конфигурации Docker, как описано выше.

Наконец, помните, что контейнеры, управляемые другими инструментами экосистемы, такими как Docker Compose, должны модифицироваться с использованием этих механизмов. В противном случае вы можете обнаружить, что контейнеры неожиданно потеряны или перезаписаны, если инструмент не знает о внесенных вами изменениях.

Программы для Windows, мобильные приложения, игры - ВСЁ БЕСПЛАТНО, в нашем закрытом телеграмм канале - Подписывайтесь:)

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован.