Остановите использование команд docker run — используйте Docker Compose вместо этого

Опубликовано

Большинство команд docker run превращаются в неприемлемый набор флагов. В этом руководстве показано, как преобразовать команду docker run в docker compose — с таблицей флагов, примером реального преобразования и бесплатным инструментом для преобразования.

Прекратите писать команды docker run — используйте Docker Compose вместо этого 1
Реклама · УДАЛИТЬ?

Каждый workflow Docker начинается тем же способом: docker runОдин флаг, два флага — управляемо. Но к тому времени, когда вы запускаете контейнер с портами, переменными среды, томами, политикой перезапуска и кастомной сетью, команда достигает 400 символов, что никто не может запомнить, не может использовать систему контроля версий и не может передать коллеге без Slack-сообщения, полного стыда.

Docker Compose — это решение. Один файл YAML заменяет всю команду — и вы коммитите его в git.

Почему docker run не масштабируется

Вот типичный docker run команды для приложения на Node.js:

docker run -d \
  --name my-app \
  -p 3000:3000 \
  -e NODE_ENV=production \
  -e DATABASE_URL=postgres://user:pass@db:5432/mydb \
  -v ./data:/app/data \
  --network app-network \
  --restart always \
  my-app:latest

Это работает. Только один раз. Затем вы закрываете терминал, открываете новый через три недели и не знаете, какие флаги вы использовали. Нет ничего git diff. Нет ничего, чтобы поделиться с новым сотрудником. Нет способа проверить, что стейджинг совпадает с продакшном.

Что даёт Docker Compose

Docker Compose берёт всё, что было помещено в эту docker run команду, и помещает в YAML-файл, называемый docker-compose.yml. Этот файл:

  • Расположен в вашем репозитории рядом с кодом
  • Запускается с одним docker compose up -d
  • Запускается одинаково на каждой машине и в каждом окружении
  • Масштабируется до многомодульных конфигураций (приложение + база данных + кэш) без сложных флагов

Как преобразовать команду docker run

Та же команда, приведённая выше, становится такой docker-compose.yml:

version: "3.9"
services:
  my-app:
    image: my-app:latest
    container_name: my-app
    ports:
      - "3000:3000"
    environment:
      NODE_ENV: production
      DATABASE_URL: postgres://user:pass@db:5432/mydb
    volumes:
      - ./data:/app/data
    networks:
      - app-network
    restart: always

networks:
  app-network:

То же поведение. Но теперь она читаема, коммитируется и воспроизводима.

Запустить:

docker compose up -d

Остановить:

docker compose down

Флаги docker run в ключи docker-compose.yml

Справочник по флагам, которые вы чаще всего используете:

флаг docker runключ в docker-compose.ymlПример
-p 8080:80ports:- "8080:80"
-e FOO=barenvironment:FOO: bar
-v ./data:/datavolumes:- ./data:/data
--network mynetnetworks:mynet
--restart alwaysrestart:always
--name mycontainercontainer_name:mycontainer
--memory 512mmem_limit:512m
--cpus 1.5deploy.resources.limits.cpuscpus: "1.5"
-dИспользуйте -d флаг на этапе запускаdocker compose up -d

Автоматическое преобразование

Если у вас есть длинная существующая docker run команда — особенно если она наследуется из README или из скрипта CI, который никто не менял уже два года — вам не нужно вручную преобразовывать каждый флаг. Используйте Конвертер команды docker run в docker-compose: вставьте команду, получите корректный docker-compose.yml результат.

Он обрабатывает порты, переменные среды, тома, сети, политики перезапуска и другие. Полезен для миграции устаревших одноразовых команд без введения опечаток при переводе.

Если вы настраиваете лимиты ресурсов в вашем файле Compose, то Калькулятор ресурсов контейнера Docker помогает выбрать разумные значения памяти и CPU на основе вашего рабочего процесса — до того, как вы коммитите цифры, которые вы просто случайно взяли из воздуха.

Проверьте Dockerfile, пока работаете

Как только ваш файл Compose будет организован, проверьте Dockerfile, из которого он собирается. Неподдерживаемые базовые образы, отсутствующие WORKDIR, избыточные RUN уровни — эти ошибки легко упустить и трудно отладить позже. Инструмент проверки Dockerfile обнаруживает их до того, как они станут проблемами в продакшене.

Хотите убрать рекламу? Откажитесь от рекламы сегодня

Установите наши расширения

Добавьте инструменты ввода-вывода в свой любимый браузер для мгновенного доступа и более быстрого поиска

в Расширение Chrome в Расширение края в Расширение Firefox в Расширение Opera

Табло результатов прибыло!

Табло результатов — это интересный способ следить за вашими играми, все данные хранятся в вашем браузере. Скоро появятся новые функции!

Реклама · УДАЛИТЬ?
Реклама · УДАЛИТЬ?
Реклама · УДАЛИТЬ?

новости с техническими моментами

Примите участие

Помогите нам продолжать предоставлять ценные бесплатные инструменты

Купи мне кофе
Реклама · УДАЛИТЬ?