Ответ
Команда 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
Эта команда:
- Создаст контейнер с именем
my-postgres. - Запустит его в фоновом режиме (
-d). - Установит пароль для суперпользователя через переменную окружения (
-e). - Сделает базу данных доступной на порту
5432хоста (-p). - Будет хранить все данные в локальной директории
/my/local/data(-v). - Настроит автоматический перезапуск, если он не был остановлен вручную (
--restart). - Использует официальный образ
postgresверсии14.
Ответ 18+ 🔞
А, ну вот, смотри, сейчас я тебе про эту вашу docker run разложу всё по полочкам, а то вы как будто в первый раз слышите, блядь. Это ж не ракетостроение, ёпта!
Так вот, команда docker run — это как взять чертеж (образ) и собрать из него работающую машинку (контейнер). А чтобы эта машинка не была голой и тупой, ей флаги всякие подсовываешь. Самые нужные, без которых ты как без рук:
--name <имя>: Это чтобы не орать "эй, ты, контейнер с IDa1b2c3d4!". Даёшь ему нормальное имя, типа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
И что мы тут наворотили, а? Расшифровываю для особо одарённых:
- Родили контейнер с именем
my-postgres. Теперь не забудем, кто он такой. - Отправили его в фон (
-d), чтобы не мозолил глаза. - Шепнули ему на ушко пароль (
-e), а то он без него даже не чихнёт. - Пробросили его внутреннюю дырку (порт 5432) наружу, на наш такой же порт, чтобы можно было подключиться.
- Прицепили локальную папку
/my/local/dataпрямо к его святая святых — месту, где данные лежат. Теперь хоть сто раз контейнер удаляй — данные целы. - Сказали: "Слушай, дружок, если ты сам не сдохнешь (
unless-stopped), а просто упадёшь — немедленно вставай и работай дальше!". - И всё это великолепие собрали из образа
postgres:14. Иди, живи, сука, и радуй нас.
Вот и вся магия, блядь. Ничего сложного, главное — не бояться и пробовать, а то сидят, боятся, как будто это ядрёна вошь какая-то, а не просто удобный инструмент.