Docker
Что такое Docker?
Docker пакует программу вместе с библиотеками. Разрыв «у меня на компьютере работало» становится меньше. Это не полная виртуальная машина. Ядро общее с хостом, поэтому легче. Поставить Docker на сервер Ubuntu — обычный путь.
Для чего нужен Docker?
Он нужен, чтобы держать одну среду на машине разработчика и на сервере.
- Собрать приложение как образ
- Поднять базу локально
- Запустить тот же тест в CI
- Разделить несколько служб на одном сервере
Что можно делать с Docker?
Dockerfile записывает шаги: базовый образ, пакеты и команду. docker run открывает контейнер из этого образа. Сетевой порт и том диска подключаются отдельно. Docker не заменяет межсетевой экран и сертификат HTTPS.
Сложно ли освоить Docker?
hello-world стартует быстро. Трудность в размере образа, записи секрета внутрь образа и сети. Пароль и ключ нельзя класть в образ. Их надо передать из окружения при запуске.
Плюсы и ограничения
Плюс: среда повторяется, беспорядок лишних пакетов на сервере меньше. Ограничение: есть учёба, диск заполняется, плохо написанный образ несёт старую дыру. root внутри контейнера может дать широкое право.
Основные понятия
Образ — читаемый шаблон. Контейнер — процесс, созданный из него. Реестр, например Docker Hub, хранит образы.
- Dockerfile — список инструкций
- docker build создаёт образ
- порт сопоставляется через -p 8080:80
- volume может сохранить данные, когда контейнер удалят
Короткий пример
Эта команда скачивает пробный образ, запускает его и удаляет, когда он закончит.
docker run --rm hello-world
Частые вопросы
- Docker — это виртуальная машина? Нет. Это контейнер, который делит ядро.
- Образ и контейнер — одно и то же? Нет. Образ — шаблон, контейнер — работающая копия.
- Docker даёт HTTPS? Нет. Шифрование в сертификате, обычно на стороне Nginx.