Руководство по образам Docker: удаление образов, остановка контейнеров и удаление разделов

0
1930
views

Перевод статьи «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 и позволяют нам создавать и запускать приложения изолированно.

ОСТАВЬТЕ ОТВЕТ

Please enter your comment!
Please enter your name here