Обыденная аналогия: образы и контейнеры
Представьте морской контейнер. Что бы вы в него ни положили, у него стандартная форма, поэтому любой корабль, грузовик или кран может его перевезти, не заботясь о содержимом. Docker-контейнер делает то же самое для программного обеспечения: он упаковывает приложение и его зависимости в стандартный пакет, поэтому любая совместимая система может запустить его одинаково — без сюрпризов вида «у меня на машине работает».
Большую часть путаницы вызывают два термина. «Образ» (image) — это чертёж, замороженный снимок вашего приложения и его окружения. «Контейнер» (container) — это живой, запущенный экземпляр, созданный из этого образа. Из одного образа можно запустить много контейнеров, точно так же как из одного шаблона можно открыть много копий документа. Образы обычно хранятся в «реестре» (registry), например Docker Hub или приватном, и загружаются по мере необходимости.
Файлы compose и сколько Docker вам на самом деле нужно
Реальные приложения редко состоят из одной части — у вас может быть веб-приложение, фоновый воркер, база данных и кеш. Файл docker-compose.yml перечисляет все эти «сервисы» и то, как они соединяются, чтобы весь стек мог запуститься вместе по одному описанию. На CDN.com.tr вы можете импортировать файл compose, и каждый сервис станет управляемым приложением, а базы данных и кеши — управляемыми дополнениями.
Часто вам нужно меньше, чем вы ожидаете. Если вы используете WordPress или сайт на PHP, знания Docker вообще не требуются — эти платформы работают в пару кликов. Docker важен только тогда, когда вы хотите запустить собственное приложение. Но и тогда у многих приложений уже есть готовый образ, который можно использовать по имени, или файл docker-compose, который можно импортировать, не написав ни строчки Docker самостоятельно.
Как это работает на CDN.com.tr и честные ограничения
Чтобы запустить собственное приложение, вы предоставляете нам образ (например, публичный образ вроде «nginx» или свой из реестра) или импортируете файл docker-compose. Платформа загружает образ, запускает его, выдаёт URL с автоматическим HTTPS и поддерживает его работоспособность. Переменными окружения, масштабированием и перезапусками вы управляете из панели — никакого администрирования серверов и никакой необходимости собирать образы на самой платформе.
Платформа запускает ваши контейнеры, но не предназначена для сборки образов или запуска Docker внутри Docker, и не открывает «сырые» публичные TCP-порты (публичный доступ только по HTTP(S); внутренний трафик между сервисами остаётся приватным). Для большинства веб-приложений, API, воркеров и инструментов это именно то, что нужно; для CI-системы, которая собирает образы, сборку стоит выполнять в другом месте, а результат разворачивать здесь.
Когда Docker полезен здесь
Разверните что-то вроде RabbitMQ или Jenkins по имени образа, с постоянным томом, чтобы данные переживали перезапуски.
Соберите образ в своём собственном пайплайне, загрузите в реестр и запустите здесь с URL и HTTPS.
Импортируйте docker-compose.yml и получите веб-сервер, воркер, базу данных и кеш, работающие вместе за один шаг.
Часто задаваемые вопросы
Трудно ли изучить Docker?
Основы просты: образ — это шаблон, контейнер — его запущенная копия. Для использования CDN.com.tr обычно достаточно указать имя образа или файл compose — писать Docker самостоятельно почти никогда не требуется.
Можно ли использовать платформу без Docker?
Да. Хостинг WordPress и PHP вообще не требует Docker. Docker нужен только для собственных контейнерных приложений.
Можно ли собрать образ прямо на CDN.com.tr?
Нет — платформа запускает образы, но не собирает их (нет Docker-в-Docker). Соберите в своём пайплайне или локально, загрузите в реестр, затем разверните здесь.