en
Feedback
Python | Вопросы собесов

Python | Вопросы собесов

Open in Telegram

📈 Analytical overview of Telegram channel Python | Вопросы собесов

Channel Python | Вопросы собесов (@python_easy_ru) in the Russian language segment is an active participant. Currently, the community unites 13 109 subscribers, ranking 9 732 in the Technologies & Applications category and 50 668 in the Russia region.

📊 Audience metrics and dynamics

Since its creation on невідомо, the project has demonstrated rapid growth, gathering an audience of 13 109 subscribers.

According to the latest data from 05 June, 2026, the channel demonstrates stable activity. Although there has been a change in the number of participants by -48 over the last 30 days and by -5 over the last 24 hours, overall reach remains high.

  • Verification status: Not verified
  • Engagement rate (ER): The average audience engagement rate is 6.21%. Within the first 24 hours after publication, content typically collects 6.02% reactions from the total number of subscribers.
  • Post reach: On average, each post receives 814 views. Within the first day, a publication typically gains 789 views.
  • Reactions and interaction: The audience actively supports content: the average number of reactions per post is 4.
  • Thematic interests: Content is focused on key topics such as ставь, модуль, строка, docker, alice.

📝 Description and content policy

The author describes the resource as a platform for expressing subjective opinions:
Cайт: easyoffer.ru Реклама: @easyoffer_adv ВП: @easyoffer_vp Тесты t.me/+20tRfhrwPpM4NDQy Задачи t.me/+nsl4meWmhfQwNDVi Вакансии t.me/+cXGKkrOY2-w3ZTky

Thanks to the high frequency of updates (latest data received on 07 June, 2026), the channel maintains relevance and a high level of publication reach. Analytics show that the audience actively interacts with content, making it an important point of influence in the Technologies & Applications category.

13 109
Subscribers
-524 hours
-147 days
-4830 days
Posts Archive
🤔 Какие есть виды файловых объектов? В Python существует несколько типов файловых объектов, которые используются для работы с различными типами данных. Рассмотрим основные виды файловых объектов и их особенности. 🟠Текстовые файлы (`TextIOWrapper`) Это самый распространённый тип файловых объектов. Такие файлы используются для работы с текстовыми данными и поддерживают строковые операции.
   with open("example.txt", "w", encoding="utf-8") as file:
       file.write("Привет, мир!")  # Записываем текст в файл

   with open("example.txt", "r", encoding="utf-8") as file:
       content = file.read()  # Читаем текст из файла
       print(content)
🟠Бинарные файлы (`BufferedReader`, `BufferedWriter`) Эти файлы используются для работы с двоичными данными (изображениями, видео, аудиофайлами и т. д.).
   with open("image.jpg", "rb") as file:
       binary_data = file.read()  # Читаем файл в бинарном режиме
       print(binary_data[:10])  # Выведем первые 10 байтов

   with open("copy.jpg", "wb") as file:
       file.write(binary_data)  # Записываем данные в новый файл
🟠Файлы ввода-вывода в памяти (`io.StringIO`, `io.BytesIO`) Эти объекты представляют собой файловые буферы, которые хранят данные в оперативной памяти, а не на диске.
   from io import StringIO

   file = StringIO()
   file.write("Привет, мир!")  # Запись данных в буфер
   file.seek(0)  # Перемещаем указатель в начало
   print(file.read())  # Читаем данные из буфера
Пример работы с BytesIO:
   from io import BytesIO

   file = BytesIO()
   file.write(b"Binary data")  # Запись бинарных данных
   file.seek(0)
   print(file.read())  # Чтение данных
🟠Файловые объекты на основе сокетов, пайпов и других источников Python позволяет работать с файловыми объектами, полученными из нестандартных источников, например, сокетов или каналов связи (pipes).
   import socket

   s = socket.socket()
   s.connect(("example.com", 80))
   s.sendall(b"GET / HTTP/1.1\r\nHost: example.com\r\n\r\n")
   response = s.makefile("r", encoding="utf-8")  # Создание файлового объекта
   print(response.readline())  # Читаем первую строку HTTP-ответа
   s.close()
