Docker
Docker запускает программы в контейнерах. Курс с нуля: образы и контейнеры, установка, порты и тома, свой Dockerfile, Docker Compose, сети, обновление и безопасность.
Docker — программа, которая запускает приложения в контейнерах. Контейнер — это отдельный уголок системы, где у программы свои файлы, свои библиотеки и своя сеть. Программа в контейнере не мешает остальной системе и не зависит от того, что установлено на компьютере: всё нужное для работы уже лежит в образе, из которого контейнер запущен.
Благодаря этому одна и та же программа одинаково запускается на ноутбуке разработчика, на тестовом и на рабочем сервере. Базу данных, сайт на WordPress или систему мониторинга можно поднять одной командой, не разбираясь с зависимостями (библиотеками и программами, без которых она не работает), а удалить — так же быстро и без следов в системе.
Где применяется
- Серверы. Сайты, базы данных, почта, мониторинг, файловые хранилища — каждая служба в своём контейнере, обновляется и переносится отдельно.
- Разработка. Нужная версия базы данных или языка запускается за минуту и не засоряет компьютер. Вся команда работает в одинаковом окружении.
- Выпуск программ. Приложение собирают в образ, проверяют и отправляют на сервер именно этот образ — что проверено, то и работает.
- Учёба. Попробовать PostgreSQL, Nginx или Redis можно без установки в систему: контейнер удаляется одной командой.
Из чего состоит Docker
- Docker Engine — сама система: служба
dockerd, которая запускает контейнеры, и командаdocker, которой ей управляют. Бесплатна, с открытым исходным кодом. На Linux ставится напрямую. - Docker Compose — дополнение для запуска нескольких контейнеров по одному файлу настроек. Команда —
docker compose. - Docker Desktop — приложение для Windows и macOS (есть и для Linux): внутри него работает тот же Docker Engine в небольшой виртуальной машине с Linux, плюс окно для управления мышью.
- Docker Hub — каталог готовых образов: Nginx, PostgreSQL, Python, Ubuntu и тысячи других.
Что нужно для начала
- компьютер или сервер с 64-битным Linux — лучше всего Ubuntu LTS или Debian; подойдёт и виртуальная машина;
- или Windows 10/11 и macOS с Docker Desktop — команды курса работают и там;
- умение работать в терминале: открыть его, набрать команду, прочитать ответ. Если терминал пока незнаком, начните с темы Ubuntu или Bash.
Как пройти курс
Уроки идут по порядку: от того, что такое контейнер, до своего образа, нескольких связанных сервисов в Docker Compose и безопасности сервера. После каждого урока — вопросы для проверки, в конце — итоговый тест. Повторяйте команды на своём компьютере или в виртуальной машине: контейнеры ничего не ломают в системе, их можно смело создавать и удалять. В справочнике — короткие ответы на частые вопросы и ошибки: как зайти в контейнер, посмотреть логи, освободить место, что значит «permission denied» или «port is already allocated».
Курс с нуля
- 1.Что такое Docker: образы и контейнерыЧто такое контейнер и образ, зачем нужен Docker, чем контейнер отличается от виртуальной машины и откуда берутся готовые образы.
- 2.Установка DockerКак установить Docker Engine на Ubuntu из официального репозитория, проверить его на hello-world, работать без sudo и что ставить на Debian, Windows и macOS.
- 3.Первые команды: run, ps, logs, stop, rmКак запустить первый контейнер, посмотреть список контейнеров и образов, зайти в контейнер, прочитать логи, остановить и удалить — основные команды Docker.
- 4.Запуск сервиса: порты, переменные, имя и перезапускКак запустить в Docker постоянный сервис: открыть порт ключом -p, передать настройки через -e, дать имя, работать в фоне и подниматься после перезагрузки.
- 5.Данные: тома и папкиПочему данные контейнера пропадают при его удалении и как их сохранить: именованные тома, папки хоста (-v), права, анонимные тома и резервная копия тома.
- 6.Свой образ: Dockerfile и docker buildКак упаковать свою программу в образ: инструкции Dockerfile (FROM, WORKDIR, COPY, RUN, ENV, EXPOSE, CMD), сборка docker build, теги, слои и кэш, частые ошибки.
- 7.Сети контейнеровКак контейнеры связываются друг с другом: сеть bridge, своя сеть с поиском по имени, порты внутри сети и снаружи, localhost в контейнере, доступ к хосту и сеть host.
- 8.Docker Compose: несколько контейнеров одним файломКак описать сервисы в файле compose.yaml и управлять ими командами docker compose up, down, logs и ps — на примере WordPress с базой MariaDB.
- 9.Обновление и очистка местаКак обновить сам Docker и контейнеры до новых версий образов, сколько места занимает Docker, как безопасно чистить контейнеры, образы, кэш и тома и ограничить рост логов.
- 10.Безопасность DockerГлавные риски Docker на сервере и как их закрыть: группа docker равна root, порты в обход ufw, доступ к API, чужие образы, контейнер не от root, секреты и ограничения ресурсов.
Справочник
- docker compose и docker-compose: в чём разницаЧем команда docker compose отличается от старой docker-compose, какую ставить, как проверить версию и что поменяется при переходе: имена контейнеров, version в файле.
- Docker открывает порты в обход ufwПочему порт контейнера доступен из сети, хотя ufw его закрывает, и как защитить сервер: публикация на 127.0.0.1, порты без -p, обратный прокси и проверка снаружи.
- Как зайти в контейнерКак открыть терминал внутри работающего контейнера командой docker exec -it, что делать, если нет bash, как войти под root и выполнить одну команду.
- Как обновить контейнер до новой версии образаКак обновить контейнер Docker до свежего образа без потери данных: pull и пересоздание для docker run, pull и up -d для Docker Compose, смена версии и откат.
- Как освободить место, которое занял DockerПочему /var/lib/docker разрастается и как безопасно освободить место: docker system df, очистка образов, кэша сборки, контейнеров, томов и логов — с предупреждениями.
- Как перезапускать контейнер автоматическиПолитики перезапуска Docker: unless-stopped, always, on-failure — как контейнеру подниматься после сбоя и перезагрузки сервера, как поменять политику у готового контейнера.
- Как посмотреть логи контейнераКоманда docker logs: последние строки, слежение в реальном времени, логи за период и с отметками времени, логи в Docker Compose, где они хранятся и почему могут быть пусты.
- Как пробросить порт в контейнерКак открыть порт контейнера снаружи ключом -p, ограничить доступ одним адресом, пробросить порт в Docker Compose, добавить порт к уже созданному контейнеру и проверить результат.
- Как скопировать файл в контейнер и из негоКоманда docker cp: скопировать файл или папку с хоста в контейнер и обратно, правила путей, владелец файлов, docker compose cp и когда лучше подключить папку.
- Как сохранить данные контейнераКак сделать так, чтобы данные не пропадали при удалении контейнера: тома и папки хоста, перенос данных из уже работающего контейнера, резервная копия тома.
- Как удалить все остановленные контейнерыКак одной командой удалить все остановленные контейнеры Docker, удалить только часть по фильтру и не потерять при этом нужные данные.
- Как установить Docker на UbuntuКоманды установки Docker Engine и Docker Compose на Ubuntu из официального репозитория Docker, проверка и запуск без sudo — коротко, по шагам.
- Контейнер сразу останавливаетсяПочему контейнер Docker завершается сразу после запуска или постоянно перезапускается: как найти причину по коду выхода и логам и что исправить.
- Ошибка Cannot connect to the Docker daemonЧто делать, если docker пишет «Cannot connect to the Docker daemon. Is the docker daemon running?»: запустить службу, найти причину в журнале, проверить Docker Desktop и контекст.
- Ошибка permission denied при запуске dockerЧто значит «permission denied while trying to connect to the Docker daemon socket» и как запускать docker без sudo: группа docker, новый вход, права на ~/.docker.
- Ошибка port is already allocatedЧто значат ошибки Docker «port is already allocated» и «address already in use», как найти, кто занял порт, и как запустить контейнер на другом порту.
- Файл .dockerignoreЗачем нужен .dockerignore, как исключить из сборки образа папки, секреты и мусор, как писать шаблоны со звёздочками и исключениями, частые ошибки.
- Чем отличаются CMD и ENTRYPOINTРазница CMD и ENTRYPOINT в Dockerfile: что выполняется при запуске контейнера, как их переопределить в docker run, как они работают вместе и чем exec-форма лучше shell-формы.
Официальная документация
- Документация Docker — https://docs.docker.com/
- Установка Docker Engine на Ubuntu — https://docs.docker.com/engine/install/ubuntu/
- Документация Docker Compose — https://docs.docker.com/compose/