Пошук уроків, статей та іншого контенту
Образ як незмінний шаблон, контейнер як його запущений, змінюваний екземпляр.
Образ (image) — незмінний, статичний шаблон: файлова система застосунку та все його оточення, зафіксовані в один момент. Контейнер (container) — запущений, живий екземпляр цього образу, з власним, змінюваним станом поверх шаблону. Той самий образ можна запустити як контейнер багато разів одночасно — так само, як з одного класу в програмуванні можна створити багато незалежних об'єктів-екземплярів.
docker run node:20 # запустити НОВИЙ контейнер з образу node:20
docker ps # список запущених контейнерів
docker ps -a # список УСІХ контейнерів, включно з зупиненими
docker stop <container> # зупинити запущений контейнер
docker rm <container> # видалити зупинений контейнерОбраз складається з послідовності шарів (layers) — кожна інструкція Dockerfile (детально в наступному модулі) додає новий шар поверх попередніх. Шари незмінні й перевикористовувані: якщо кілька образів починаються з тієї самої базової інструкції, Docker зберігає й перевикористовує спільний шар лише один раз на диску, замість дублювання.
Коли контейнер запускається, Docker додає тонкий, змінюваний шар поверх усіх шарів образу — саме в ньому контейнер записує файли під час роботи (логи, тимчасові файли, дані застосунку). Цей шар видаляється разом із контейнером — образ, з якого контейнер був створений, лишається абсолютно незмінним, скільки б контейнерів із нього не запускали й не видаляли.
Дані, записані контейнером у власний змінюваний шар, зникають назавжди при видаленні контейнера (docker rm) — образ не запам'ятовує ці зміни. Для даних, що мають пережити життя конкретного контейнера (файли бази даних, завантажені користувачами файли), потрібні volumes — окремий урок далі в цьому курсі.
docker run -d --name my-app node:20 node server.js # -d: у фоновому режимі (detached)
docker logs my-app # переглянути вивід контейнера
docker exec -it my-app sh # зайти всередину запущеного контейнера
docker stop my-app # зупинити (процес завершується, файлова система лишається)
docker start my-app # запустити знову той самий, уже створений контейнерdocker stop і docker start працюють з тим самим контейнером (і його змінюваним шаром) — на відміну від docker run, який щоразу створює новий, окремий контейнер із образу.
Кожного разу викликати docker run замість docker start для того самого контейнера — створює новий, окремий контейнер щоразу, замість повторного запуску вже існуючого зі збереженим станом.
Очікувати, що зміни, зроблені всередині контейнера (docker exec), збережуться після його видалення, — вони живуть лише в тимчасовому змінюваному шарі цього конкретного контейнера.
Плутати зупинений контейнер (docker ps -a показує, docker ps — ні) із видаленим — зупинений контейнер і його файлова система все ще існують на диску, доки не виконано docker rm.
Образ — незмінний шаруватий шаблон, контейнер — його запущений екземпляр із власним тимчасовим змінюваним шаром поверх образу. З одного образу можна запустити багато незалежних контейнерів; зміни, зроблені всередині контейнера, зникають при його видаленні, тоді як образ, з якого його створили, лишається незмінним.