Как использовать команду docker container rm для удаления контейнеров

DockerDockerBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этой лабораторной работе вы научитесь эффективно управлять контейнерами Docker с помощью команды docker container rm. Вы попрактикуетесь в создании и удалении базового контейнера, узнаете, как принудительно удалить работающий контейнер, изучите возможность удаления контейнера вместе с связанными анонимными томами (anonymous volumes) и, наконец, научитесь эффективно удалять все остановленные контейнеры.

Благодаря практическим упражнениям вы получите опыт работы с основными аспектами управления жизненным циклом контейнеров Docker, что позволит вам очищать среду Docker и эффективно управлять ресурсами.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/VolumeOperationsGroup(["Volume Operations"]) docker(("Docker")) -.-> docker/SystemManagementGroup(["System Management"]) docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/ls("List Containers") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/rm("Remove Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") docker/VolumeOperationsGroup -.-> docker/volume("Manage Volumes") docker/SystemManagementGroup -.-> docker/prune("Remove Unused Docker Objects") subgraph Lab Skills docker/run -.-> lab-555120{{"Как использовать команду docker container rm для удаления контейнеров"}} docker/ls -.-> lab-555120{{"Как использовать команду docker container rm для удаления контейнеров"}} docker/ps -.-> lab-555120{{"Как использовать команду docker container rm для удаления контейнеров"}} docker/rm -.-> lab-555120{{"Как использовать команду docker container rm для удаления контейнеров"}} docker/pull -.-> lab-555120{{"Как использовать команду docker container rm для удаления контейнеров"}} docker/volume -.-> lab-555120{{"Как использовать команду docker container rm для удаления контейнеров"}} docker/prune -.-> lab-555120{{"Как использовать команду docker container rm для удаления контейнеров"}} end

Создание и удаление контейнера

На этом шаге вы узнаете, как создавать и удалять контейнер Docker. Контейнер — это запускаемый экземпляр образа (image). Вы можете создавать, запускать, останавливать, перемещать или удалять контейнер с помощью Docker API или CLI.

Сначала загрузим простой образ, который будем использовать для создания контейнера. Мы воспользуемся образом hello-world — это очень маленький образ, который просто выводит сообщение "Hello from Docker!" и завершает работу.

docker pull hello-world

Вы увидите вывод, указывающий на загрузку образа.

Using default tag: latest
latest: Pulling from library/hello-world
...
Status: Downloaded newer image for hello-world:latest
docker.io/library/hello-world:latest

Теперь, когда образ загружен, мы можем создать и запустить из него контейнер с помощью команды docker run.

docker run hello-world

Эта команда создаст новый контейнер из образа hello-world, выполнит команду, указанную в образе (вывод "Hello from Docker!"), после чего контейнер завершит работу. В терминале вы увидите сообщение:

Hello from Docker!
This message shows that your installation appears to be working correctly.
...

После завершения работы контейнер остановится. Вы можете просмотреть все контейнеры, включая остановленные, с помощью команды docker ps -a.

docker ps -a

Вы увидите примерно такой вывод, где контейнер hello-world будет иметь статус "Exited".

CONTAINER ID   IMAGE         COMMAND    CREATED          STATUS                      PORTS     NAMES
<container_id>   hello-world   "/hello"   About a minute ago   Exited (0) About a minute ago             <container_name>

Теперь удалим остановленный контейнер командой docker rm, указав ID или имя контейнера (возьмите его из вывода docker ps -a). Замените <container_id> на фактический ID вашего контейнера.

docker rm <container_id>

Вы увидите ID контейнера, подтверждающий его удаление.

<container_id>

Чтобы убедиться, что контейнер удалён, снова выполните docker ps -a. Контейнер hello-world больше не должен отображаться в списке.

docker ps -a

В выводе не должно быть контейнера hello-world, который вы только что удалили.

Принудительное удаление работающего контейнера

