Управление жизненным циклом контейнера
Понимание того, как управлять жизненным циклом контейнера, имеет решающее значение для эффективного использования Docker. На этом шаге мы рассмотрим различные команды для управления состояниями контейнеров и понимания жизненного цикла контейнера.
Состояния жизненного цикла контейнера
Контейнер Docker может существовать в нескольких состояниях:
- Created (Создан): Контейнер создан, но не запущен
- Running (Запущен): Контейнер в данный момент запущен
- Paused (Приостановлен): Выполнение контейнера приостановлено
- Stopped (Остановлен): Контейнер остановлен, но все еще существует
- Removed (Удален): Контейнер удален
Давайте рассмотрим, как переходить между этими состояниями.
Создание контейнера без его запуска
Вы можете создать контейнер, не запуская его, используя команду create:
docker create --name test-container nginx
Это создает контейнер, но не запускает его. Проверьте его статус:
docker ps -a
Вы должны увидеть новый контейнер со статусом "Created" (Создан):
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3f4ab92d1234 nginx "/docker-entrypoint.…" 5 seconds ago Created test-container
a72369167c21 nginx "/docker-entrypoint.…" 40 minutes ago Up 30 minutes 0.0.0.0:8080->80/tcp my-nginx
bc123def456a redis "docker-entrypoint.s…" 10 minutes ago Up 10 minutes 6379/tcp redis-server
Запуск созданного контейнера
Чтобы запустить созданный контейнер:
docker start test-container
Убедитесь, что он запущен:
docker ps
Приостановка и возобновление контейнеров
Docker позволяет приостановить контейнер, что замораживает все процессы внутри него:
docker pause test-container
Проверьте его статус:
docker ps
Вывод:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3f4ab92d1234 nginx "/docker-entrypoint.…" 2 minutes ago Up 1 minute (Paused) test-container
a72369167c21 nginx "/docker-entrypoint.…" 42 minutes ago Up 32 minutes 0.0.0.0:8080->80/tcp my-nginx
bc123def456a redis "docker-entrypoint.s…" 12 minutes ago Up 12 minutes 6379/tcp redis-server
Чтобы возобновить контейнер:
docker unpause test-container
Убедитесь, что он снова запущен:
docker ps
Остановка и перезапуск контейнеров
Чтобы корректно остановить контейнер (отправка SIGTERM, затем SIGKILL после периода ожидания):
docker stop test-container
Чтобы принудительно завершить контейнер (отправка SIGKILL):
docker start test-container ## Start it again first
docker kill test-container ## Then kill it
Чтобы перезапустить контейнер (останавливает и снова запускает его):
docker start test-container ## Start it again first
docker restart test-container
Удаление контейнеров
Чтобы удалить остановленный контейнер:
docker stop test-container ## Make sure it's stopped first
docker rm test-container
Убедитесь, что он удален:
docker ps -a | grep test-container
Вы не должны получить никакого вывода, что указывает на то, что контейнер был удален.
Удаление запущенного контейнера
Вы можете принудительно удалить запущенный контейнер:
docker run --name temp-container -d nginx
docker rm -f temp-container
Политики перезапуска контейнера
Docker позволяет вам установить политики перезапуска для контейнеров:
docker run --name always-restart --restart always -d nginx
Этот контейнер будет перезапускаться автоматически, если он завершит работу или если Docker перезапустится.
Проверьте политику перезапуска:
docker inspect --format='{{.HostConfig.RestartPolicy.Name}}' always-restart
Вывод:
always
Давайте остановим и удалим этот контейнер:
docker rm -f always-restart
Понимание этих команд жизненного цикла дает вам полный контроль над вашими контейнерами Docker, позволяя вам эффективно управлять их состояниями в соответствии с потребностями вашего приложения.