Контейнер

Оригинальное название: container

Коротко

Изолированный процесс, который запускается из готового образа со всеми библиотеками и настройками приложения и поэтому одинаково работает на ноутбуке разработчика и на сервере.

Что такое «Контейнер»

Классическая беда разработки — «у меня работает, а на сервере нет». Причина обычно в мелочах: другая версия PHP, не хватает расширения, иначе настроен веб-сервер. Контейнер снимает эту проблему тем, что приложение едет на сервер вместе со своим окружением. Шаблон, из которого контейнер запускается, называется образом: это набор слоёв с файлами системы, библиотеками и кодом. Один образ можно запустить много раз, и каждый запуск будет отдельным контейнером.

Самый известный инструмент — Docker, он сделал контейнеры массовыми в середине 2010-х. Когда контейнеров десятки и сотни, их распределяют по серверам оркестраторы, например Kubernetes.

Как устроен изнутри

Технически контейнер — обычный процесс Linux, которому ядро ограничило обзор и ресурсы. Пространства имён (namespaces) показывают процессу собственную файловую систему, сеть и список процессов, а контрольные группы (cgroups) ограничивают память и процессор. Отдельной операционной системы внутри нет, ядро общее с хостом. Поэтому контейнер стартует за секунды и весит мегабайты, а виртуальная машина эмулирует целый компьютер со своим ядром и загружается дольше.

Пример: сайт на PHP в контейнерах

Типичная связка для сайта на WordPress или Битриксе — отдельные контейнеры для PHP-FPM, nginx и базы. Их описывают в файле compose.yaml:

services:
  php:
    image: php:8.3-fpm
    volumes:
      - ./www:/var/www/html
  nginx:
    image: nginx:1.26
    ports:
      - "8080:80"
    volumes:
      - ./www:/var/www/html:ro

Команда docker compose up -d поднимает оба сервиса. К этому добавляют конфиг nginx и контейнер с MariaDB. Локальную копию этого сайта я держу именно так — с теми же версиями, что на боевом сервере.

Чего контейнер не делает

  • Не хранит данные сам по себе: всё, что записано внутрь, пропадает при пересоздании. Базу и загрузки выносят в тома (volumes).
  • Не изолирует так же жёстко, как виртуальная машина: уязвимость ядра затрагивает все контейнеры хоста.
  • Не заменяет настройку: образ с открытым паролем или лишними портами так же опасен, как обычный сервер.

Обновлено:

Все термины раздела «Backend»

Что будем искать? Например,Продвижение