Naming Docker Containers: 3 совета для начинающих

Вступление

При создании контейнера Docker ему присваивается универсальный уникальный идентификатор (UUID). Это очень важно, чтобы избежать конфликтов имен и способствовать автоматизации без вмешательства человека. Они эффективно идентифицируют контейнеры для хоста и сети. Тем не менее, людям требуется больше усилий, чтобы различать, будь то 64-символьный длинный дисплей с удобочитаемостью или более часто отображаемая 12-символьная короткая форма, которая может выглядеть примерно как285c9f0f9d3d.

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

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

1 - Назовите контейнер при запуске

Добавляя--name=meaningful_name к командеdocker run,evil_ptolomy становится более узнаваемым в интерактивных сеансах, а также в выводе таких команд, какdocker ps. Однако есть ограничения. Поскольку имена контейнеров должны быть уникальными, вы не можете использовать преднамеренное именование и масштабировать сервис за пределы одного контейнера.

В командной строке или в файле Docker:
docker run --name=meaningful_name

Например, если мы запустили контейнер на основе базового образаnginx и запустили его так:

docker run --name nginx -d nginx

Имя появится в списке запущенных контейнеров:

docker ps
OutputCONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
08f333ef7216        nginx               "nginx -g 'daemon off"   15 seconds ago      Up 14 seconds       80/tcp, 443/tcp      nginx

Хотя имя появляется в выводеdocker ps и может использоваться для управления контейнером, оно не будет отображаться в командной строке контейнера, если вы подключитесь к нему или в файлах журнала. Для этого вам также необходимо назначить имя хоста.

2 - Назначить имя хоста для контейнера

Значение, передаваемое команде--hostname, устанавливается внутри/etc/hostname и/etc/hosts внутри контейнера. Следовательно, он появляется в командной строке. Он играет важную роль в настройкеcontainer DNS и может быть полезен на этапах обучения настройке нескольких контейнеров. Нелегко получить доступ извне контейнера, но он появится в файлах журнала контейнера, и когда эти файлы записываются на том, независимый от хоста, это может упростить идентификацию контейнера.

CLI and Dockerfile:
docker run --hostname=value ИЛИdocker run -h value

Хотя--name и--hostname полезны для идентификации контейнеров, иногда речь идет вовсе не о названии контейнера. Скорее, речь идет о том, чтобы контейнер убирался за собой без необходимости делать это самостоятельно.

3 - Автоматически удалять контейнеры при выходе

При отладке полезно, чтобы остановленный контейнер сохранялся после его выхода. Вы можете сохранить данные, такие как файлы журнала, и исследовать конечное состояние контейнера. Однако иногда, когда вы запускаете контейнер, вы знаете, что не захотите его использовать, когда закончите. В этом случае вы можете использовать флаг--rm, чтобы автоматически удалить его при выходе. Это может облегчить поддержание чистоты.

Будьте осторожны, хотя! Если вы используете тома Docker,--rm удалит всеvolumes NOT specified by name.

CLI и Dockerfile:
docker run --rm

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

Заключение

Каждый из этих трех флагов дляdocker run,--name,--hostname и--rm может по-своему упростить понимание того, что к чему при изучении Docker. Вы можете узнать больше о контейнерах и работе с командойdocker run в руководствеWorking with Docker Containers.