Перевод статьи «Docker Image Guide: How to Remove and Delete Docker Images, Stop Containers and Remove all Volumes».


Docker очень широко применяется в разработке программ. Это отличный инструмент для развертывания приложения в облаке (или в какой-нибудь еще Docker-ready инфраструктуре). Он также пригождается и в локальной разработке. С его помощью вы можете быстро запускать сложные приложения и разрабатывать их изолированно, причем с очень хорошей производительностью.
В этой статье я собрал список самых важных команд для эффективного использования Docker.
Вывод списка всех образов Docker
docker images


У меня есть три образа:
- MySQL в версии 8.0.19 и MySQL в последней версии (с тегом latest),
- а также Cassandra в последней версии.
(Прим. ред: терминологию можно посмотреть во вступительной статье по Docker).
Чтобы получить больше информации об образе, можно воспользоваться следующей командой:
docker inspect mysql:latest


В выводе команды мы получаем список сведений. Альтернативный вариант получения информации — при помощи ID образа:
docker inspect 3a5e53f63281
В выводе команды вы получите очень много всего, поэтому лучше сразу отфильтровать нужную информацию:
docker inspect --format='{{.RepoTags}} {{.Config.Image}}' 3a5e53f63281


Удаление образов Docker
Удалить отдельный образ можно при помощи команды docker rm. Допустим, я хочу удалить образ MySQL:
docker rm mysql:latest


В моем случае еще остается образ с тегом mysql:8.0.19. Таким образом, для полного удаления мне нужно также удалить тег другой версии:
docker rm mysql:8.0.19


Если мы хотим удалить образ напрямую, проще это сделать по id:
docker image rm 3a5e53f63281 -f


Опция -f обеспечивает принудительное выполнение. Если ваш образ имеет больше одного тега, без этой опции вы получите ошибку.
Запуск образа Docker
Чтобы запустить образ, можно воспользоваться следующей командой:
docker run cassandra
Если такого образа у вас нет, он будет загружен. Остановить выполнение команды можно, нажав CTRL+C. Также можно запускать образ в фоне, для этого к команде нужно добавить опцию -d:
docker run -d mysql
Если контейнер запущен в фоне, вы получаете его ID.


По умолчанию контейнер запускается изолированно. То есть, вы не сможете никак коммуницировать с ним или сохранять какие-то файлы в своей текущей директории.
Проброс портов контейнера
При помощи опции -p можно перенаправить порты, например, на страницу, которая открывается из вашего контейнера:
docker run -p 8080:80 nginx
Контейнер NGINX предоставляет веб-сервер через порт 80. При помощи -p 8080:80 локальный порт 8080 перенаправляется на 80-й порт контейнера.
Как залогиниться в контейнере
Иногда возникает необходимость залогиниться в контейнере. Это возможно только в том случае, если в контейнере установлена оболочка. В противном случае вы получите ошибку.
Для начала, запустите отдельный контейнер и дайте ему имя:
docker run -d --name my_container nginx
Команда вернет ID контейнера. Теперь вы можете выполнить оболочку в контейнере и приложить к ней свои входные и выходные данные, используя опции -i и -t:
docker exec -it my_container bash
Вместо имени контейнера для всех дальнейших операций можно также использовать возвращенный ранее идентификатор.
Иногда bash бывает недоступен. Поэтому можно попробовать запустить базовую оболочку:
docker exec -it my_container sh
Вывод списка запущенных контейнеров
После запуска контейнера вы можете найти его в списке всех запущенных контейнеров, для этого воспользуйтесь следующей командой:
docker ps


Если добавить опцию -а, в списке появятся также контейнеры, завершившие исполнение:
docker ps -a


Расшаривание локальной папки, чтобы контейнер мог иметь к ней доступ
Иногда бывает полезным синхронизировать файлы между контейнером и локальной файловой системой. Это можно сделать, воспользовавшись при запуске контейнера опцией -v.
На Linux и macOS можно расшарить локальную временную папку следующим образом:
docker run --name=my_container -d -v $(pwd)/tmp:/var/log/nginx -p 8080:80 nginx
На Windows можно запустить:
docker run --name=my_container -d -v %cd%/tmp:/var/log/nginx -p 8080:80 nginx
Остановка запущенных контейнеров
Запущенный контейнер можно остановить при помощи следующей команды:
docker stop my_container
Остановка контейнера останавливает все процессы, но сохраняет изменения внутри файловой системы.
Запуск остановленного контейнера
Остановленный контейнер можно запустить следующим образом:
docker start my_container
Удаление контейнера
Чтобы удалить остановленный контейнер, выполните:
docker rm my_container
Чтобы остановить и удалить контейнер одной командой, можно добавить опцию -f.
docker rm -f my_container
Создание тома и расшаривание его между несколькими контейнерами
Создаем независимый том (volume) с именем SharedData:
docker volume create --name SharedData docker run --name=my_container -d -v SharedData:/var/log/nginx -p 8080:80 nginx docker run --name=my_container_2 -d -v SharedData:/var/log/nginx -p 8080:80 nginx
Теперь у обоих контейнеров будет общая папка, файлы в которой будут синхронизироваться с обоими контейнерами.
Удаление тома
Чтобы удалить том, нужно сначала удалить все контейнеры, использующие его.
docker rm -f my_container docker rm -f my_container_2 docker volume rm SharedData
Удаление остановленных контейнеров и неиспользуемых образов
Безопасная команда очистки:
docker system prune -a
Удаление всех томов, которые не используются
Все отсоединенные тома можно удалить при помощи следующей команды:
docker system prune
Заключение
Создание контейнеров, вход в них, проброс портов и расшаривание папок это самые важные задачи, осуществляемые при помощи интерфейса командной строки Docker. Выполняемые при этом команды составляют основу таких систем как Kubernetes и позволяют нам создавать и запускать приложения изолированно.
[customscript]techrocks_custom_after_post_html[/customscript]
[customscript]techrocks_custom_script[/customscript]
Образ не удалить командой rm — она для контейнеров. Образ удаляется командой rmi