Пошук уроків, статей та іншого контенту
Розгляньте стани контейнера та навчіться зупиняти, запускати, перезапускати й видаляти контейнери.
Контейнер Docker проходить кілька станів від моменту створення до видалення:
Створений (created) — контейнер створено, але його процес ще не запущено.
Запущений (running) — основний процес контейнера працює.
Призупинений (paused) — виконання процесів тимчасово призупинено.
Зупинений (exited) — основний процес завершився або контейнер зупинили вручну.
Видалений — контейнера більше немає на комп’ютері.
Стан контейнера можна переглянути командою:
docker ps -aОпція -a показує не лише запущені, а всі наявні контейнери.
Команда docker run одночасно:
завантажує образ, якщо його ще немає локально;
створює контейнер;
запускає контейнер.
Наприклад:
docker run -d --name lifecycle-demo alpine sleep 3600У цьому прикладі:
-d запускає контейнер у фоновому режимі;
--name lifecycle-demo задає контейнеру ім’я;
alpine — назва образу;
sleep 3600 — команда, яка працює всередині контейнера протягом однієї години.
Перевіримо стан:
docker psУ результаті контейнер матиме стан Up, тобто працюватиме.
Щоб переглянути всі контейнери, зокрема зупинені:
docker ps -aЗамість docker run можна виконати дві окремі команди.
Спочатку створимо контейнер:
docker create --name lifecycle-demo-2 alpine sleep 3600Контейнер буде створений, але не запущений. Його стан можна перевірити:
docker ps -aУ стовпці STATUS буде значення на кшталт Created.
Запустимо контейнер:
docker start lifecycle-demo-2Тепер контейнер перейде у стан running.
Такий підхід корисний, коли потрібно спочатку підготувати контейнер, а запустити його пізніше.
Для штатного зупинення запущеного контейнера використовується команда:
docker stop lifecycle-demoDocker надсилає основному процесу контейнера сигнал завершення. Якщо процес не завершується протягом встановленого часу, Docker примусово зупиняє контейнер.
Після зупинення контейнер не видаляється. Він залишається доступним у списку:
docker ps -aЙого стан буде приблизно таким:
Exited (0)Код 0 зазвичай означає, що процес завершився успішно. Інші коди можуть свідчити про помилку або завершення через сигнал.
Зупинити кілька контейнерів можна однією командою:
docker stop lifecycle-demo lifecycle-demo-2Зупинений контейнер можна запустити повторно:
docker start lifecycle-demoDocker використає той самий контейнер, його налаштування та файлову систему контейнера.
Команда start не створює нового контейнера. Вона запускає вже наявний контейнер.
Перевірити результат:
docker psЯкщо команда, яку виконує контейнер, завершилася одразу, контейнер знову перейде у стан exited. Наприклад, контейнер із командою echo "Hello" завершиться відразу після виведення тексту:
docker run --name short-task alpine echo "Hello"Такий контейнер не є несправним. Він завершив роботу, бо його основна команда закінчила виконання.
Для зупинення та повторного запуску контейнера використовується:
docker restart lifecycle-demoЦя команда зручна, коли застосунок усередині контейнера потрібно швидко перезапустити.
За замовчуванням Docker очікує завершення процесу протягом певного часу, а потім примусово зупиняє його. Час очікування можна вказати в секундах:
docker restart -t 10 lifecycle-demoУ цьому випадку Docker чекатиме до 10 секунд перед примусовим завершенням процесу.
Контейнер можна тимчасово призупинити:
docker pause lifecycle-demoУ стані paused процеси контейнера не виконуються, але контейнер не завершений і не зупинений у звичайному розумінні.
Відновити виконання можна командою:
docker unpause lifecycle-demoПісля цього контейнер повернеться у стан running.
Призупинення відрізняється від зупинення:
pause тимчасово заморожує виконання процесів;
stop завершує основний процес контейнера;
start запускає зупинений контейнер знову.
Зупинений контейнер можна видалити командою:
docker rm lifecycle-demoПісля цього контейнер зникне зі списку:
docker ps -aНе можна видалити запущений контейнер звичайною командою docker rm. Спочатку його потрібно зупинити:
docker stop lifecycle-demo
docker rm lifecycle-demoАбо використати опцію -f, яка примусово зупинить і видалить контейнер:
docker rm -f lifecycle-demoБудьте уважні: після видалення контейнера його не можна запустити командою docker start. За потреби потрібно створити новий контейнер за допомогою docker run або docker create.
Нижче наведена послідовність команд, яка демонструє основні операції:
# Створюємо та запускаємо контейнер у фоновому режимі
docker run -d --name lifecycle-demo alpine sleep 3600
# Перевіряємо запущені контейнери
docker ps
# Зупиняємо контейнер
docker stop lifecycle-demo
# Переглядаємо всі контейнери та їхні стани
docker ps -a
# Запускаємо зупинений контейнер знову
docker start lifecycle-demo
# Перезапускаємо контейнер
docker restart lifecycle-demo
# Зупиняємо контейнер перед видаленням
docker stop lifecycle-demo
# Видаляємо контейнер
docker rm lifecycle-demo
# Перевіряємо, що контейнер видалено
docker ps -aКоманда docker ps показує коротку інформацію про контейнери:
docker ps -aДля отримання детальної інформації можна використати:
docker inspect lifecycle-demoЯкщо контейнер ще існує, команда покаже його конфігурацію, мережеві параметри та поточний стан.
Отримати лише назву стану можна за допомогою форматування:
docker inspect -f '{{.State.Status}}' lifecycle-demoМожливі результати:
created
running
paused
exitedПісля виконання:
docker rm lifecycle-demoкоманда:
docker start lifecycle-demoзавершиться помилкою, оскільки такого контейнера вже немає. Потрібно створити новий:
docker run -d --name lifecycle-demo alpine sleep 3600docker ps замість docker ps -aКоманда:
docker psпоказує лише запущені контейнери. Якщо контейнер зупинений, його там не буде.
Для перегляду зупинених контейнерів використовуйте:
docker ps -aКоманда:
docker rm lifecycle-demoне видалить запущений контейнер. Спочатку виконайте:
docker stop lifecycle-demo
docker rm lifecycle-demoКонтейнер працює, доки працює його основний процес. Якщо процес завершується, Docker переводить контейнер у стан exited.
Наприклад:
docker run --name completed-task alpine echo "Завдання виконано"Після виведення повідомлення контейнер завершить роботу. Це очікувана поведінка.
docker run створює та запускає новий контейнер.
docker create лише створює контейнер.
docker start запускає створений або зупинений контейнер.
docker stop штатно зупиняє контейнер.
docker restart зупиняє та запускає контейнер знову.
docker pause тимчасово призупиняє виконання процесів.
docker unpause відновлює призупинений контейнер.
docker rm видаляє зупинений контейнер.
docker ps показує запущені контейнери.
docker ps -a показує всі контейнери, зокрема зупинені.
Контейнер не можна запустити після видалення — потрібно створити новий.