Пошук уроків, статей та іншого контенту
Навчимося створювати, запускати, зупиняти, перезапускати, переглядати та видаляти контейнери.
Контейнер Docker проходить кілька станів:
створений — Docker підготував контейнер, але ще не запустив його;
запущений — процес усередині контейнера працює;
зупинений — контейнер існує, але його процес не виконується;
перезапущений — контейнер зупинили та знову запустили;
видалений — контейнер і його метадані видалено.
Важливо розрізняти контейнер та образ:
образ — шаблон, з якого створюють контейнери;
контейнер — конкретний запущений або зупинений екземпляр образу.
Один образ можна використовувати для створення багатьох контейнерів.
Команда docker run одночасно:
створює контейнер з указаного образу;
запускає його.
Наприклад:
docker run --name lifecycle-demo -d nginx:alpineПараметри команди:
--name lifecycle-demo — задає контейнеру зрозуміле ім’я;
-d (--detach) — запускає контейнер у фоновому режимі;
nginx:alpine — образ, який буде використано.
Якщо образу nginx:alpine немає локально, Docker спочатку завантажить його з реєстру образів.
Після запуску Docker поверне ідентифікатор контейнера. Переконатися, що контейнер працює, можна так:
docker psПриклад результату:
CONTAINER ID IMAGE COMMAND STATUS PORTS NAMES
a1b2c3d4e5f6 nginx:alpine "/docker-entrypoint.…" Up 10 seconds 80/tcp lifecycle-demoЩоб побачити всі контейнери, зокрема зупинені, використовуйте прапорець -a:
docker ps -aІноді потрібно спочатку створити контейнер, а запустити його пізніше. Для цього використовують docker create:
docker create --name lifecycle-created nginx:alpineПісля виконання цієї команди контейнер існує, але не працює:
docker psУ списку запущених контейнерів його не буде. Щоб побачити його серед усіх контейнерів:
docker ps -aЗапустити вже створений контейнер можна командою:
docker start lifecycle-createdПеревірити його стан:
docker psОтже:
docker create — лише створює контейнер;
docker start — запускає вже створений контейнер;
docker run — створює та запускає контейнер.
Показати запущені контейнери:
docker psПоказати всі контейнери:
docker ps -aКорисні параметри:
# Показати лише імена запущених контейнерів
docker ps --format "{{.Names}}"
# Показати останній створений контейнер
docker ps -l
# Показати контейнери, які відповідають заданому імені
docker ps -a --filter "name=lifecycle"Команда docker inspect показує технічні подробиці контейнера:
docker inspect lifecycle-demoРезультат містить конфігурацію, мережеві параметри, змонтовані томи, стан та інші дані.
Щоб отримати лише поточний стан:
docker inspect --format "{{.State.Status}}" lifecycle-demoМожливі значення, зокрема:
created;
running;
exited;
restarting;
paused;
dead.
Вивести журнали контейнера:
docker logs lifecycle-demoПоказати журнали та продовжувати стежити за новими повідомленнями:
docker logs -f lifecycle-demoПрапорець -f означає --follow. Щоб припинити перегляд журналів, натисніть Ctrl+C. Це зупинить лише перегляд, а не сам контейнер.
Також можна показати лише останні рядки:
docker logs --tail 20 lifecycle-demoЩоб коректно зупинити запущений контейнер, використовуйте:
docker stop lifecycle-demoDocker надсилає основному процесу контейнера сигнал завершення. Якщо процес не завершується протягом стандартного часу очікування, Docker примусово його зупиняє.
Після зупинки контейнер не видаляється. Його можна побачити командою:
docker ps -aЙого стан буде приблизно таким:
Exited (0) ...Код 0 зазвичай означає, що процес завершився без помилки. Інші коди можуть указувати на помилку або примусове завершення процесу.
Команда docker kill негайно завершує основний процес контейнера:
docker kill lifecycle-demodocker stop варто використовувати для звичайного коректного завершення. docker kill потрібна, коли контейнер не реагує або його необхідно завершити негайно.
Зупинений контейнер можна запустити знову:
docker start lifecycle-demoПід час цього запуску використовується та сама конфігурація контейнера: його ім’я, змінні середовища, підключені томи та інші параметри, задані під час створення.
Перезапустити контейнер однією командою можна за допомогою docker restart:
docker restart lifecycle-demoЦе еквівалентно послідовному виконанню:
docker stop lifecycle-demo
docker start lifecycle-demoМожна вказати час очікування завершення процесу:
docker restart --time 5 lifecycle-demoУ цьому випадку Docker чекатиме до 5 секунд на коректне завершення процесу перед примусовим зупиненням.
Docker може автоматично запускати контейнер знову після його завершення. Для цього під час створення контейнера задають політику перезапуску:
docker run --name auto-restart-demo \
--restart on-failure:3 \
alpine:3.20 \
sh -c "exit 1"Політика on-failure:3 означає: перезапустити контейнер, якщо його процес завершився з помилкою, але не більше трьох разів.
Поширені політики:
no — не перезапускати автоматично; це значення за замовчуванням;
on-failure — перезапускати після завершення з ненульовим кодом;
on-failure:3 — перезапустити після помилки не більше трьох разів;
always — завжди перезапускати контейнер після завершення;
unless-stopped — перезапускати контейнер, якщо його не зупинили вручну.
Політику вже створеного контейнера можна змінити:
docker update --restart unless-stopped lifecycle-demoЖиттєвий цикл контейнера залежить від основного процесу всередині нього. Коли цей процес завершується, контейнер також переходить у стан exited.
Наприклад:
docker run --name short-task alpine:3.20 echo "Завдання виконано"Контейнер виведе повідомлення та завершить роботу. Перевірити це можна так:
docker ps -a --filter "name=short-task"Журнали завершеного контейнера все ще доступні:
docker logs short-taskЗупинений контейнер можна запустити повторно:
docker start short-taskОднак docker start запустить контейнер із початковою командою, заданою під час його створення. Щоб виконати іншу команду, зазвичай створюють новий контейнер з потрібними параметрами.
Видалити зупинений контейнер можна командою:
docker rm lifecycle-demoПісля цього контейнер більше не буде доступний через docker ps -a.
Docker не дозволяє видалити запущений контейнер звичайною командою docker rm. Спочатку його потрібно зупинити:
docker stop lifecycle-demo
docker rm lifecycle-demoДля примусового видалення запущеного контейнера використовуйте -f:
docker rm -f lifecycle-demoЦя команда спочатку зупинить контейнер, а потім видалить його. Використовуйте її обережно, оскільки процес контейнера буде завершено без звичайного очікування.
Можна видалити кілька зупинених контейнерів, указавши їхні імена:
docker rm short-task lifecycle-createdЩоб видалити всі зупинені контейнери:
docker container pruneDocker попросить підтвердити операцію. Команда видаляє лише контейнери, які не запущені.
Наведений сценарій демонструє основні операції послідовно:
# Створити та запустити контейнер у фоновому режимі
docker run --name lifecycle-demo -d nginx:alpine
# Переглянути запущені контейнери
docker ps
# Переглянути детальний стан контейнера
docker inspect --format "{{.State.Status}}" lifecycle-demo
# Переглянути журнали контейнера
docker logs lifecycle-demo
# Зупинити контейнер
docker stop lifecycle-demo
# Переглянути всі контейнери, включно із зупиненими
docker ps -a
# Запустити контейнер повторно
docker start lifecycle-demo
# Перезапустити контейнер
docker restart lifecycle-demo
# Зупинити та видалити контейнер
docker stop lifecycle-demo
docker rm lifecycle-demoПісля останньої команди контейнер lifecycle-demo видалений. Якщо він буде потрібен знову, його потрібно створити ще раз за допомогою docker run або docker create.
docker ps замість docker ps -adocker ps показує лише запущені контейнери. Якщо контейнер завершив роботу, шукайте його за допомогою:
docker ps -aПісля docker rm контейнера більше не існує:
docker start lifecycle-demoповерне помилку. Потрібно створити новий контейнер командою docker run.
Команда:
docker rm lifecycle-demoне видалить активний контейнер. Спочатку виконайте:
docker stop lifecycle-demo
docker rm lifecycle-demoАбо використайте docker rm -f, якщо примусове завершення справді потрібне.
docker start змінить командуdocker start запускає контейнер із тією самою командою, яка була задана під час його створення. Для запуску іншої команди створіть новий контейнер за допомогою docker run.
docker stop лише зупиняє контейнер. Його дані та конфігурація залишаються доступними.
docker rm видаляє сам контейнер. Після цього його не можна запустити знову, але образ, з якого його створили, зазвичай залишається.
docker run створює та запускає контейнер.
docker create створює контейнер без запуску.
docker start запускає створений або зупинений контейнер.
docker stop коректно зупиняє контейнер.
docker restart зупиняє та запускає контейнер знову.
docker kill негайно завершує процес контейнера.
docker ps показує запущені контейнери.
docker ps -a показує всі контейнери.
docker inspect надає детальну інформацію про контейнер.
docker logs показує журнали контейнера.
docker rm видаляє зупинений контейнер.
docker rm -f примусово зупиняє та видаляє контейнер.
Завершення основного процесу всередині контейнера переводить контейнер у стан exited.