Программирование

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.