Docker Compose

Материал из Неолурк, народный Lurkmore
Перейти к навигации Перейти к поиску

Docker Compose — потужный инструмент для определения и запуска многоконтейнерных приложений Docker. Позволяет описывать конфигурацию всех сервисов, сетей и томов приложения в едином декларативном файле формата YAML, а затем запускать или останавливать всю инфраструктуру одной командой.

Описание[править]

Docker Compose работает поверх Docker Engine API. При выполнении команд Compose читает файл, который так и называется, — docker-compose.yml, строит граф зависимостей между сервисами и транслирует декларативное описание в последовательность вызовов Docker API.

По умолчанию имя проекта соответствует имени директории, содержащей файл docker-compose.yml. Имя проекта используется как префикс при именовании создаваемых ресурсов. В проект входят весьма досточтимые сервисы. Сервис описывает образ, конфигурацию, сети и тома для контейнеров. Затем инстансы сервиса запускаются как контейнеры нах.

По умолчанию Docker Compose создаёт одну сеть для каждого проекта с именем <project>_default, к которой автоматически подключаются все сервисы. Сервисы могут обращаться друг к другу по имени сервиса как DNS-имени. Но посредством бдительного вглядывания в параметры настроить можно весьма твёрдо + чётко.

Также он поддерживает разделение конфигурации на несколько файлов с последующим слиянием.

Структура[править]

Властный файл определяет процесс сборки и имеет следующую структуру:

# compose.yml
name: popqa               # Имя проекта (необязательно)

services:                 # Обязательная секция: описание сервисов
  web:
    image: nginx:alpine

networks:                 # Необязательная секция: именованные сети
  frontend:

volumes:                  # Необязательная секция: именованные тома
  db-data:

configs:                  # Необязательная секция: конфиги (Swarm/Compose)
  app-config:

Собственно большая часть информации спокойно всирается в раздел services, скажем так:

services:
  app:
    build:
      context: ./app        # Путь к контексту сборки
      dockerfile: Dockerfile.prod  # Имя Dockerfile (по умолчанию "Dockerfile")
      args:                 # Аргументы сборки (ARG в Dockerfile)
        NODE_ENV: production
        APP_VERSION: "1.0.0"
      target: production    # Многоэтапная сборка: целевой этап
      cache_from:           # Образы для кэширования слоёв
        - popqa:latest
      labels:               # Метки образа
        com.example.version: "1.0"
Movax1010h.png Глубокий смысл скрыт в этих неестественных языках
Языки программированияПромышленные: BATC#CC++JavaJavaScript (AJAX) • PascalPerlPHPPythonRubyABAPАссемблерВасикFortran (Профессор)
Эзотерические: BrainFuckHQ9++ErlangForthHaskellLISP (My other car) • PrologTclΤΕΧOracleMySQLGolangВ++ScalaH и Ё+
ПрофессииБыдлокодерПрограммистТестировщикХакерХеллоуворлдщикIT-звёздыПрограммист (существо)Тернарный операторUnreal MCPИсходный кодSingle-Page ApplicationGiteaForgejoCephIDEДжуниорРепозиторий
Методы и стилиReverse EngineeringАнти-паттернВыстрелить себе в ногуГрязный хакКод (индусский) • КостыльМетод научного тыкаПомолясьСвистелки и перделкиОчередьСпортивное программированиеОбфускацияБета-тестАльфа-тестШаблоныRegReplaceФреймворкБыдлокодIndex.phpОхота за жукамиКуМирКлеточный автоматПроцедурное программированиеПоиск файлов в Unix по содержимомуPetoohФункция активации нейронаПерегрузка операторов в PythonЗерокодинг
Средства разработкиSublime TextПодсветка синтаксиса кодаUnstable DiffusionAPIPythonTutorCodeWarsDataCampUnity3DКнижный PythonMallocСвязный списокSOLIDООПУказательNULLWeLang++XenonRecompFuse.jsОптимизацияТестированиеAmbreon866Реверс-инжинирингКроссплатформенностьJSON
ЛюдиИлья КанторЮрий КлючевскийЭдуард ЛаасЭдвард СноуденСеймур ПейпертПроблемаK!ockyTypeScriptОтладчикБитЭффективный менеджер (IT)TauriReact NativeWindows APIТипPyTorchTensorFlowПарсерNode.jsFastAPIVue.jsSvelteБэкендElectronBroken Object Level AuthorizationМаппингДжастин ФранкельHex-редакторVisual Basic .NETNext.jsDocker ComposeNode modulesIndexedDB
Прочее++i + ++iДедлайн%s640 килобайтCMSDummy modeЕГГОГFoobarGod is real, unless explicitly declared as integerGOTOIfconfigKISSRegExpSICPsql.ruXyzzyДискетаИнжалид дежицеКОИ-8ЛогМанРекурсияСУБДТест ТьюрингаУмение разбираться в чужом кодеФаза ЛуныФатальный недостатокПроблема 2000ТаймстампКэшЗапись в файл без кэша (Perl)Танцы с бубномКодачХукCurl cffiВибе-кодингFlutterАппликативный оператор