1. Обзор
В предыдущей статье мы узнали, как удалить образ Docker . Однако образ Docker можно удалить только в том случае, если его не использует контейнер Docker. Следовательно, чтобы удалить образ Docker, необходимо удалить все контейнеры Docker, работающие с этим образом.
В этом руководстве мы научимся удалять контейнеры Docker, используя разные подходы.
2. Зачем удалять контейнер Docker?
Когда контейнер Docker завершает свое выполнение, он переходит в состояние выхода
. Такие контейнеры не потребляют ЦП или памяти, но все равно используют дисковое пространство машины. Кроме того, остановленные контейнеры не удаляются автоматически, если мы не используем флаг –rm
при запуске контейнера Docker.
Следовательно, по мере того, как все больше и больше контейнеров переводятся
в состояние выхода, общее занимаемое ими дисковое пространство увеличивается. В результате мы не сможем запускать новые контейнеры или демон Docker перестанет отвечать.
Чтобы избежать таких сценариев, рекомендуется либо запускать контейнеры Docker с флагом –rm,
либо периодически удалять контейнеры Docker вручную.
Давайте теперь узнаем, как удалить контейнеры Docker.
3. Удалите один контейнер Docker
Сначала мы запустим контейнер CentOS Docker в неинтерактивном режиме. Таким образом, контейнер остановится сразу после запуска контейнера:
$ docker run --name mycontainer centos:7
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
418c28b4b04e centos:7 "/bin/bash" 6 seconds ago Exited (0) 5 seconds ago mycontainer
Теперь давайте удалим контейнер Docker mycontainer
с помощью команды docker rm
:
$ docker rm mycontainer
mycontainer
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
Мы также можем использовать идентификатор контейнера Docker вместо имени контейнера Docker, чтобы удалить контейнер Docker с помощью команды docker rm
:
$ docker rm 418c28b4b04e
4. Удалите несколько контейнеров Docker
Мы также можем удалить несколько контейнеров Docker с помощью команды docker rm
. Команда docker rm
принимает список имен или идентификаторов контейнеров Docker, разделенных пробелами, и удаляет их все:
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
23c70ec6e724 centos:7 "/bin/bash" 6 seconds ago Exited (0) 5 seconds ago mycontainer3
fd0886458666 centos:7 "/bin/bash" 10 seconds ago Exited (0) 9 seconds ago mycontainer2
c223ec695e2d centos:7 "/bin/bash" 14 seconds ago Exited (0) 12 seconds ago mycontainer1
$ docker rm c223ec695e2d mycontainer2 23c70ec6e724
c223ec695e2d
mycontainer2
23c70ec6e724
В приведенном выше примере было три контейнера Docker в состоянии выхода
, которые мы удалили с помощью команды docker rm
.
Мы можем использовать имя и идентификатор контейнера Docker взаимозаменяемо с любой командой Docker. Обратите внимание, что мы использовали идентификатор контейнера Docker для mycontainer1
и mycontainer3
и имя контейнера для mycontainer2.
5. Удалите все контейнеры Docker
Рассмотрим сценарий, в котором на машине присутствует слишком много остановленных контейнеров Docker, и теперь мы хотим удалить их все. Конечно, мы можем использовать описанный выше подход и передать все идентификаторы контейнеров команде docker rm
. Но давайте рассмотрим более оптимизированную и простую команду для удаления всех контейнеров Docker:
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b5c45fa5764f centos:7 "/bin/bash" 4 seconds ago Exited (0) 3 seconds ago mycontainer1
ed806b1743cd centos:7 "/bin/bash" 9 seconds ago Exited (0) 7 seconds ago mycontainer2
2e00a052eb12 centos:7 "/bin/bash" 13 seconds ago Exited (0) 12 seconds ago mycontainer3
$ docker rm $(docker ps -qa)
b5c45fa5764f
ed806b1743cd
2e00a052eb12
Команда docker ps -qa
возвращает числовые идентификаторы всех контейнеров, присутствующих на компьютере. Затем все эти идентификаторы передаются команде docker rm
, которая итеративно удаляет контейнеры Docker.
Мы также можем использовать команду docker container prune
для удаления всех остановленных контейнеров:
$ docker container prune -f
Здесь мы используем флаг -f
, чтобы избежать запроса на подтверждение.
6. Принудительно удалить работающий контейнер Docker
Все команды, которые мы рассмотрели в примерах выше, работают только в том случае, если контейнер Docker остановлен. Если мы попытаемся удалить запущенный контейнер, не останавливая его, мы получим сообщение об ошибке, подобное этому:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f84692b27b0a centos:7 "/bin/bash" 59 seconds ago Up 58 seconds mycontainer
$ docker rm mycontainer
Error response from daemon:
You cannot remove a running container f84692b27b0a18266f34b35c90dad655faa10bb0d9c85d73b22079dde506b8b5.
Stop the container before attempting removal or force remove
Один из способов удалить работающий контейнер Docker — сначала остановить этот контейнер с помощью команды docker stop
, а затем использовать команду docker rm
для его удаления.
Другой способ — принудительно удалить такие контейнеры с помощью параметра -f
:
$ docker rm -f mycontainer
mycontainer
Мы можем использовать параметр -f
для удаления одного контейнера Docker, нескольких контейнеров Docker или всех контейнеров Docker.
7. Заключение
В этом руководстве мы поняли, почему необходимо удалять контейнеры Docker. Во-первых, мы научились удалять контейнер с машины Linux. Кроме того, мы массово удалили контейнеры Docker с помощью команд docker rm
и docker prune
.
Наконец, мы рассмотрели, как принудительно удалить контейнеры Docker, находящиеся в рабочем
состоянии.