Ставь 👍 и забирай 📚 Базу знаний

🤔 В чём разница между decimal и float? - float — тип с плавающей точкой, быстрый, но подвержен ошибкам округления из-за бинарного представления. Например: 0.1 + 0.2 != 0.3. - decimal.Decimal — тип из модуля decimal, который сохраняет точность десятичных дробей и идеально подходит для финансовых и бухгалтерских расчётов. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Можно ли при вызове метода save указать какие поля изменять? Да, в Django ORM можно указать конкретные поля для сохранения, используя параметр update_fields в методе .save(). 🚩Как использовать `update_fields` Пример модели
from django.db import models

class UserProfile(models.Model):
    name = models.CharField(max_length=100)
    email = models.EmailField()
    age = models.IntegerField()
Обновляем только поле name, не трогая email и age
user = UserProfile.objects.get(id=1)
user.name = "Новый пользователь"
user.save(update_fields=["name"])  # Обновит только поле `name`
🚩Что делает `update_fields`? Генерирует SQL-запрос только для указанных полей, например:
  UPDATE user_profile SET name = 'Новый пользователь' WHERE id = 1;
  
🚩Когда `update_fields` полезен? Уменьшает нагрузку на БД, так как обновляет только нужные поля. Полезен, если нужно изменить одно поле, а не всю запись. Избегает ненужных изменений в auto_now и auto_now_add полях (DateTimeField). 🚩Ограничения `update_fields` Нельзя использовать при создании объекта (save() с update_fields не работает для .create()).
user = UserProfile(name="Alice", email="alice@example.com")
user.save(update_fields=["name"])  # ❌ Ошибка, объект ещё не в базе!
Не обновляет auto_now-поля (DateTimeField) автоматически!
updated_at = models.DateTimeField(auto_now=True)  # Не обновится с `update_fields`
Решение: обновить вручную:
user.updated_at = timezone.now()
user.save(update_fields=["name", "updated_at"])
Ставь 👍 и забирай 📚 Базу знаний

🤔 Как работает пакетирование библиотек? Пакетирование — это процесс подготовки библиотеки к установке и распространению через PyPI. Основные этапы: - Создание структуры пакета: папки с модулями и __init__.py. - Создание pyproject.toml или setup.py с описанием пакета. - Сборка пакета с помощью build: pip install build python -m build - В результате получается .whl и .tar.gz архив, который можно установить или загрузить на PyPI. Пакетирование облегчает повторное использование и установку библиотек в разных проектах. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Как работает функция filter()? filter() — это встроенная функция Python, которая отбирает элементы из последовательности по заданному условию.
filter(function, iterable)
🚩Как работает `filter()`? Пример 1: Фильтрация чётных чисел
numbers = [1, 2, 3, 4, 5, 6]

# Оставляем только чётные числа
even_numbers = filter(lambda x: x % 2 == 0, numbers)

print(list(even_numbers))  # [2, 4, 6]
Пример 2: Фильтрация строк по длине
words = ["apple", "kiwi", "banana", "cherry"]

# Оставляем только слова длиной больше 5 символов
long_words = filter(lambda word: len(word) > 5, words)

print(list(long_words))  # ['banana', 'cherry']
Пример 3: Фильтрация None и пустых значений
values = [None, 0, "", "hello", 42, [], {}]

# Оставляем только "истинные" значения
filtered_values = filter(None, values)

print(list(filtered_values))  # ['hello', 42]
Пример 4: Использование filter() с def
def is_positive(n):
    return n > 0

numbers = [-5, -2, 0, 3, 7, -1]
positive_numbers = filter(is_positive, numbers)

print(list(positive_numbers))  # [3, 7]
🚩Чем `filter()` лучше `for` + `if`? Более короткий и читаемый код
# С `filter()`
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))

# С `for` + `if`
even_numbers = [x for x in numbers if x % 2 == 0]
Ставь 👍 и забирай 📚 Базу знаний