На предыдущем шаге мы удалили остановленный контейнер. Однако работающий контейнер нельзя удалить напрямую с помощью docker rm. В этом шаге вы узнаете, как принудительно удалить работающий контейнер.

Сначала создадим контейнер, который будет продолжать работать. Мы используем образ ubuntu и запустим команду, которая поддерживает работу контейнера, например sleep infinity. Если у вас нет образа ubuntu, сначала загрузите его.

docker pull ubuntu

Теперь запустим контейнер из образа ubuntu в detached mode (-d), чтобы он работал в фоновом режиме.

docker run -d ubuntu sleep infinity

Вы увидите длинную строку — это ID контейнера.

<container_id>

Проверим, что контейнер работает, с помощью docker ps.

docker ps

В списке должен отображаться контейнер ubuntu со статусом "Up".

CONTAINER ID   IMAGE    COMMAND         CREATED          STATUS          PORTS     NAMES
<container_id>   ubuntu   "sleep infinity"   About a minute ago   Up About a minute ago             <container_name>

Теперь попробуем удалить этот работающий контейнер с помощью команды docker rm, указав ID контейнера. Замените <container_id> на фактический ID вашего работающего контейнера.

docker rm <container_id>

Скорее всего, вы увидите сообщение об ошибке, указывающее, что нельзя удалить работающий контейнер.

Error response from daemon: You cannot remove a running container <container_id>. Stop the container before attempting removal or use -f

Как следует из сообщения об ошибке, вам нужно сначала остановить контейнер или использовать флаг -f (force). Остановка контейнера может занять некоторое время, особенно если процесс внутри контейнера не реагирует быстро на сигнал остановки. Принудительное удаление — более быстрый способ удалить работающий контейнер, хотя обычно рекомендуется корректно останавливать контейнеры, когда это возможно.

Давайте принудительно удалим работающий контейнер с помощью флага -f. Замените <container_id> на фактический ID вашего контейнера.

docker rm -f <container_id>

Вы увидите ID контейнера, подтверждающий его принудительное удаление.

<container_id>

Чтобы убедиться, что контейнер удалён, снова выполните docker ps. Контейнер ubuntu больше не должен отображаться в списке.

docker ps

В выводе не должно быть контейнера ubuntu, который вы только что удалили.

Удаление контейнера с анонимными томами

На этом шаге вы узнаете, как удалить контейнер вместе с ассоциированными анонимными томами. При создании контейнера Docker может создавать тома для хранения данных. Анонимные тома — это тома, которые не имеют явного имени при создании. Они обычно создаются при наличии инструкции VOLUME в Dockerfile образа.

Запустим контейнер, который создаст анонимный том. Снова используем образ ubuntu и укажем точку монтирования тома с помощью флага -v без указания имени перед двоеточием.

docker run -d -v /data ubuntu sleep infinity

Эта команда создаст контейнер и анонимный том, смонтированный по пути /data внутри контейнера. Вы увидите ID контейнера.

<container_id>

Теперь проверим контейнер, чтобы увидеть созданный том. Замените <container_id> на фактический ID вашего контейнера.

docker inspect <container_id>

Вывод docker inspect представляет собой большой JSON-объект. Найдите раздел "Mounts". Вы увидите запись о томе, смонтированном по пути /data, где поле "Name" будет содержать длинную случайно сгенерированную строку — это признак анонимного тома.

...
"Mounts": [
    {
        "Type": "volume",
        "Source": "<volume_name>",
        "Target": "/data",
        "Consistency": "consistent",
        "BindOptions": null,
        "Mode": "",
        "RW": true,
        "Propagation": "rprivate"
    }
],
...

Также можно вывести список всех томов командой docker volume ls. Вы увидите анонимный том в списке.

docker volume ls

Вывод будет содержать анонимный том со случайно сгенерированным именем.

DRIVER    VOLUME NAME
local     <volume_name>

По умолчанию при удалении контейнера его анонимные тома не удаляются. Сначала остановим контейнер. Замените <container_id> на фактический ID.

