Какую проблему решает
Классическая ситуация: у вас проект работает, у коллеги — нет. Причина в разных версиях языка, библиотек или системы. Разбирательство занимает день.
Контейнер решает это так: вы упаковываете вместе с кодом всё окружение — нужную версию языка, библиотеки, настройки. У любого человека и на любом сервере это запустится одинаково.
Отсюда фраза «у меня работает» перестаёт быть аргументом: если работает в контейнере, работает у всех.
Что такое контейнер простыми словами
Не виртуальная машина. Виртуальная машина — это целый компьютер внутри компьютера, тяжёлый и медленный.
Контейнер — изолированная коробка, которая использует ядро вашей системы, но имеет собственную файловую систему и процессы. Запускается за секунды, весит мало.
Два понятия, которые надо различать:
- Образ — рецепт и заготовка. Неизменяемый слепок с вашим приложением и окружением.
- Контейнер — запущенный экземпляр образа. Их может быть много из одного образа.
Первые команды
Скачать готовый образ и запустить:
docker run --rm hello-world
Запустить базу данных, не устанавливая её в систему:
docker run --name pg -e POSTGRES_PASSWORD=secret -p 5432:5432 -d postgres
Разберём: имя контейнера, переменная окружения с паролем, проброс порта наружу, запуск в фоне.
Это, кстати, самый простой способ получить базу для учёбы: не надо ничего ставить и потом чистить.
Посмотреть запущенное:
docker ps
Остановить и удалить:
docker stop pg
docker rm pg
Минимальный файл описания
Файл с инструкциями, как собрать образ вашего проекта. Для приложения на Python примерно так:
FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["python", "main.py"]
По строкам: берём готовый образ с языком, задаём рабочую папку, копируем список зависимостей, ставим их, копируем код, указываем команду запуска.
Порядок строк важен: зависимости копируются и ставятся до копирования кода, чтобы при изменении кода не переустанавливать их заново. Это заметно ускоряет пересборку.
Собрать и запустить:
docker build -t myapp .
docker run --rm -p 8000:8000 myapp
Что не класть в образ
- Пароли и ключи. Передавайте через переменные окружения.
- Виртуальное окружение с вашей машины.
- Папку с историей изменений и служебный мусор — для этого есть файл со списком исключений.
Зачем это новичку
Во-первых, это встречается в вакансиях всё чаще, и умение упаковать своё приложение выделяет среди других кандидатов.
Во-вторых, это удобно самому: базы и вспомогательные службы для учёбы поднимаются одной командой и так же удаляются, не засоряя систему.
В-третьих, проект, упакованный в контейнер, легко развернуть где угодно — и вы не привязаны к одной площадке.
Хватит читать — пора делать
На CohortX можно найти команду под пет-проект и получить тот самый опыт, о котором спрашивают на собеседовании.
Похожие статьи
- Running an app and a database together: meeting ComposeHow to describe several services in one file, start everything with one command, and keep passwords out of the code.
- Поднять базу и приложение вместе: знакомство с ComposeКак описать несколько служб одним файлом, запустить всё одной командой и не хранить пароли в коде.
- Docker for beginners: what it's forWhat a container is in plain terms, which problem it solves, the first commands, and a minimal build file.