# Dockerfile и docker compose

**Dockerfile** и **Docker Compose** — это два разных, но взаимосвязанных инструмента Docker, используемых для создания и управления контейнерами.

***

#### **1. Dockerfile**

* **Назначение:** описывает **как собрать образ контейнера**.
* **Что содержит:** инструкции по установке зависимостей, копированию кода, настройке среды и запуску приложения.
* **Пример:**

```dockerfile
FROM python:3.11
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "app.py"]
```

* Результат: образ `myapp:latest`, который можно запускать контейнером через `docker run`.

***

#### **2. Docker Compose**

* **Назначение:** описывает **как запускать несколько контейнеров и их связи** в виде сервиса.
* **Что содержит:**
  * Сервисы (контейнеры) и их образы или инструкции сборки,
  * проброс портов, маунты директорий, переменные окружения, зависимости между сервисами.
* **Пример:**

```yaml
version: "3.9"

services:
  app:
    build: .
    ports:
      - "8000:8000"
    volumes:
      - ./app:/app
    depends_on:
      - db

  db:
    image: postgres:15
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
      POSTGRES_DB: mydatabase
    ports:
      - "5432:5432"
```

* Результат: запуск нескольких контейнеров командой `docker-compose up --build`.

***

#### **Ключевое различие**

| Свойство        | Dockerfile                    | Docker Compose                          |
| --------------- | ----------------------------- | --------------------------------------- |
| Цель            | Создание образа               | Запуск и управление контейнерами        |
| Содержит        | Инструкции сборки образа      | Конфигурацию сервисов и связей          |
| Результат       | Образ контейнера              | Запущенные контейнеры и сеть между ними |
| Команда запуска | `docker build` → `docker run` | `docker-compose up`                     |

***

Итог: **Dockerfile создаёт образ**, а **Docker Compose управляет запуском одного или нескольких контейнеров, их сетями и томами**.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://kaze.gitbook.io/qa-theory/ci/dockerfile-i-docker-compose.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