docker stop <container_id>

Вы увидите ID контейнера.

<container_id>

Теперь удалим остановленный контейнер без удаления томов. Замените <container_id> на фактический ID.

docker rm <container_id>

Вы увидите ID контейнера.

<container_id>

Проверим тома снова командой docker volume ls. Анонимный том должен остаться.

docker volume ls

Вывод по-прежнему будет содержать анонимный том.

Теперь создадим другой контейнер с анонимным томом и удалим его вместе с томом.

docker run -d -v /data ubuntu sleep infinity

Получим ID нового контейнера.

<new_container_id>

Остановим новый контейнер. Замените <new_container_id> на фактический ID.

docker stop <new_container_id>

Вы увидите ID контейнера.

<new_container_id>

Теперь удалим остановленный контейнер и его анонимные тома с помощью флага -v в команде docker rm. Замените <new_container_id> на фактический ID.

docker rm -v <new_container_id>

Вы увидите ID контейнера.

<new_container_id>

Проверим тома снова командой docker volume ls. Анонимный том, связанный с только что удалённым контейнером, должен исчезнуть. Первый созданный анонимный том должен остаться.

docker volume ls

В выводе должен остаться только первый созданный анонимный том.

Удаление всех остановленных контейнеров

На этом шаге вы узнаете, как удалить все остановленные контейнеры одновременно. При работе с Docker может накапливаться множество остановленных контейнеров, которые занимают место на диске. Docker предоставляет удобную команду для очистки таких контейнеров.

Сначала создадим несколько остановленных контейнеров. Используем образ ubuntu и выполним команду, которая завершается сразу.

docker run ubuntu echo "This container will stop immediately"

Вы увидите вывод "This container will stop immediately", после чего контейнер завершит работу.

Запустим команду ещё раз, чтобы создать другой остановленный контейнер.

docker run ubuntu echo "Another stopped container"

Вы увидите вывод "Another stopped container", и этот контейнер также завершит работу.

Теперь выведем список всех контейнеров, включая остановленные, с помощью docker ps -a.

docker ps -a

Вы увидите два только что созданных контейнера со статусом "Exited". Также могут отображаться другие остановленные контейнеры из предыдущих шагов, если вы их не удаляли.

CONTAINER ID   IMAGE    COMMAND                  CREATED          STATUS                      PORTS     NAMES
<container_id_1>   ubuntu   "echo 'This containe…"   About a minute ago   Exited (0) About a minute ago             <container_name_1>
<container_id_2>   ubuntu   "echo 'Another stopp…"   About a minute ago   Exited (0) About a minute ago             <container_name_2>
...

Для удаления всех остановленных контейнеров используйте команду docker container prune. Эта команда удалит все остановленные контейнеры.

docker container prune

Docker запросит подтверждение перед удалением. Введите y и нажмите Enter.

WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y

Вы увидите список ID удалённых контейнеров.

Deleted Containers:
<container_id_1>
<container_id_2>
...

Total reclaimed space: ...

Чтобы убедиться, что все остановленные контейнеры удалены, снова выполните docker ps -a.

docker ps -a

В выводе должны отображаться только работающие контейнеры (если они есть), без остановленных.

Итоги

В этой лабораторной работе вы изучили основные принципы управления контейнерами Docker с помощью команды docker rm. Вы начали с создания и запуска простого контейнера hello-world, наблюдая за его жизненным циклом от создания до завершения. Затем вы попрактиковались в удалении этого остановленного контейнера с использованием его ID или имени.

На основе этих знаний вы рассмотрели более сложные сценарии удаления. Вы узнали, как принудительно удалить работающий контейнер с помощью флага -f, понимая последствия этого действия. Кроме того, вы научились удалять контейнер вместе с ассоциированными анонимными томами, используя флаг -v, что обеспечивает чистоту удаления. Наконец, вы освоили эффективный метод одновременного удаления всех остановленных контейнеров — полезную команду для поддержания порядка в вашей Docker-среде.