Что такое Docker и зачем он нужен
Docker — инструмент для запуска приложений в контейнерах. Один раз настроил окружение — работает везде одинаково.
Проблема без Docker
# На твоей машине всё работает
node -v # v20.0.0
# На сервере другая версия
node -v # v14.0.0 — и всё ломаетсяКлассика: «works on my machine». Docker решает это — приложение везёт своё окружение с собой.
Контейнер vs Виртуальная машина
Попробуй в симуляции
VM запускает полноценную ОС внутри хоста. Это тяжело — образ VM весит гигабайты, запуск занимает минуты.
Контейнер — изолированный процесс, который использует ядро хостовой ОС. Образ весит мегабайты, запуск — секунды.
VM: Host OS → Hypervisor → Guest OS → App
Контейнер: Host OS → Docker Engine → Container → App
Image и Container
Image (образ) — неизменяемый снимок файловой системы с приложением и его зависимостями. Как класс в ООП.
Container (контейнер) — запущенный экземпляр образа. Как объект, созданный из класса. Из одного image можно запустить сколько угодно контейнеров.
docker pull nginx # скачать образ
docker run nginx # запустить контейнер
docker run -d -p 80:80 nginx # в фоне, маппинг портаDocker Hub
Публичный реестр образов — hub.docker.com. Тысячи готовых образов: nginx, postgres, redis, node, python.
docker pull postgres:16 # конкретная версия
docker pull ubuntu:22.04 # базовый образ для своихПервый запуск
# Запустить интерактивно
docker run -it ubuntu bash
# Теперь ты внутри контейнера Ubuntu
ls /
exit
# Контейнер остановилсяФлаги: -i — интерактивный ввод, -t — псевдо-TTY (терминал), -d — detach (фоновый режим).
Команды
docker pull <image> # скачать образ
docker images # список образов
docker run <image> # запустить контейнер
docker run -d <image> # в фоне
docker run -it <image> bash # интерактивно
docker ps # работающие контейнеры
docker ps -a # все, включая остановленные
docker stop <id> # остановить
docker rm <id> # удалитьВ следующем уроке — образы подробнее: теги, реестры, docker inspect.