Как работают программы
Каждый контейнер — это просто работающая программа, то, что мы называем процессом. Чтобы по-настоящему понять Docker, нужен небольшой набор повседневных слов, описывающих, как работает любая программа. Начнём с того, что такое процесс, куда идёт текстовый вывод программы (stdout, а ошибки идут в std
Работающая программа похожа на сотрудника за столом: настройки приходят к нему во входящие (переменные окружения); обычные заметки он пишет на общей белой доске, которую все видят (stdout), а ошибки — на отдельной красной доске (stderr); сообщения доходят до него через пронумерованную почтовую щель (порт); можно похлопать его по плечу и попросить закругляться (сигнал); а уходя, он сдаёт записку со словами «всё в порядке» (0) или «была проблема» (не ноль) — это exit code.
- процесс
- Программа, которая выполняется прямо сейчас. Файл на диске — это лишь ожидающий код; когда вы его запускаете, активный экземпляр в памяти называется процессом. Контейнер по сути и есть такой процесс.
- stdout / stderr
- Два «канала», в которые программа пишет текст. stdout (стандартный вывод) — это обычный канал вывода, то, что программа хочет вам показать. stderr — отдельный канал для ошибок, чтобы можно было отделять сообщения о проблемах от обычного вывода.
- порт
- Число, которое служит «пронумерованной дверью», через которую другие программы или пользователи добираются до работающей программы. Например, веб-сервер обычно слушает порт 80 или 8080, как пронумерованная почтовая щель, которой все знают, как пользоваться.
- сигнал
- Короткое сообщение, которое операционная система отправляет программе, чтобы о чём-то её попросить — чаще всего «пожалуйста, остановись». Когда вы нажимаете Ctrl-C в терминале, отправляется такой сигнал остановки, и благовоспитанная программа завершается корректно.
- переменная окружения
- Настройка вида имя=значение, передаваемая программе при её запуске, без изменения её кода. Именно так одна и та же программа получает разные настройки в каждом месте — например, пароль или номер порта — не трогая саму программу.