Удаление контейнеров и образов в Docker

Эта заметка немного выбивается из того цикла, который я бы хотел написать. Все дело в том, что ранее я пытался пользоваться docker'ом и это было не совсем удачно с кучей непонятностей и неприятностей. Сейчас же я решил снова попробовать использовать docker и начать все с начала. А предварительно необходимо удалить все следы старых попыток.

Все эти заметки в первую очередь предназначаются для меня, на тот случай, если я снова заброшу docker по каким-то причинам, а через некоторое время решу вернуться к нему.

Удаление контейнеров и образов

Чтобы посмотреть все загруженные образы используется команда docker images:

$ docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
ubuntu              latest              5ba9dab47459        36 hours ago        192.7 MB
dougbtv/asterisk    latest              5d813382453e        7 weeks ago         814.7 MB
stl-mysql           latest              cdeabd5abcbc        3 months ago        323.9 MB
tutum/mysql         latest              90952d8d3872        3 months ago        322.6 MB
<none>              <none>              d9a0b1eeff3f        4 months ago        435.5 MB
ubuntu              14.04               96864a7d2df3        4 months ago        204.4 MB
stackbrew/ubuntu    14.04               96864a7d2df3        4 months ago        204.4 MB
fedora              rawhide             5cc9e91966f7        8 months ago        372.7 MB

Для того, чтобы удалить образ используется команда docker rmi и указывается <IMAGE ID>:

$ docker rmi 5cc9e91966f7

Untagged: fedora:rawhide
Deleted: 5cc9e91966f7b9c84c44682cb76886d95f2d5c5e7e689770410af3f27471641a
Deleted: 5af93badfee23d37c0314fee9e579fb908b1643740e59d68d7bd413bc590e2fe
Deleted: 28767a75160cc0b314ed0f1ebb30a7b88f63faab61383e8591ff965449d1a0b2
Deleted: 1633c925334475c2ce397a6659efd67fdf476cbdd424aba1dafc4d59dcbdb0e9
Deleted: b7de3133ff989df914ae9382a1e8bb6771aeb7b07c5d7eeb8ee266b1ccff5709
Deleted: ef52fb1fe61037a1b531698c093205f214ade751c781e30ce4f9a7d33020a0f2

Иногда образ нельзя удалить из-за того, что он используется каким-либо контейнером. Например, при удалении образа tutum/mysql он будет ругаться, что его использует контейнер 0ffd6237cd27:

$ docker rmi 90952d8d3872

Error response from daemon: Conflict, cannot delete 90952d8d3872 because the container 0ffd6237cd27 is using it, use -f to force
FATA[0000] Error: failed to remove one or more images

Для начала надо удалить контейнер использующий этот образ. Для того чтобы посмотреть все существующие контенеры используется команда docker ps -a:

$ docker ps -a

CONTAINER ID        IMAGE                     COMMAND                CREATED             STATUS                        PORTS               NAMES
d388a1d9fce2        ubuntu:latest             "/bin/bash"            16 minutes ago      Exited (130) 14 minutes ago                       clever_hopper
cd8cf44c24cd        ubuntu:latest             "/bin/bash"            16 hours ago        Exited (-1) 41 minutes ago                        ubuntu
129dac32e556        dougbtv/asterisk:latest   "/bin/sh -c 'asteris   16 hours ago        Exited (0) 16 hours ago                           asterisk
0ffd6237cd27        tutum/mysql:latest        "/run.sh"              3 months ago        Exited (-1) 3 months ago                          angry_pare
4a9570d307c5        stl-mysql:latest          "/bin/sh -c 'mysql -   3 months ago        Exited (1) 3 months ago                           evil_wozniak
9945be3bb4dd        stl-mysql:latest          "/bin/sh -c 'mysql -   3 months ago        Exited (1) 3 months ago                           romantic_turing
2e9bc4317db1        d9a0b1eeff3f              "/bin/sh -c 'cd /con   4 months ago        Exited (1) 4 months ago                           silly_bell
33213e783792        stackbrew/ubuntu:14.04    "/bin/echo 'Hello wo   4 months ago        Exited (0) 4 months ago                           goofy_wozniak
60f0388a2a15        stackbrew/ubuntu:14.04    "/bin/echo 'Hello wo   4 months ago        Exited (0) 4 months ago                           happy_einstein

Из вывода этой команды можно получить информацию, что существует контейнер 0ffd6237cd27 использующий образ tutum/mysql. Это подтверждает ошибку при удалении образа. Надо удалить контейнер с помощью команды docker rm:

$ docker rm 0ffd6237cd27

0ffd6237cd27

А теперь можно спокойно удалить образ tutum/mysql:

$ docker rmi 90952d8d3872

Untagged: tutum/mysql:latest

Если образ приватный, то есть создан с помощью docker build и он отказывается удаляться, то в данной ситуации ничего лучше чем сделать --force удаление не нашел:

$ docker rmi -f 96864a7d2df3

Untagged: stackbrew/ubuntu:14.04

Вот и все по удалению контейнеров и образов. Если есть какие-то вопросы или пожелания, то оставляйте их в комментариях.

comments powered by Disqus