Какие основные файлы конфигурации используются в Docker и Docker Compose

Ответ

В экосистеме Docker используются два основных конфигурационных файла для разных целей: Dockerfile для сборки образов и docker-compose.yml для управления многоконтейнерными приложениями.

1. Dockerfile

Это текстовый файл, содержащий набор инструкций для автоматической сборки образа Docker. Он описывает среду внутри одного контейнера: базовую ОС, зависимости, исходный код, переменные окружения и команду для запуска.

Ключевая команда: docker build

Пример Dockerfile для Python-приложения:

# 1. Устанавливаем базовый образ
FROM python:3.9-slim

# 2. Задаем рабочую директорию внутри контейнера
WORKDIR /app

# 3. Копируем файл зависимостей и устанавливаем их
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# 4. Копируем остальной исходный код
COPY . .

# 5. Команда, которая будет выполняться при запуске контейнера
CMD ["python", "./main.py"]

2. docker-compose.yml

Это YAML-файл для определения и запуска многоконтейнерных приложений. Он описывает сервисы (контейнеры), сети для их взаимодействия, тома для хранения данных и другие параметры их совместной работы.

Ключевая команда: docker-compose up

Пример docker-compose.yml для веб-приложения и базы данных:

# Версия синтаксиса
version: '3.8'

# Определение сервисов (контейнеров)
services:
  # Сервис веб-приложения
  web:
    # Собрать образ из Dockerfile в текущей директории
    build: .
    # Пробросить порт 8000 хоста на порт 80 контейнера
    ports:
      - "8000:80"

  # Сервис базы данных
  db:
    # Использовать готовый образ PostgreSQL
    image: postgres:13
    # Переменные окружения для настройки базы данных
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password

Сводка

Критерий Dockerfile docker-compose.yml
Назначение Сборка одного образа Управление несколькими контейнерами (сервисами)
Синтаксис Набор инструкций YAML
Команда docker build docker-compose up

Ответ 18+ 🔞

А, слушай, вот эта вся хуйня с Docker, она же, блядь, как два сапога — пара, но разные ноги! Один файл для того, чтобы собрать одну банду, а второй — чтобы всю эту ораву в поле вывести и заставить работать вместе. Сейчас разжую, как есть.

Вот смотри, есть у тебя Dockerfile. Это как, блядь, инструкция по сборке одного конкретного десантника. Ты в нём пишешь, из какого говна и палок его слепить: какую ОС взять, какие пакеты впихнуть, куда код скопировать и какую команду он должен орать, когда его разбудят.

Ключевая команда тут — docker build. Собрал образ — и сидит у тебя в загашнике одинокий воин, готовый к бою.

Вот, смотри, пример для какого-нибудь питонячего скрипта:

# 1. Берём голого питона на диете
FROM python:3.9-slim

# 2. Говорим: "Вот твоя хата, работай тут"
WORKDIR /app

# 3. Тащим список нужных библиотек и ставим их
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# 4. Закидываем весь наш гениальный код
COPY . .

# 5. И вот он, священный приказ: "Запускайся, сука!"
CMD ["python", "./main.py"]

А теперь, внимание, docker-compose.yml — это уже, ёпта, не инструкция, а целый боевой план! Это когда тебе надо поднять не одного десантника, а целый взвод, чтобы они друг с другом общались, порты делили и в одном окопе сидели. Веб-сервер, база данных, кэш — вся эта весёлая компания.

Команда-матрёшка тут — docker-compose up. Один раз крикнул — и вся твоя микро-армия встаёт как один, блядь.

Вот как это выглядит в жизни:

# Версия, чтобы композ не охуел от твоего синтаксиса
version: '3.8'

services:
  # Сервис первый — наше веб-приложение
  web:
    # "Собери-ка его по вот этому Dockerfile рядом"
    build: .
    # "Слушай порт 8000 на компе, а внутри у себя — 80-й"
    ports:
      - "8000:80"

  # Сервис второй — база данных
  db:
    # "Не будем париться, возьми готового постгреса"
    image: postgres:13
    # Настройки, чтобы не светить паролями на всю деревню
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password

Короче, резюмирую, чтобы в голове не еблось:

Признак Dockerfile docker-compose.yml
Зачем нужен? Слепить один образ (контейнер) Запустить и связать несколько контейнеров сразу
На что похож? Рецепт одного блюда Меню целого ужина со всеми закусками
Язык Свои команды, типа FROM, RUN YAML, всё ровно и с отступами
Магическое слово docker build docker-compose up

Вот и вся философия. Хочешь одного солдата — пили Dockerfile. Хочешь устроить маневры с артиллерией и кавалерией — садись за docker-compose.yml. И да пребудет с тобой сила, и не ебёт тебя конфликт портов!