🤔 Какие знаешь принципы ООП? Основные принципы ООП включают инкапсуляцию, наследование, полиморфизм и абстракцию. Инкапсуляция скрывает внутренние детали реализации и защищает данные, предоставляя доступ через методы. Наследование позволяет создавать новые классы на основе существующих, а полиморфизм позволяет использовать один и тот же интерфейс для объектов разных классов. Абстракция упрощает сложные системы, скрывая ненужные детали и выделяя ключевые характеристики. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Зачем нужны схемы в БД? Схема (schema) в базе данных — это логическая группировка объектов (таблиц, индексов, представлений и т. д.) внутри одной БД. 🚩Что такое схема в БД? Схема — это контейнер для объектов БД (таблиц, индексов, процедур).
База данных (company_db)
 ├── Схема: public (по умолчанию)
 │   ├── Таблица: employees
 │   ├── Таблица: departments
 ├── Схема: hr
 │   ├── Таблица: employees
 │   ├── Таблица: salaries
 ├── Схема: sales
 │   ├── Таблица: customers
 │   ├── Таблица: orders
🚩Как создавать и использовать схемы? Создание схемы (CREATE SCHEMA)
CREATE SCHEMA hr;  -- Создаём схему "hr"
Создание таблицы внутри схемы
CREATE TABLE hr.employees (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100),
    position VARCHAR(50)
);
Выбор схемы по умолчанию
SET search_path TO hr;
🚩Где полезны схемы? 🟠Разделение данных по модулям Если в БД хранятся разные области бизнеса (кадры, продажи, финансы), их можно разделить по схемам: - hr.employees, hr.salaries - sales.orders, sales.customers 🟠Разные версии одной БД Например, в PostgreSQL можно создать схему dev для тестов: - dev.users — тестовая версия таблицы - prod.users — продакшен-версия 🟠Безопасность и доступ пользователей Можно дать доступ к разным схемам разным пользователям:
GRANT USAGE ON SCHEMA hr TO hr_manager;
GRANT SELECT ON ALL TABLES IN SCHEMA hr TO hr_manager;
Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое Docker Compose? Это инструмент для управления многоконтейнерными приложениями. 1. Позволяет определять и запускать сервисы, их зависимости и конфигурации в одном YAML-файле (docker-compose.yml). 2. Упрощает оркестрацию контейнеров, обеспечивая лёгкий запуск, остановку и масштабирование. 3. Используется для разработки, тестирования и развёртывания сложных приложений. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что такое dict comprehensions? dict comprehension (генератор словаря) — это способ быстро создать словарь с помощью компактного синтаксиса, похожего на list comprehension. 🚩Простейший пример `dict comprehension`
squares = {x: x**2 for x in range(1, 6)}
print(squares)
Вывод
{1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
🚩`dict comprehension` с условием (`if`) Оставляем только чётные числа:
squares = {x: x**2 for x in range(1, 11) if x % 2 == 0}
print(squares)
Вывод
{2: 4, 4: 16, 6: 36, 8: 64, 10: 100}
🚩Преобразование списка в словарь Создаём словарь из списка пар (name → длина слова)
names = ["Alice", "Bob", "Charlie"]
name_lengths = {name: len(name) for name in names}
print(name_lengths)
Вывод
{'Alice': 5, 'Bob': 3, 'Charlie': 7}
🚩Обратный словарь (ключи и значения меняются местами) Инвертируем словарь {ключ: значение} → {значение: ключ}
original = {"a": 1, "b": 2, "c": 3}
inverted = {v: k for k, v in original.items()}
print(inverted)
Вывод
{1: 'a', 2: 'b', 3: 'c'}
🚩Генерация словаря из `zip()` Объединяем два списка в словарь
keys = ["name", "age", "city"]
values = ["Alice", 25, "New York"]

person = {k: v for k, v in zip(keys, values)}
print(person)
Вывод
{'name': 'Alice', 'age': 25, 'city': 'New York'}
🚩`dict comprehension` с `if-else` Разделяем числа на чётные и нечётные
numbers = range(1, 6)
parity = {x: "чётное" if x % 2 == 0 else "нечётное" for x in numbers}
print(parity)
Вывод
{1: 'нечётное', 2: 'чётное', 3: 'нечётное', 4: 'чётное', 5: 'нечётное'}
Ставь 👍 и забирай 📚 Базу знаний

🤔 Как понять хешируемый ли объект? Объект хешируем, если он реализует метод hash и его хеш не меняется в течение жизни объекта. Также он должен быть сравним (eq), иначе может нарушиться логика хеш-таблиц. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что такое класс baseview? BaseView — это базовый класс представления (view) в Django, который предоставляет основу для создания представлений без жёсткой привязки к HTTP-методам (GET, POST и др.). Он является родительским классом для всех классов-представлений (CBV, Class-Based Views) в Django. 🚩Зачем нужен `BaseView`? Обеспечивает общую структуру для классов-представлений. Разделяет логику обработки запроса и рендеринг. Позволяет переопределять логику обработки запросов через dispatch(). Является родительским классом для View, TemplateView, ListView и других CBV. 🚩Как работает `BaseView`? Этот класс сам по себе не обрабатывает запросы. Он лишь задаёт каркас для представлений.
from django.views import View

class BaseView:
    def dispatch(self, request, *args, **kwargs):
        """Определяет, какой метод (GET, POST и т. д.) вызывать"""
        handler = getattr(self, request.method.lower(), self.http_method_not_allowed)
        return handler(request, *args, **kwargs)

    def http_method_not_allowed(self, request, *args, **kwargs):
        """Обработчик для неподдерживаемых HTTP-методов"""
        return HttpResponseNotAllowed(self._allowed_methods())
🚩Использование `BaseView` Обычно мы используем View, который наследуется от BaseView.
from django.http import HttpResponse
from django.views import View

class MyView(View):
    def get(self, request):
        return HttpResponse("Это GET-запрос")

    def post(self, request):
        return HttpResponse("Это POST-запрос")
Ставь 👍 и забирай 📚 Базу знаний

🤔 Какие есть особенности работы с репликацией? - Возможна задержка синхронизации (особенно при async-репликации); - Конфликты данных при multi-master; - Реплика может быть только для чтения; - Реплики могут использоваться для балансировки нагрузки на чтение. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🔍Тестовое собеседование на Middle Python с разработчиком из Авито завтра вечером Уже завтра вечером в 19:00 по мск приходи о
🔍Тестовое собеседование на Middle Python с разработчиком из Авито завтра вечером Уже завтра вечером в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Python-разработчика. Как это будет: 📂 Даня, старший разработчик в Авито, будет задавать реальные вопросы и задачи разработчику-добровольцу 📂 Даня будет комментировать каждый ответ респондента, чтобы дать понять чего от вас ожидает собеседующий на интервью 📂 В конце можно будет задать любой вопрос Дане Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Python-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы. Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_py_bot Реклама. О рекламодателе.

🤔 Что такое паттерн Мост (Bridge)? Паттерн "Мост" (Bridge) является структурным паттерном проектирования, который предназначен для разделения абстракции и реализации так, чтобы они могли изменяться независимо друг от друга. Этот паттерн полезен, когда класс должен работать с различными платформами или когда нужно избежать жесткой связки между абстракцией и ее реализацией. 🚩 Зачем нужен 🟠Разделение абстракции и реализации: Он позволяет отделить абстракцию от ее реализации, что упрощает поддержку и расширение системы. 🟠Уменьшение количества подклассов: Без применения этого паттерна, если у нас есть несколько вариантов абстракции и несколько вариантов реализации, то нам пришлось бы создавать классы для всех возможных комбинаций, что приводит к взрывному росту количества классов. 🟠Гибкость: Это позволяет изменять и абстракцию, и реализацию независимо друг от друга. 🚩Как используется 🟠Абстракция (Abstraction): Определяет интерфейс и хранит ссылку на объект Implementor. 🟠Расширенная абстракция (RefinedAbstraction): Наследует Abstraction и расширяет интерфейс. 🟠Реализатор (Implementor): Определяет интерфейс для всех реализаций. 🟠Конкретный реализатор (ConcreteImplementor): Реализует интерфейс Implementor. Допустим, у нас есть программа для управления различными типами устройств (например, телевизор и радио), которые можно включать и выключать. Мы хотим, чтобы способ управления устройствами мог изменяться независимо от типов устройств.
# Implementor
class Device:
    def is_enabled(self):
        pass

    def enable(self):
        pass

    def disable(self):
        pass

# ConcreteImplementor
class TV(Device):
    def __init__(self):
        self._on = False

    def is_enabled(self):
        return self._on

    def enable(self):
        self._on = True

    def disable(self):
        self._on = False

class Radio(Device):
    def __init__(self):
        self._on = False

    def is_enabled(self):
        return self._on

    def enable(self):
        self._on = True

    def disable(self):
        self._on = False

# Abstraction
class RemoteControl:
    def __init__(self, device):
        self._device = device

    def toggle_power(self):
        if self._device.is_enabled():
            self._device.disable()
        else:
            self._device.enable()

# RefinedAbstraction
class AdvancedRemoteControl(RemoteControl):
    def mute(self):
        print("Device is muted.")

# Клиентский код
tv = TV()
remote = RemoteControl(tv)
remote.toggle_power()  # Включает TV

radio = Radio()
advanced_remote = AdvancedRemoteControl(radio)
advanced_remote.toggle_power()  # Включает Radio
advanced_remote.mute()  # Заглушает Radio
Ставь 👍 и забирай 📚 Базу знаний

🤔 Модификаторы доступа? В Python нет строгой приватности, но используются соглашения: – _имя — защищённое, – __имя — приватное (name mangling), – без подчёркивания — публичное. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что такое IP адрес и доменное имя? Это два важных понятия в контексте работы интернета и компьютерных сетей. Они используются для идентификации устройств и ресурсов в сети, а также для упрощения доступа к ним. 🚩IP-адрес (Internet Protocol Address) Это уникальный числовой идентификатор, присваиваемый каждому устройству, подключенному к сети, использующей протокол IP (Internet Protocol). IP-адреса используются для маршрутизации пакетов данных между устройствами в сети. 🟠IPv4 (Internet Protocol version 4) Формат: 32-битные числа, записанные в виде четырех десятичных чисел, разделенных точками (например, 192.168.1.1). Пример: 192.168.0.1, 8.8.8.8 🟠IPv6 (Internet Protocol version 6) Формат: 128-битные числа, записанные в виде восьми групп шестнадцатеричных чисел, разделенных двоеточиями (например, 2001:0db8:85a3:0000:0000:8a2e:0370:7334). Пример: 2001:0db8:85a3:0000:0000:8a2e:0370:7334, ::1 (loopback адрес) 🚩Доменное имя Это удобочитаемое имя, используемое для идентификации IP-адреса на уровне пользователя. Доменные имена упрощают доступ к ресурсам в интернете, так как их легче запомнить и использовать, чем числовые IP-адреса. 🟠Top-Level Domain (TLD) Верхний уровень, например, .com, .org, .net. 🟠Second-Level Domain (SLD) Основная часть доменного имени, например, example в example.com. 🟠Subdomain Дополнительные уровни, например, www в www.example.com. 🚩Преобразование доменных имен в IP-адреса Для преобразования доменных имен в IP-адреса используется система доменных имен (DNS, Domain Name System). DNS-серверы выполняют роль "телефонной книги" интернета, переводя доменные имена в соответствующие им IP-адреса. Ставь 👍 и забирай 📚 Базу знаний

🤔 Как пишутся комментарии в Python? С одной решёткой для однострочного комментария. Для многострочных — последовательные строки с #, либо многострочные строки с тройными кавычками (чаще для документации). Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Какие типы данных относятся к структурам данных? В Python существует множество структур данных, которые предоставляют различные способы хранения и управления данными. Они делятся на два основных типа: встроенные структуры данных и пользовательские структуры данных (созданные программистом). Встроенные структуры данных предоставляют готовые инструменты для решения большинства задач, а пользовательские разрабатываются вручную для более сложных или специфичных случаев. 🚩Встроенные структуры данных К ним относятся те типы данных, которые изначально встроены в Python. Они обеспечивают простое и удобное управление данными. Вот основные типы: 🟠Список (List) Массив, который может содержать элементы разных типов. Динамический (размер меняется), упорядоченный (элементы хранятся в порядке добавления).
my_list = [1, "hello", 3.14]
print(my_list[1])  # "hello"
🟠Кортеж (Tuple) Похож на список, но неизменяемый. Используется для данных, которые не должны быть изменены.
my_tuple = (10, 20, 30)
print(my_tuple[0])  # 10
🟠Множество (Set) Неупорядоченная коллекция уникальных элементов. Удобно для работы с множествами (поиск пересечений, объединений и т.д.).
my_set = {1, 2, 3, 2}
print(my_set)  # {1, 2, 3}
🟠Словарь (Dictionary) Хранит пары ключ-значение. Очень эффективен для быстрого поиска данных по ключу.
my_dict = {"name": "Alice", "age": 25}
print(my_dict["name"])  # Alice
🚩Пользовательские структуры данных Эти структуры создаются с помощью классов или других механизмов, доступных в Python. Они применяются для решения задач, которые не могут быть эффективно выполнены встроенными средствами. 🟠Стек (Stack) Принцип работы: LIFO (последним пришел — первым ушел). Реализуется через список или collections.deque.
stack = []
stack.append(10)  # Добавление
stack.append(20)
print(stack.pop())  # Удаление последнего элемента (20)
🟠Очередь (Queue) Принцип работы: FIFO (первым пришел — первым ушел). Реализуется через collections.deque или библиотеку queue.
from collections import deque

queue = deque()
queue.append(10)
queue.append(20)
print(queue.popleft())  # 10
🟠Связный список (Linked List) Элементы связаны друг с другом через указатели. Гибче массивов, но сложнее в реализации.
class Node:
    def __init__(self, data):
        self.data = data
        self.next = None

class LinkedList:
    def __init__(self):
        self.head = None

    def append(self, data):
        if not self.head:
            self.head = Node(data)
        else:
            current = self.head
            while current.next:
                current = current.next
            current.next = Node(data)
Ставь 👍 и забирай 📚 Базу знаний

🤔 В чём особенности HTTPS? Это HTTP, работающий поверх TLS (ранее SSL). Особенности: - Шифрование — защищает данные от перехвата. - Аутентификация — через сертификаты подтверждает, что соединение с нужным сервером. - Целостность — данные не были изменены в пути. Используется для безопасности в интернете: входы, платежи, защита от атак типа MITM. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Назови основные команды docker? Docker — это инструмент для создания, развертывания и управления контейнерами. Основные команды позволяют управлять образами, контейнерами, сетями и томами. 🚩Работа с образами (`images`) Образы — это "шаблоны" для создания контейнеров. Пример: скачиваем Python-образ
docker pull python:3.11
🚩Работа с контейнерами (`containers`) Контейнер — это запущенный процесс на основе образа. Пример: запустить контейнер с Ubuntu и войти в него
docker run -it ubuntu bash
Пример: остановить и удалить контейнер
docker stop my_app
docker rm my_app
🚩Работа с томами (`volumes`) Том (volume) — это способ хранения данных, которые не пропадут при перезапуске контейнера. Пример: подключить том к контейнеру
docker run -v my_data:/app/data ubuntu
🚩Работа с сетями (`networks`) Сети в Docker позволяют контейнерам взаимодействовать друг с другом. Пример: запустить два контейнера в одной сети
docker network create my_network
docker run -d --network my_network --name app1 ubuntu
docker run -d --network my_network --name app2 ubuntu
🚩5. Docker Compose (`docker-compose.yml`) Docker Compose позволяет управлять несколькими контейнерами с помощью docker-compose.yml. Пример docker-compose.yml
version: "3"
services:
  app:
    image: python:3.11
    volumes:
      - my_data:/app/data
    networks:
      - my_network

volumes:
  my_data:

networks:
  my_network:
Запуск
docker compose up -d
Ставь 👍 и забирай 📚 Базу знаний