Какие основные флаги используются при запуске контейнера с помощью docker run?

Ответ

Команда docker run создает и запускает новый контейнер из образа. Для его конфигурации используются флаги. Наиболее важные из них:

  • --name <имя>: Присваивает контейнеру понятное имя для удобства управления.
  • -d или --detach: Запускает контейнер в фоновом (detached) режиме. Терминал освобождается, а контейнер продолжает работать.
  • -p <порт_хоста>:<порт_контейнера>: Пробрасывает порт с хост-машины на порт внутри контейнера. Например, -p 8080:80 сделает приложение, работающее на 80 порту контейнера, доступным по адресу localhost:8080.
  • -v <путь_на_хосте>:<путь_в_контейнере>: Монтирует директорию (volume) с хоста внутрь контейнера. Это позволяет сохранять данные даже после удаления контейнера или делиться файлами между хостом и контейнером.
  • -e <КЛЮЧ>=<ЗНАЧЕНИЕ>: Устанавливает переменную окружения внутри контейнера. Часто используется для передачи настроек, паролей или ключей API.
  • --rm: Автоматически удаляет контейнер после его остановки. Удобно для временных задач и скриптов.
  • --network <сеть>: Подключает контейнер к указанной Docker-сети, позволяя ему взаимодействовать с другими контейнерами в той же сети по именам.
  • --restart <политика>: Устанавливает политику перезапуска контейнера в случае его остановки или сбоя. Основные значения: no (по умолчанию), on-failure, unless-stopped, always.

Пример комплексной команды:

# Запускаем контейнер с базой данных PostgreSQL
docker run --name my-postgres -d 
  -e POSTGRES_PASSWORD=supersecret 
  -p 5432:5432 
  -v /my/local/data:/var/lib/postgresql/data 
  --restart unless-stopped 
  postgres:14

Эта команда:

  1. Создаст контейнер с именем my-postgres.
  2. Запустит его в фоновом режиме (-d).
  3. Установит пароль для суперпользователя через переменную окружения (-e).
  4. Сделает базу данных доступной на порту 5432 хоста (-p).
  5. Будет хранить все данные в локальной директории /my/local/data (-v).
  6. Настроит автоматический перезапуск, если он не был остановлен вручную (--restart).
  7. Использует официальный образ postgres версии 14.

Ответ 18+ 🔞

А, ну вот, смотри, сейчас я тебе про эту вашу docker run разложу всё по полочкам, а то вы как будто в первый раз слышите, блядь. Это ж не ракетостроение, ёпта!

Так вот, команда docker run — это как взять чертеж (образ) и собрать из него работающую машинку (контейнер). А чтобы эта машинка не была голой и тупой, ей флаги всякие подсовываешь. Самые нужные, без которых ты как без рук:

  • --name <имя>: Это чтобы не орать "эй, ты, контейнер с ID a1b2c3d4!". Даёшь ему нормальное имя, типа my-super-app, и спишь спокойно.
  • -d или --detach: Включил и забыл. Контейнер убежал в фон работать, а тебе терминал обратно отдали. Красота, блядь.
  • -p <порт_хоста>:<порт_контейнера>: Самое важное, если не хочешь потом искать, куда твоё приложение подевалось. Хочешь зайти с браузера? Пробрасывай порт! Сделал -p 8080:80 — и всё, что в контейнере на порту 80, теперь торчит на твоём компе по localhost:8080. Волшебство, ёпта!
  • -v <путь_на_хосте>:<путь_в_контейнере>: Это чтобы не потерять всё, над чем ты три дня пахал, когда контейнер накроется. Привязываешь папку с компа внутрь контейнера — и данные теперь живут на твоей машине, а не в этой виртуальной песочнице. Жизнь продлевает, в рот меня чих-пых.
  • -e <КЛЮЧ>=<ЗНАЧЕНИЕ>: Секретики туда передавать. Пароли от базы, ключи API, настройки. Контейнер как попугай — скажешь что, то и повторяет внутри себя.
  • --rm: Для одноразовых поделок. Запустил, посмотрел, контейнер сам удалился. Порядок, блядь, а не бардак.
  • --network <сеть>: Чтобы твои контейнеры друг друга в сети видели и могли общаться по именам, а не тыкаясь IP-адресами, как слепые котята.
  • --restart <политика>: Настройка "автоподъёма". Упал контейнер — сам встал. Особенно для всяких сервисов, которые должны работать вечно, пока сервер не сгорит. always — это прям диагноз, но иногда нужный.

Ну и смотри, как это всё в одной команде срастается, прямо как в хорошем анекдоте:

# Запускаем контейнер с базой данных PostgreSQL
docker run --name my-postgres -d 
  -e POSTGRES_PASSWORD=supersecret 
  -p 5432:5432 
  -v /my/local/data:/var/lib/postgresql/data 
  --restart unless-stopped 
  postgres:14

И что мы тут наворотили, а? Расшифровываю для особо одарённых:

  1. Родили контейнер с именем my-postgres. Теперь не забудем, кто он такой.
  2. Отправили его в фон (-d), чтобы не мозолил глаза.
  3. Шепнули ему на ушко пароль (-e), а то он без него даже не чихнёт.
  4. Пробросили его внутреннюю дырку (порт 5432) наружу, на наш такой же порт, чтобы можно было подключиться.
  5. Прицепили локальную папку /my/local/data прямо к его святая святых — месту, где данные лежат. Теперь хоть сто раз контейнер удаляй — данные целы.
  6. Сказали: "Слушай, дружок, если ты сам не сдохнешь (unless-stopped), а просто упадёшь — немедленно вставай и работай дальше!".
  7. И всё это великолепие собрали из образа postgres:14. Иди, живи, сука, и радуй нас.

Вот и вся магия, блядь. Ничего сложного, главное — не бояться и пробовать, а то сидят, боятся, как будто это ядрёна вошь какая-то, а не просто удобный инструмент.