Docker container remove: docker container rm | Docker Documentation
Как удалить контейнеры-докеры, изображения, тома и сети
Docker позволяет быстро создавать, тестировать и развертывать приложения в качестве переносных самодостаточных контейнеров, которые могут работать практически повсеместно.
Docker не удаляет неиспользуемые объекты, такие как контейнеры, изображения, тома и сети, если вы явно не говорите ему об этом. Когда вы работаете с Docker, вы можете легко накапливать большое количество неиспользуемых объектов, которые потребляют значительное дисковое пространство и загромождают вывод, создаваемый командами Docker.
Это руководство служит «шпаргалкой», чтобы помочь пользователям Docker организовать свою систему и освободить место на диске, удалив неиспользуемые контейнеры, изображения, тома и сети Docker.
Удаление всех неиспользуемых объектов
Команда docker system prune
удалит все остановленные контейнеры, все оборванные изображения и все неиспользуемые сети:
Вам будет предложено продолжить, используйте флаг -f
или --force
чтобы обойти запрос.
WARNING! This will remove:
- all stopped containers
- all networks not used by at least one container
- all dangling images
- all build cache
Are you sure you want to continue? [y/N]
Если вы также хотите удалить все неиспользуемые тома, передайте флаг --volumes
:
docker system prune --volumes
WARNING! This will remove:
- all stopped containers
- all networks not used by at least one container
- all volumes not used by at least one container
- all dangling images
- all build cache
Are you sure you want to continue? [y/N] y
Удаление контейнеров для докеров
Контейнеры-докеры не удаляются автоматически при их остановке, если вы не запускаете контейнер с использованием флага --rm
.
Удаление одного или нескольких контейнеров
Для удаления одного или нескольких изображений Docker используйте команду docker container rm
, за которой следует идентификатор контейнеров, которые вы хотите удалить.
Вы можете получить список всех активных и неактивных контейнеров, передав флаг -a
команде docker container ls
:
Результат должен выглядеть примерно так:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cc3f2ff51cab centos "/bin/bash" 2 months ago Created competent_nightingale
cd20b396a061 solita/ubuntu-systemd "/bin/bash -c 'exec …" 2 months ago Exited (137) 2 months ago systemd
fb62432cf3c1 ubuntu "/bin/bash" 3 months ago Exited (130) 3 months ago jolly_mirzakhani
Как только вы узнаете о контейнерах CONTAINER ID
, которые хотите удалить, перейдите к команде docker container rm
. Например, чтобы удалить первые два контейнера, перечисленных в приведенном выше выпуске, выполните:
docker container rm cc3f2ff51cab cd20b396a061
Если вы получите ошибку, аналогичную приведенной ниже, это означает, что контейнер запущен. Перед удалением контейнера необходимо остановить контейнер.
Error response from daemon: You cannot remove a running container fc983ebf4771d42a8bd0029df061cb74dc12cb174530b2036987575b83442b47. Stop the container before attempting removal or force remove.
Удалить все остановленные контейнеры
Перед выполнением команды удаления вы можете получить список всех неработающих (остановленных) контейнеров, которые будут удалены с помощью следующей команды:
docker container ls -a --filter status=exited --filter status=created
Для удаления всех остановленных контейнеров используйте команду docker container prune
:
Вам будет предложено продолжить, используйте флаг -f
или --force
для обхода запроса.
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Удаление контейнеров с использованием фильтров
Команда docker container prune
позволяет удалять контейнеры на основе условия с использованием флага фильтрации --filter
. На момент написания этой статьи в настоящее время поддерживаются фильтры являются until
и label
. Вы можете использовать несколько фильтров, передавая несколько флагов --filter
.
Например, чтобы удалить все изображения, созданные более 12 часов назад, выполните:
docker container prune --filter "until=12h"
Остановить и удалить все контейнеры
Вы можете получить список всех контейнеров Docker в вашей системе с помощью команды docker container ls -aq
.
Чтобы остановить все запущенные контейнеры, используйте команду docker container stop
, за которой следует список, из всех идентификаторов контейнеров.
docker container stop $(docker container ls -aq)
После остановки всех контейнеров вы можете удалить их, используя команду docker container stop
, за которой следует список идентификаторов контейнеров.
docker container rm $(docker container ls -aq)
Удаление изображений докеров
Удаление одного или нескольких изображений
Чтобы удалить один или несколько изображений Docker, используйте команду docker images ls
, чтобы найти идентификатор изображений, которые вы хотите удалить.
Результат должен выглядеть примерно так:
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 75835a67d134 7 days ago 200MB
ubuntu latest 2a4cca5ac898 2 months ago 111MB
linuxize/fedora latest a45d6dca3361 3 months ago 311MB
java 8-jre e44d62cf8862 3 months ago 311MB
После того как вы расположены изображения , которые вы хотите удалить, передать их IMAGE ID
в команду docker image rm
. Например, чтобы удалить первые два изображения, перечисленные в приведенном выше выводе, выполните:
docker image rm 75835a67d134 2a4cca5ac898
Если вы получили ошибку, аналогичную приведенной ниже, это означает, что изображение используется существующим контейнером. Чтобы удалить изображение, вам нужно сначала удалить контейнер.
Error response from daemon: conflict: unable to remove repository reference "centos" (must force) - container cd20b396a061 is using its referenced image 75835a67d134
Удалить оборванные и неиспользуемые изображения
Docker предоставляет команду docker image prune
, которая может использоваться для удаления оборванных и неиспользуемых изображений.
Оборванное изображение – это изображение, которое не помечено и не используется никаким контейнером. Чтобы удалить висячие изображения, введите:
Вам будет предложено продолжить, используйте флаг -f
или --force
для обхода запроса.
WARNING! This will remove all dangling images.
Are you sure you want to continue? [y/N] y
При удалении оборванных изображений, если созданные вами изображения не помечены, они также будут удалены.
Чтобы удалить все изображения, на которые не ссылается какой-либо существующий контейнер, а не только свисающие, используйте флаг -a
:
WARNING! This will remove all images without at least one container associated to them.
Are you sure you want to continue? [y/N] y
Удаление изображений с использованием фильтров
С помощью команды
docker image prune
вы можете удалить изображения на основе условия, используя флаг фильтрации --filter
. На момент написания этой статьи в настоящее время поддерживаются фильтры являются until
и label
. Вы можете использовать несколько фильтров, передавая несколько флагов --filter
.
Например, чтобы удалить все изображения, созданные более 12 часов назад, выполните:
docker image prune -a --filter "until=12h"
Удаление докеров
Удаление одного или нескольких томов
Чтобы удалить один или несколько тонов Докера, используйте команду docker volume ls
, чтобы найти идентификатор томов, которые вы хотите удалить.
Результат должен выглядеть примерно так:
DRIVER VOLUME NAME
local 4e12af8913af888ba67243dec78419bf18adddc3c7a4b2345754b6db64293163
local terano
Когда вы найдете тома VOLUME NAME
, которые хотите удалить, передайте их команде docker volume rm
. Например, чтобы удалить первый том, указанный в выведенном выше выпуске:
docker volume rm 4e12af8913af888ba67243dec78419bf18adddc3c7a4b2345754b6db64293163
Если вы получили ошибку, аналогичную следующей, это означает, что этот том используется существующим контейнером. Чтобы удалить том, вам нужно сначала удалить контейнер.
Error response from daemon: remove 4e12af8913af888ba67243dec78419bf18adddc3c7a4b2345754b6db64293163: volume is in use - [c7188935a38a6c3f9f11297f8c98ce9996ef5ddad6e6187be62bad3001a66c8e]
Удаление неиспользуемых томов
Чтобы удалить все неиспользуемые тома, используйте команду docker image prune
:
Вам будет предложено продолжить, используйте флаг -f
или --force
для обхода запроса.
WARNING! This will remove all local volumes not used by at least one container.
Are you sure you want to continue? [y/N]
Удаление докерных сетей
Удалите одну или несколько сетей
Чтобы удалить одну или несколько сетей Docker, используйте команду docker network ls
, чтобы найти идентификатор сетей, которые вы хотите удалить.
Результат должен выглядеть примерно так:
NETWORK ID NAME DRIVER SCOPE
107b8ac977e3 bridge bridge local
ab998267377d host host local
c520032c3d31 my-bridge-network bridge local
9bc81b63f740 none null local
После того как вы расположены сети , которые вы хотите удалить, передать их NETWORK ID
в команду docker network rm
. Например, чтобы удалить сеть с именем my-bridge-network
выполните:
docker network rm c520032c3d31
Если вы получите ошибку, аналогичную следующей, это означает, что сеть используется существующим контейнером. Чтобы удалить сеть, сначала необходимо удалить контейнер.
Error response from daemon: network my-bridge-network id 6f5293268bb91ad2498b38b0bca970083af87237784017be24ea208d2233c5aa has active endpoints
Удалить неиспользуемую сеть
Используйте команду docker network prune
для удаления всех неиспользуемых сетей.
Вам будет предложено продолжить, используйте флаг -f
или --force
для обхода запроса.
WARNING! This will remove all networks not used by at least one container.
Are you sure you want to continue? [y/N]
Удаление сетей с использованием фильтров
С помощью команды docker network prune
вы можете удалить сети на основе условия, используя флаг фильтрации --filter
. На момент написания этой статьи в настоящее время поддерживаются фильтры являются until
и label
. Вы можете использовать несколько фильтров, передавая несколько флагов --filter
.
Например, чтобы удалить все сети, созданные более 12 часов назад, запустите:
docker network prune -a --filter "until=12h"
Заключение
В этом руководстве мы показали вам некоторые из общих команд для удаления контейнеров, изображений, томов и сетей Docker.
Если у вас есть какие-либо вопросы, пожалуйста, оставьте комментарий ниже.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Остановить все контейнеры Docker
В Windows cmd
FOR /f «tokens=*» %i IN (‘docker ps -q’) DO docker stop %i
В Windows batch файле
FOR /f «tokens=*» %%i IN (‘docker ps -q’) DO docker stop %%i
В Windows PowerShell
docker ps -q | % { docker stop $_ }
В
Linux
docker stop $(docker ps -aq)
или
sudo docker stop $(sudo docker ps -aq)
docker stop выполняется для всех контейнеров которые выводит команда
docker ps -a
Флаг q нужен для выполнения в фоновом режиме.
Он не является обязательным.
Удалить все контейнеры Docker
Нужно сделать то же самое, но вместо stop выполнить rm
Разберём для
Linux
docker rm $(docker ps -aq)
Альтернативный способ это system prune
docker system prune
WARNING! This will remove:
— all stopped containers
— all networks not used by at least one container
— all dangling images
— all dangling build cache
Are you sure you want to continue? [y/N] y
Deleted Containers:
60136dcc356d794d23aee10d3e6440fd53204ed88ad1c45f9bb70d0f66dd1cc4
85375f0f0e5e3d196ec7b11b4f7834aadee167de6c489ce4bf90b940ddec5ea8
33efc448ad6c67ee7e61336482dd7110a059e0c78d8b0a321f0f192ee26a048e
Deleted Images:
deleted: sha256:409d2b2d3c0b20cfb9556bb1e8c69c6e8e8b6120c3883396a5015f109f3f25cb
deleted: sha256:c26bbf7dc2369c5a9e316dbf6c8c0f79fd81b1dd92d5a4ee343060c96cabebf2
deleted: sha256:fcf59b2324beadaf9fc689bb205bc28915a78da42aee860bbb17bded2c54be13
deleted: sha256:c9952ac8387d7dc94e779d2663120f3e93a61a615b710fd7680f0dde63d0c411
deleted: sha256:7b5a2e67a82fb2512681822bfb4fae0b61c135b55ecc55b8fe0bc41ee7d60b40
deleted: sha256:bbdc7e06675baa525c1a65fbedcc3145f3271d49cf828ecd0f77aed5e31e740d
deleted: sha256:08908b45bd8a5b6340e89d9a401e39a04d4c81c66a75b4fc31528c042632bdf9
deleted: sha256:75ed22a7abbe9c23df78263501d5236b7a1dd9649fba94da3aee59ba277fc2c7
deleted: sha256:30f928cfbca4c67e9c284907b304b73a0804fa19b9d8ff22896c6afb79440638
deleted: sha256:b0573c5f42fec17a41f9633532e4f0c1ce77fc111aaec5fa9293bf3975459396
deleted: sha256:a1b7d51ce64b376af6d3e24f10689f04903f7f6174c07f8515127819c4d464f0
deleted: sha256:28115231ced77eebf1e319aacf77c7373f4845f13aa4fd21864cea5b79b5998f
deleted: sha256:954454106831e933798549935ed4bebb0683ccb0807cb4a0ce69537242418d4f
deleted: sha256:043dfc7ae5ae1671626dc1aa082f66791f8579bdcda25c1ccd9d7938c3a352b1
deleted: sha256:32083ac1bbb41043358d3bdf20d2cf6a2b95ddd583fc5f000e723f9ae508cf46
deleted: sha256:f5578f194936295078b78ff2ba8b14807da8b7df240627f3fb85be07bc69f74d
deleted: sha256:1fb565177c22d167b2f0271608e7c2e5a5868e19b36d30fd707604b4f23f0505
deleted: sha256:a1e12e8d24f2e61e9c73c7c29c23b09130fb119cd9672df7f9a03602c0beac84
deleted: sha256:ea493968f3d604b29a929813490d123a8171f2f8a23c67047866b4ee81d4df0c
deleted: sha256:285e528ab55c765304d41679ae7f9b69265bf954762f51b84379212d532ad6bd
deleted: sha256:b11f4e5c2b7fd12935b558f1c6361def6545574703eda262ca1c812c9e60680c
deleted: sha256:af0157c41f52fcf54e4ca265fb5e121b110b66309cebc8ebab09a44eeca21ad0
deleted: sha256:77a594b76fb550d04d4b5a8c2f82bfb7f3cd5b6ac14ac8ab7550de75eb9b86f1
deleted: sha256:1e11339a7869cee0f3b2dd099dd28e1f1f5f987a01639d3e5866efc1f3879cc5
deleted: sha256:dbfcd0b2c04a3ed04f4d99a2b1e65366b43421207230efb9fc30dac37c677fa8
Total reclaimed space: 177. 4MB
Удалить все образы
Нужно сделать то же самое, но вместо rm выполнить rmi
а вместо ps выполнить images
Разберём для
Linux
docker rmi $(docker images -q)
Команды консольного клиента Docker для работы в терминале.
Для работы с Docker образами и контейнерами предусмотрен консольный клиент docker.
В примерах комманд ниже, будут встречаться подобные скобки [], это означает, что инструкции внутри них имеют опциональный характер и для базового выполнения команды необязательны.
docker —help, docker image ls —help — добавляя ключ —help получаем встроенную справку по командам, ключам, параметрам и т.д.
docker -v -информация об установленной версии Docker.
docker stop $(docker ps -q) -остановка всех запущенных контейнеров.
docker image prune -удаление всех локальных образов.
docker container prune -удаление всех неактивных контейнеров.
docker volume prune -Remove “orphan” volumes
docker stats $(docker ps —format {{.Names}}) -статистика используемых ресурсов запущенных контейнеров.
docker image ls -список всех образов, имеющихся в системе.
docker ps — список запущенных (работающих контейнеров).
docker ps -a — список всех контейнеров имеющихся в текущей системе.
docker container ls -список запущенных (работающих контейнеров).
У команды docker container ls имеются полезные ключи:
- -a -список всех контейнеров в том числе выключенных.
- -l -список последних контейнеров, включая выключенные.
- -n -список последних -n контейнеров, включая выключенные.
- -q -список только идентификаторов контейнеров, отлично подходит для используя на скриптах.
docker search redis -поиск всех образов Docker в реестре (по умолчанию это Docker Hub), которые содержат слово «redis».
docker image pull python -загрузка образа (в даном примере python) из реестра.
docker pull python -загрузка образа (в даном примере python) из реестра.
docker image inspect python -вывод детальной информации об имеющемся в системе образе (в данном случае образ python ).
docker container run [OPTIONS] IMAGE [COMMAND] [ARG…] -общая команда запуска контейнера и выполнения какой либо команды внутри docker-контейнера.
Команда docker container run имеет много опций, часто используются:
- -d запуск контейнера в фоне (отвязывает от текущего терминала).
- -i интерактивный режим. Сохраняет STDIN открытым даже без консоли.
- -t псевдо TTY.
- —rm автоматически удаляет контейнер после окончания (не работает с ключом -d)
- -p проброс портов.
- -v проброс общих volumes.
- —name задать имя контейнеру
docker container run -it —rm —name my_python python bash -пример команды выше. На основе образа python будет создан контейнер с именем my_python и в нем запущена команда bash.
docker run -it nginx bash — будет запущен контейнер на основе образа nginx это произойдет в интерактивном режиме, а внутри контейнера будет запущен bash и будет предоставлен терминал для работы внутри контейнера.
docker run nginx cat /etc/nginx/nginx.conf — пример передачи команды для выполнения внутри контейнера. В текущем случае в консоль будет распечатана базовая конфигурация nginx, имеющаяся в образе nginx.
docker run nginx — будет выполняться команда прописанная по умолчанию внутри образа. Для текущего примера с образом nginx — это запуск веб сервера.
docker run -p 8080:80 nginx — запуск команды по умолчанию внутри контейнера и проброс портов на локальную машину. (здесь напримере образа nginx, внутри запустится сервер на 80 порту, и он станет доступен для взаимодействия на локальной машине на порту 8080. Для проверки в браузере localhost:8080).
docker run -p 80:80 -p 443:443 -d nginx — запуск контейнера на основе образа nginx в фоне и проброс 2-ух портов наружу. Для проверки в браузере localhost:80.
docker container run -it —rm -p «port_host:port_container» python -проброс портов в контейнер. Например -p 8080:80 внутри контейнера изолированный порт 80 будет, а на локальной будет доступен 8080.
docker container run -it —rm -m 512M python — ограничение работы контейнера по оперативной памяти, например -m 512M.
docker container stop my_python -остановка запущенного контейнера с именем my_python.
docker container start my_python -запуск контейнера с именем my_python.
docker exec -it id_container bash — переход в интерактивную командную строку внутрь контейнера.
Общие тома.
docker run -v /var/www/html:/app nginx — проброс содержимого каталога html внутрь контейнера (будут общие файлы и каталоги).
docker container run -v /var/lib/container1:/var ubuntu — аналогично команде выше, создает общий том локальной машины и запускаемого контейнера на основе образа ubuntu.
Логи.
docker logs f45045c3298b — выведет лог событий из контейнера с id = f45045c3298b . список запущенных контейнеров и их id docker ps.
docker logs -f id_container — вывод в режиме реального времени лога событий из контейнера с заданным id.
Запуск контейнера Docker | Losst
Технология Docker набирает всё большую популярность среди разработчиков и DevOps-специалистов в наши дни, поскольку позволяет без особого труда настроить различные окружения один раз, а затем воспроизводить их на, казалось бы, совсем не совместимом оборудовании. Но начнём мы наш цикл статей о Docker с азов.
В сегодняшней статье мы поговорим о создании контейнеров и, соответственно, об их запуске. В Docker контейнер представляет собой окружение для выполнения какого-либо одного процесса. Это изолированная среда, в которой есть всё необходимое для выполнения нужного процесса, и нет ничего лишнего. Создание контейнера Docker выполняется в момент его запуска, и эти процессы запускаются с помощью команды docker run. Давайте сначала рассмотрим её синтаксис и опции.
Содержание статьи:
Синтаксис и опции docker run
Синтаксис команды docker run похож на синтаксис других команд Linux и выглядит следующим образом:
$ docker run опции образ команда
Утилите обязательно надо передать образ, на основе которого будет создан контейнер. Образ может быть локальным или указывать на образ, который надо загрузить из сети. Мы рассмотрим это в примерах ниже. Опции позволяют настроить контейнер и параметры его запуска более детально. Сама команда позволяет переопределить программу, которая выполняется после запуска контейнера. Например, выполнив /bin/bash, вы можете подключится к самому контейнеру.
Рассмотрим основные опции утилиты, которые мы будем использовать. Опций очень много, поэтому я не могу перечислить их все:
- -d — запускает контейнер в фоновом режиме;
- -t — прикрепляет к контейнеру псевдо-TTY-консоль;
- -i — выводит в терминал STDIN поток контейнера;
- —name — имя контейнера, по которому потом можно будет к нему обращаться;
- —dns — устанавливает DNS-серверы для контейнера;
- —network — тип сети для контейнера, может принимать такие значения: bridge (используется по умолчанию), none, host. Также можно передать идентификатор сети Docker, к которой надо подключится;
- —add-host — добавляет строчку в /etc/hosts;
- —restart — указывает, когда надо перезапускать контейнер. Возможные значения: no, on-failure, always, unless-stopped;
- —rm — удаляет контейнер после завершения его работы;
- -m, —memory — количество оперативной памяти, доступное Docker-контейнеру;
- —memory-swap — объём памяти раздела подкачки, доступный в контейнере;
- —cpus — количество ядер процессора, доступных в контейнере;
- —shm-size — размер файла /dev/shm;
- —device — позволяет монтировать устройства из папки /dev в контейнер;
- —entrypoint — позволяет переопределить скрипт, который выполняется при запуске контейнера, перед запуском основной команды;
- —expose — позволяет пробросить несколько портов из контейнера в хост-систему;
- -P — пробрасывает все порты контейнера в хост-систему;
- -p — переносит все порты контейнера в хост-систему без смены номера порта;
- —link — позволяет настроить связь контейнеров Docker;
- -e — добавляет переменную окружения в контейнер;
- -v, —volume — позволяет монтировать папки хоста в контейнер;
- -w — изменяет рабочую директорию контейнера.
Это основные опции, которые мы будем использовать в этой статье, а теперь давайте рассмотрим на примерах, как создать контейнер Docker в Linux.
Создание контейнера Docker
1. Обычный контейнер
Чтобы создать и запустить контейнер с параметрами, заданными в образе по умолчанию, просто запустите команду без параметров. Давайте воспользуемся контейнером hello-world, который как раз для этого и предназначен:
docker run hello-world
После запуска контейнера Docker будет выведено сообщение с приветствием, и процесс в контейнере завершится.
Для поиска уже готовых образов для контейнеров можно использовать веб-сайт DockerHub. Здесь есть образы для большинства дистрибутивов и системных сервисов, таких, как Nginx, Apache, PHP-FPM, PhpMyAdmin и многих других.
Вверху отображается название контейнера, а чуть ниже — доступные версии. При создании контейнера версия записывается через двоеточие. Например, давайте создадим и запустим контейнер с Ubuntu 18.04. Чтобы к контейнеру было легко получить доступ потом, зададим ему имя с помощью опции —name:
docker run --name Ubuntu1804 ubuntu:18.04
2. Подключение к контейнеру
Образ Ubuntu 18.04, на основе которого мы создали контейнер выше, не содержит команды, которая бы постоянно выполнялась, поэтому если вы попытаетесь подключится к нему с помощью команды docker exec, то получите ошибку: You cannot attach to a stopped container, start it first:
docker attach Ubuntu1804
Так происходит потому, что окружение не может работать без основного процесса, для которого и создан контейнер. Пока работает процесс, будет работать и контейнер. Как только процесс завершён, контейнер завершается, и созданный нами ранее контейнер полностью бесполезен. Вы не сможете к нему подключится, потому что он будет падать сразу же после старта, а к упавшему контейнеру подключится нельзя. Его можно удалить:
docker rm Ubuntu1804
А нам надо создать контейнер с командой, которая будет выполняться. Для этого просто передайте команду после имени образа, например /bin/bash. Чтобы контейнер был доступен интерактивно, создавайте его с опциями -i и -t:
docker run -it --name Ubuntu1804 ubuntu:18.04 /bin/bash
Теперь вы в контейнере и можете выполнять действия прямо в изолированном окружении.
3. Переменные окружения
Очень часто для изменения настроек контейнера используются переменные окружения. Вы задаёте какую-нибудь переменную окружения, а затем её значение используется вашей программой в самом контейнере для выполнения различных действий. Для задания переменных окружения используется опция -e. Запуск контейнера Docker:
docker run -it -e "FOO=bar" --name Ubuntu1804_2 ubuntu:18.04 /bin/bash
echo $FOO
4. Монтирование папок и хранилищ
Когда вам нужно, чтобы контейнер мог работать с исходными кодами программы или с часто изменяемыми данными, рекомендую сделать специальную настройку — будет неудобно каждый раз копировать информацию в контейнер. Куда проще примонтировать папку хоста в контейнер, и все изменения исходников будут сразу же доступны в контейнере. Это очень удобно. Для монтирования папки следует передать её опции -v. Например, примонтируем папку ~/test_docker в контейнер:
docker run -it -v "~/test_docker:/mnt" --name Ubuntu1804_3 ubuntu:18.04 /bin/bash
Хранилища позволяют монтировать в контейнер виртуальный диск, который не удаляется при удалении контейнера. Такое хранилище будет автоматически создано, если передать не существующую папку, а имя для нового хранилища:
docker run -it -v docker_volume:/mnt --rm --name Ubuntu1804_4 ubuntu:18.04 /bin/bash
Напоминаю, что опция —rm удаляет контейнер сразу же после того, как он завершит свою работу. Посмотреть список доступных хранилищ можно командой:
docker volume list
5. Порты контейнера
Если вам нужно получить доступ к какому-либо сервису контейнера по порту, например к веб-интерфейсу, этот порт надо пробросить в хост-систему. Для этого используется опция -p. Давайте установим Nginx и пробросим его порт в хост-систему:
docker run --name Nginx -p 8080:80 -d nginx
6. Связывание контейнеров
Связывание контейнеров позволяет настроить взаимодействие между ними. Связанный контейнер будет доступен по сети по его имени. Соответствующая строчка будет автоматически добавлена в файл /etc/hosts контейнера. Для связывания используется опция —link. Чтобы закрепить знания, полученные выше, давайте создадим контейнер с базой данных MySQL, а затем свяжем его с PhpMyAdmin.
Сначала создаём контейнер MySQL с постоянным хранилищем в /var/lib/mysql. В переменных окружения ему надо передать пароль суперпользователя. Какие переменные окружения ожидает получить контейнер — эту информацию обычно можно найти на странице контейнера на DockerHub. Используйте опцию -d, чтобы контейнер запустился в фоновом режиме:
docker run -v mysql_volume:/var/lib/mysql --name MySQL -e MYSQL_ROOT_PASSWORD=passwd -d mysql:8.0
Затем создаём контейнер с PhpMyAdmin для доступа к этой базе данных и связываем с ним контейнер MySQL под именем db:
docker run --name PhpMyAdmin -d --link MySQL:db -p 8080:80 phpmyadmin/phpmyadmin
Также здесь мы пробрасываем порт 80 в хост-систему, чтобы получить доступ к веб-интерфейсу. Теперь можно проверять в браузере. Всё работает.
7. Сеть для контейнеров
Контейнеры можно не связывать. Если надо объединить три и больше контейнеров между собой, то куда удобнее сразу связать их в одну общую сеть, чем создавать множество подключений для каждого из этих контейнеров. Все объекты в одной сети будут иметь доступ к друг другу по их имени. Сначала необходимо создать сеть:
docker network create -d bridge docker_network
Посмотреть список созданных сетей можно командой:
docker network list
Теперь можно её использовать. Объединим с помощью сети наш MySQL- и PhpMyAdmin-сервера. Для этого надо их остановить и удалить:
docker stop MySQL
docker stop PhpMyAdmin
docker rm MySQL
docker rm PhpMyadmin
Затем создаём:
docker run -v mysql_volume:/var/lib/mysql --network docker_network --name MySQL -e MYSQL_ROOT_PASSWORD=passwd -d mysql:8.0
А для PhpMyAdmin теперь надо передать хост, на котором расположена база данных в переменной окружения PMA_HOST:
docker run --name PhpMyAdmin -d --network docker_network -e PMA_HOST=MySQL -p 8080:80 phpmyadmin/phpmyadmin
Выводы
В этой статье мы рассмотрели, как запустить контейнер Docker и настроить его параметры. Как видите, Docker может быть очень полезным для быстрого разворачивания рабочих окружений. Но редко для этих целей используют саму команду docker run. Обычно используется инструмент docker-compose. Интересно ли вам прочитать об этом инструменте? Напишите в комментариях!
docker run
Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
Run a command in a new container
Options:
--add-host value Add a custom host-to-IP mapping (host:ip) (default [])
-a, --attach value Attach to STDIN, STDOUT or STDERR (default [])
--blkio-weight value Block IO (relative weight), between 10 and 1000
--blkio-weight-device value Block IO weight (relative device weight) (default [])
--cap-add value Add Linux capabilities (default [])
--cap-drop value Drop Linux capabilities (default [])
--cgroup-parent string Optional parent cgroup for the container
--cidfile string Write the container ID to the file
--cpu-percent int CPU percent (Windows only)
--cpu-period int Limit CPU CFS (Completely Fair Scheduler) period
--cpu-quota int Limit CPU CFS (Completely Fair Scheduler) quota
-c, --cpu-shares int CPU shares (relative weight)
--cpuset-cpus string CPUs in which to allow execution (0-3, 0,1)
--cpuset-mems string MEMs in which to allow execution (0-3, 0,1)
-d, --detach Run container in background and print container ID
--detach-keys string Override the key sequence for detaching a container
--device value Add a host device to the container (default [])
--device-read-bps value Limit read rate (bytes per second) from a device (default [])
--device-read-iops value Limit read rate (IO per second) from a device (default [])
--device-write-bps value Limit write rate (bytes per second) to a device (default [])
--device-write-iops value Limit write rate (IO per second) to a device (default [])
--disable-content-trust Skip image verification (default true)
--dns value Set custom DNS servers (default [])
--dns-opt value Set DNS options (default [])
--dns-search value Set custom DNS search domains (default [])
--entrypoint string Overwrite the default ENTRYPOINT of the image
-e, --env value Set environment variables (default [])
--env-file value Read in a file of environment variables (default [])
--expose value Expose a port or a range of ports (default [])
--group-add value Add additional groups to join (default [])
--health-cmd string Command to run to check health
--health-interval duration Time between running the check
--health-retries int Consecutive failures needed to report unhealthy
--health-timeout duration Maximum time to allow one check to run
--help Print usage
-h, --hostname string Container host name
-i, --interactive Keep STDIN open even if not attached
--io-maxbandwidth string Maximum IO bandwidth limit for the system drive (Windows only)
(Windows only). The format is `<number><unit>`.
Unit is optional and can be `b` (bytes per second),
`k` (kilobytes per second), `m` (megabytes per second),
or `g` (gigabytes per second). If you omit the unit,
the system uses bytes per second.
--io-maxbandwidth and --io-maxiops are mutually exclusive options.
--io-maxiops uint Maximum IOps limit for the system drive (Windows only)
--ip string Container IPv4 address (e.g. 172.30.100.104)
--ip6 string Container IPv6 address (e.g. 2001:db8::33)
--ipc string IPC namespace to use
--isolation string Container isolation technology
--kernel-memory string Kernel memory limit
-l, --label value Set meta data on a container (default [])
--label-file value Read in a line delimited file of labels (default [])
--link value Add link to another container (default [])
--link-local-ip value Container IPv4/IPv6 link-local addresses (default [])
--log-driver string Logging driver for the container
--log-opt value Log driver options (default [])
--mac-address string Container MAC address (e.g. 92:d0:c6:0a:29:33)
-m, --memory string Memory limit
--memory-reservation string Memory soft limit
--memory-swap string Swap limit equal to memory plus swap: '-1' to enable unlimited swap
--memory-swappiness int Tune container memory swappiness (0 to 100) (default -1).
--name string Assign a name to the container
--network-alias value Add network-scoped alias for the container (default [])
--network string Connect a container to a network
'bridge': create a network stack on the default Docker bridge
'none': no networking
'container:<name|id>': reuse another container's network stack
'host': use the Docker host network stack
'<network-name>|<network-id>': connect to a user-defined network
--no-healthcheck Disable any container-specified HEALTHCHECK
--oom-kill-disable Disable OOM Killer
--oom-score-adj int Tune host's OOM preferences (-1000 to 1000)
--pid string PID namespace to use
--pids-limit int Tune container pids limit (set -1 for unlimited)
--privileged Give extended privileges to this container
-p, --publish value Publish a container's port(s) to the host (default [])
-P, --publish-all Publish all exposed ports to random ports
--read-only Mount the container's root filesystem as read only
--restart string Restart policy to apply when a container exits (default "no")
Possible values are : no, on-failure[:max-retry], always, unless-stopped
--rm Automatically remove the container when it exits
--runtime string Runtime to use for this container
--security-opt value Security Options (default [])
--shm-size string Size of /dev/shm, default value is 64MB.
The format is `<number><unit>`. `number` must be greater than `0`.
Unit is optional and can be `b` (bytes), `k` (kilobytes), `m` (megabytes),
or `g` (gigabytes). If you omit the unit, the system uses bytes.
--sig-proxy Proxy received signals to the process (default true)
--stop-signal string Signal to stop a container, SIGTERM by default (default "SIGTERM")
--storage-opt value Storage driver options for the container (default [])
--sysctl value Sysctl options (default map[])
--tmpfs value Mount a tmpfs directory (default [])
-t, --tty Allocate a pseudo-TTY
--ulimit value Ulimit options (default [])
-u, --user string Username or UID (format: <name|uid>[:<group|gid>])
--userns string User namespace to use
'host': Use the Docker host user namespace
'': Use the Docker daemon user namespace specified by `--userns-remap` option.
--uts string UTS namespace to use
-v, --volume value Bind mount a volume (default []). The comma-delimited
`options` are [rw|ro], [z|Z],
[[r]shared|[r]slave|[r]private], and
[nocopy]. The 'host-src' is an absolute path
or a name value.
--volume-driver string Optional volume driver for the container
--volumes-from value Mount volumes from the specified container(s) (default [])
-w, --workdir string Working directory inside the container
Команда docker run
создает записываемый слой поверх контейнера указанного образа, а задам запускает его используя заданную команду. То есть,
docker run
эквивалентна вызову API /containers/create
, а затем
/containers/(id)/start
. Остановленный контейнер может быть перезапущен со всеми предыдущими изменениями с помощью команды docker start
. Что бы посмотреть список контейнеров выполните команду docker ps -a
.
Примеры
Присвоение имени и псевдо-TTY (—name, -it)
$ docker run --name test -it debian
root@d6c0fe130dba:/# exit 13
$ echo $?
13
$ docker ps -a | grep test
d6c0fe130dba debian:7 "/bin/bash" 26 seconds ago Exited (13) 17 seconds ago test
Этот пример запускает контейнер с названиемtest
из образа debian:latest
. Флаг -it
говорит Docker создать псевдно-TTY подключение к STDIN контейнера и создать интерактивную bash
оболочку в контейнере. В этом примере, оболочка bash
завершается вводом exit 13
. Этот код выхода передается вызвавшей его docker run
, и записывается в метаданные контейнера test
.
Захват ID контейнера (—cidfile)
$ docker run --cidfile /tmp/docker_test.cid ubuntu echo "test"
Эта команда создает контейнер и выводит test
в консоли. Флаг cidfile
указывает Docker создать новый файл и записать в него ID контейнера.
Если файл уже существует, Docker вернет ошибку. Docker закроет данный файл когда docker run
завершится.
Полный набор привилегий для контейнера (—privileged)
$ docker run -t -i --rm ubuntu bash
root@bc338942ef20:/# mount -t tmpfs none /mnt
mount: permission denied
Данный пример не будет работать, поскольку по умолчанию наиболее потенциально опасные возможности ядра отключены; в том числе cap_sys_admin
(что необходимо для монтирования файловых систем). Тем не менее, флаг --privileged
позволяет выполнить команду:
$ docker run -t -i --privileged ubuntu bash
root@50e3f57e16e6:/# mount -t tmpfs none /mnt
root@50e3f57e16e6:/# df -h
Filesystem Size Used Avail Use% Mounted on
none 1.9G 0 1.9G 0% /mnt
Флаг--privileged
дает все привелегии контейнеру, а также снимает все ограничения контроллера cgroup. Другими словами, контейнер может совершать все действия доступные хосту. Этот флаг существует для решения специфических ситуация, таких как запуск Docker в Docker.
Установка рабочего каталога (-w)
$ docker run -w /path/to/dir/ -i -t ubuntu pwd
Флаг -w
позволяет выполнить команду внутри указанного пути
/path/to/dir/
. Если путь внутри контейнера не существует он будет создан.
Опции драйвера хранилища для контейнера
$ docker run -it --storage-opt size=120G fedora /bin/bash
Данная опция позволяет задать размер корневой файловой системы при создании контейнера равный 120G. Пользователь не может задать размер меньше чем умолчанию. Эта опция доступна только для драйверов devicemapper
, btrfs
и zfs
.
Монтирование временного файлового хранилища (—tmpfs)
$ docker run -d --tmpfs /run:rw,noexec,nosuid,size=65536k my_image
Флаг --tmpfs
монтирует пустое временное файловое хранилище (tmpfs) в контейнер с опциями rw
, noexec
, nosuid
, size=65536k
.
Монтирование томов данных (-v, —read-only)
$ docker run -v `pwd`:`pwd` -w `pwd` -i -t ubuntu pwd
Флаг -v
монтирует текущий рабочий каталог в контейнер. Флаг -w
дает указание на выполнение команды внутри текущего рабочего каталога, путем изменения каталога на значение возвращаемое командой pwd
. Таким образом, эта комбинация выполняет команду, используя контейнер, но внутри текущей рабочей директории.
$ docker run -v /doesnt/exist:/foo -w /foo -i -t ubuntu bash
Если директория монтируемая в качестве хранилища не существует, Docker
автоматически создает ее. В приведенном выше примере, Docker создаст каталог /doesnt/exist
перед запуском контейнера.
$ docker run --read-only -v /icanwrite busybox touch /icanwrite/here
Хранилища могут быть использованы в комбинации с --read-only
для отслеживания куда контейнер производит запись в файлы. Флаг --read-only
монтирует корневую файловую систему контейнера с правами только для чтения.
$ docker run -t -i -v /var/run/docker.sock:/var/run/docker.sock -v /path/to/static-docker-binary:/usr/bin/docker busybox sh
Открытие или выставление портов (-p, —expose)
$ docker run -p 127.0.0.1:80:8080 ubuntu bash
$ docker run --expose 80 ubuntu bash
Команда выставляет 80
порт контейнера без открытия порта на хосте.
Задание переменных окружения (-e, —env, —env-file)
$ docker run -e MYVAR1 --env MYVAR2=foo --env-file ./env.list ubuntu bash
Команда задает простые (не массивы) переменные окружения в контейнере. В вышеприведенном примере собраны все три флага для примера. Где -e
, --env
принимают переменную окружения и ее значение, если =
не используется, то текущее значение переменной устанавливается через export
, то есть. $MYVAR1
из хоста устанавливается в $MYVAR1
в контейнере. В случае если =
не задано и переменная не определена на хосте, то она будет удалена из списка переменных окружения контейнера. Все три флага, -e
, --env
и
--env-file
могут быть использованы несколько раз.
Не смотря на порядок флагов, первым обрабатывается --env-file
, а затем флаги -e
и --env
. Таким образом флаг -e
или --env
заменит
переменные при необходимости.
$ cat ./env.list
TEST_FOO=BAR
$ docker run --env TEST_FOO="This is a test" --env-file ./env.list busybox env | grep TEST_FOO
TEST_FOO=This is a test
Флаг --env-file
получает в качестве аргумента имя файла в котором каждая строка должна быть в формате VAR=VAL
, имитируя аргумент передаваемый в --env
. Комментарии должны начинаться с #
Пример файла передаваемого в --env-file
$ cat ./env.list
TEST_FOO=BAR
# this is a comment
TEST_APP_DEST_HOST=10.10.0.127
TEST_APP_DEST_PORT=8888
_TEST_BAR=FOO
TEST_APP_42=magic
helloWorld=true
123qwe=bar
org.spring.config=something
# pass through this variable from the caller
TEST_PASSTHROUGH
$ TEST_PASSTHROUGH=howdy docker run --env-file ./env.list busybox env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=5198e0745561
TEST_FOO=BAR
TEST_APP_DEST_HOST=10.10.0.127
TEST_APP_DEST_PORT=8888
_TEST_BAR=FOO
TEST_APP_42=magic
helloWorld=true
TEST_PASSTHROUGH=howdy
HOME=/root
123qwe=bar
org.spring.config=something
$ docker run --env-file ./env.list busybox env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=5198e0745561
TEST_FOO=BAR
TEST_APP_DEST_HOST=10.10.0.127
TEST_APP_DEST_PORT=8888
_TEST_BAR=FOO
TEST_APP_42=magic
helloWorld=true
TEST_PASSTHROUGH=
HOME=/root
123qwe=bar
org.spring.config=something
Установка метаданных контейнера (-l, —label, —label-file)
Метка представляет из себя пару key=value
которая применяет метаданные к контейнеру. Что бы пометить контейнер двумя метками можно выполнить команду:
$ docker run -l my-label --label com.example.foo=bar ubuntu bash
Ключ my-label
не имеет заданного значения по этому будет присвоено значение по умолчанию (""
). Для добавления нескольких меток, просто используйте нужное число раз флаг метки (-l
или --label
).
Ключи в парах меток key=value
должны быть уникальными для избежания замены значений. Если вы задали несколько меток с одинаковыми ключами и разными значениями, каждое последующее значение будет заменять предыдущее. Docker использует последнее заданное вами значение key=value
.
Используйте флаг --label-file
для загрузки множества меток из файла. Каждая метка должна начинаться с новой строки. В приведенном ниже примере метки загружаются из файла находящегося в том же каталоге:
$ docker run --label-file ./labels ubuntu bash
Формат файла меток похож на формат файла для загрузки переменных окружения. Метки не видны для процессов запущенных внутри контейнера. Следующий пример демонстрирует формат файла меток:
com.example.label1="a label"
# this is a comment
com.example.label2=another\ label
com.example.label3
Вы можете загрузить несколько файлов с метками использовав несколько раз флаг --label-file
.
Подключение контейнера к сети (—network)
Когда вы запускаете контейнер используйте флаг --network
для подключения контейнера к сети. Команда ниже добавляет контейнер busybox
к сети my-net
.
$ docker run -itd --network=my-net busybox
Вы так же можете указать IP адрес для контейнера в пользовательской сети при запуске с помощью флагов --ip
и --ip6
.
$ docker run -itd --network=my-net --ip=10.10.9.75 busybox
Если вы хотите добавить запущенный контейнер к сети используйте команду docker network connect
.
Вы можете подключить несколько контейнеров к одной сети. Будучи подключенными, контейнеры могут легко взаимодействовать для этого достаточно знать IP адрес контейнера или имя. Для overlay
сетей или кастомных плагинов поддерживающих мульти-хост подключения, контейнеры подключенные к этой же мульти-хост сети но запущенные другим демоном также могут взаимодействовать этим способом.
Примечание: Обнаружение служб недоступно в сетях типа bridge по умолчанию. Контейнеры могут обмениваться данными по их IP-адресам по умолчанию. Для подключения по имени, они должны быть связаны между собой.
Вы можете отключить контейнер от сети с помощью команды docker network disconnect
.
Монтирование томов из контейнера (—volumes-from)
$ docker run --volumes-from 777f7dc92da7 --volumes-from ba8c0c54f0f2:ro -i -t ubuntu pwd
Флаг --volumes-from
монтирует все тома из указанного контейнера. Можно перенести тома из нескольких контейнеров с помощью повторения флага --volumes-from
. ID контейнера может быть дополнен суффиксами :ro
или :rw
для монтирования томов в режиме только для чтения или чтения-записи. По умолчанию, тома монтируются в том же режиме в котором они были смонтированы на родительском контейнере.
Системы использующие метки, такие как SELinux требуют что бы соответствующие метки были размещены в содержимом томов смонтированных в контейнер. Без метки, система безопасности может блокировать процессы запущенные внутри контейнера и пытающиеся получить доступ к данным из тома. По умолчанию Docker не меняет метки установленные ОС.
Для изменения метки контекста контейнера, вы можете добавить один из двух суффиксов :z
или :Z
к монтируемому тому. Эти суффиксы говорят Docker переразметить объекты файлов на общих томах. Опция z
указывает Docker что два контейнера разделяют содержимое тома. В результате, Docker метит контент общей меткой. Метка общего тома позволяет всем контейнерам производит чтение/запись контента. Опция Z
говорит Docker пометить контент приватной меткой.
Только текущий контейнер может использовать приватный том.
Подключение к STDIN/STDOUT/STDERR (-a)
Флаг -a
сообщает команде docker run
подключится к STDIN
, STDOUT
или STDERR
контейнера. Это делает возможным манипулировать вводом/выводом.
$ echo "test" | docker run -i -a stdin ubuntu cat -
Приведенная в примере выше команда отправляет данные в контейнер и выводит его ID подключаясь только к его STDIN
.
$ docker run -a stderr ubuntu echo test
Команда выше не будет выводить ничего, если не происходит ошибок, по тому что мы подключились к STDERR
контейнера. Логи контейнера по прежнему будут записывать то что выводится в STDERR
и STDOUT
.
$ cat somefile | docker run -i -a stdin mybuilder dobuild
В этом примере показано как можно передать файл в контейнер для сборки.
ID контейнера будет выведен после окончания сборки, логи сборки можно просмотреть командой docker logs
. Это полезно если вам нужно передать файл или что-то еще в контейнер и получить ID контейнера после того как контейнер закончит работу.
Добавление устройств к контейнеру (—device)
$ docker run --device=/dev/sdc:/dev/xvdc --device=/dev/sdd --device=/dev/zero:/dev/nulo -i -t ubuntu ls -l /dev/{xvdc,sdd,nulo}
brw-rw---- 1 root disk 8, 2 Feb 9 16:05 /dev/xvdc
brw-rw---- 1 root disk 8, 3 Feb 9 16:05 /dev/sdd
crw-rw-rw- 1 root root 1, 5 Feb 9 16:05 /dev/nulo
Часто бывает нужно подключить устройство прямо к контейнеру. Опция --device
позволяет это сделать. Например, дисковый накопитель или аудио устройство может быть добавлено в непривилегированный контейнер
(т.е. без флага --privileged
) и приложение будет иметь прямой доступ к устройству.
По умолчанию, контейнер будет иметь права на read
, write
и mknod
. Вы можете изменить права задав их в виде опций :rwm
для флага --device
:
$ docker run --device=/dev/sda:/dev/xvdc --rm -it ubuntu fdisk /dev/xvdc
Command (m for help): q
$ docker run --device=/dev/sda:/dev/xvdc:r --rm -it ubuntu fdisk /dev/xvdc
You will not be able to write the partition table.
Command (m for help): q
$ docker run --device=/dev/sda:/dev/xvdc:rw --rm -it ubuntu fdisk /dev/xvdc
Command (m for help): q
$ docker run --device=/dev/sda:/dev/xvdc:m --rm -it ubuntu fdisk /dev/xvdc
fdisk: unable to open /dev/xvdc: Operation not permitted
Примечание:
--device
не может безопасно использовать виртуальные устройства. Блочные устройства которые могут быть удалены не могут быть добавлены к ненадежному контейнеру с помощью--device
.
Политики перезапуска (—restart)
Используйте флаг --restart
для задания политики перезапуска контейнера. Политика перезапуска указывает будет ли Docker демон перезапускать контейнер после его завершения. Docker поддерживает следующие политики перезапуска:
Значение | Результат |
---|---|
no |
Не перезапускать контейнер после завершения. Это значение по умолчанию. |
on-failure[:max-retries] |
Перезапускает контейнер если он завершился с не нулевым статусом. Опционально можно указать количество попыток перезапуска. |
always |
Всегда перезапускает контейнер в не зависимости от статуса завершения. Когда вы выбираете данный вариант, Docker демон будет пытаться перезапустить контейнер бесконечное число раз. Также контейнер будет всегда запускаться при запуске демона, не зависимо от текущего состояния контейнера. |
unless-stopped |
Всегда перезапускает контейнер не зависимо от статуса завершения, но не контейнер не будет запускаться при запуске демона, если контейнер до этого был остановлен вручную. |
$ docker run --restart=always redis
Этот пример будет запускать контейнер redis
с политикой перезапуска always, то есть если контейнер завершается, Docker перезапустит его.C— docker ping statistics —
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max/stddev = 7.600/19.152/30.705/11.553 ms
Иногда бывает нужно подключиться к Docker хосту из контейнера. Для этого, передайте IP адрес Docker хоста в контейнер с помощью флага --add-host
. Для получения адреса хоста выполните команду ip addr show
.
Флаги передаваемые в ip addr show
зависят от того какую версию протокола вы используете в контейнерах IPv4 или IPv6. Используйте следующие флаги для получения сетевого адреса IPv4 и сетевой картой eth0
:
$ HOSTIP=`ip -4 addr show scope global dev eth0 | grep inet | awk '{print \$2}' | cut -d / -f 1`
$ docker run --add-host=docker:${HOSTIP} --rm -it debian
Для IPv6 используйте флаг -6
вместо -4
. Для других сетевых устройств, замените eth0
корректным именем устройства (к примеру docker0
для сетевого моста).
Установка ulimits в контейнере (—ulimit)
Поскольку установка ulimit
параметров в контейнере требует дополнительных привилегий не доступных в контейнере по умолчанию, вы можете задать их с помощью флага --ulimit
.
--ulimit
задает мягкое и жесткое ограничение:
<type>=<soft limit>[:<hard limit>]
, например:
$ docker run --ulimit nofile=1024:1024 --rm debian sh -c "ulimit -n"
1024
Примечание:
Если вы не задалиhard limit
, тоsoft limit
будет использован в качестве обоих значений. Еслиulimits
не задан, то значения будут унаследованы из заданных по умолчаниюulimits
для демона. Опцияas
в настоящий момент отключена и следующая команда не будет выполнена:
$ docker run -it --ulimit as=1024 fedora /bin/bash
Значения отправляются в том же виде в котором будут установлены syscall
.
Докер не выполняет преобразование байтов. Это следует учитывать при установке значения.
Использование nproc
Будьте осторожны задавая nproc
вместе с флагом ulimit
, поскольку nproc
разработан в Linux для задания максимального числа процессов доступных пользователю, а не контейнеру. К примеру, запустим четыре контейнера от пользователя daemon
:
docker run -d -u daemon --ulimit nproc=3 busybox top
docker run -d -u daemon --ulimit nproc=3 busybox top
docker run -d -u daemon --ulimit nproc=3 busybox top
docker run -d -u daemon --ulimit nproc=3 busybox top
Четвертый контейнер завершиться с ошибкой “[8] System error: resource temporarily unavailable”. Ошибка происходит по тому что при запуске было установлено значение nproc=3
, в результате первые три контейнера использовали квоту в 3 процесса для пользователя daemon
.
Остановка контейнера по сигналу (—stop-signal)
Флаг --stop-signal
задает сигнал системного вызова, который будет отправлен в контейнер для выхода. Этот сигнал может быть натуральным числом, соответствующим позиции в таблице системных вызовов ядра, например, 9 или имя сигнала в формате SIGNAME, например, SIGKILL.
Задание технологии изоляции контейнера (—isolation)
Эта опция полезна в тех случаях когда вы запускаете Docker контейнеры на
Microsoft Windows. Опция --isolation <value>
задает технологию изоляции контейнера. В Linux, поддерживается только опция default
которая использует пространство имен
Linux. Эти две команды эквивалентны в Linux:
$ docker run -d busybox top
$ docker run -d --isolation default busybox top
В Microsoft Windows, может принимать любое из следующих значений:
Значение | Описание |
---|---|
default | Используйте значение указанное Docker демоном --exec-opt . Если демон не определяет технологию изоляции, Microsoft Windows использует process как значение по умолчанию. |
process | Изоляция в пространстве имен. |
hyperv | Изоляция на основе Hyper-V разделов. |
В Windows, изоляция по умолчанию для клиента hyperv
и для сервера process
. По этому при работе демона на Windows server без задания опции, эти две команды эквивалентны:
$ docker run -d --isolation default busybox top
$ docker run -d --isolation process busybox top
Если вы указали опцию --exec-opt isolation=hyperv
в Docker демоне запущенном на Windows server, обе команды будут использовать hyperv
изоляцию:
$ docker run -d --isolation default busybox top
$ docker run -d --isolation hyperv busybox top
Настройка пространства имен параметров ядра (sysctls) при запуске
Опция --sysctl
устанавливает пространства имен параметров ядра (sysctls) в контейнере. К примеру, для запуска IP-переадресации в контейнерах
сетевого пространства имен, выполните команду:
$ docker run --sysctl net.ipv4.ip_forward=1 someimage
Примечание: Не все параметры ядра имеют пространство имен. Docker не поддерживает изменение параметров ядра внутри контейнера, который модифицирует хост-систему. По мере развития ядра мы ожидаем увидеть больше параметров ядра в пространстве имен.
Поддерживаемые параметры ядра
kernel.msgmax, kernel.msgmnb, kernel.msgmni, kernel.sem, kernel.shmall, kernel.shmmax, kernel.shmmni, kernel.shm_rmid_forced
Параметры ядра начинающиеся с fs.mqueue.*
Если вы используете опцию --ipc=host
следующие параметры ядра не доступны.
Network Namespace
:
Параметры ядра начинающиеся с.*
Если вы используете опцию --network=host
следующие параметры ядра будут не доступны.
Комментарии:
Комментариев нет, желаете стать первым?
Остановить и удалить все Docker контейнеры
Февраль7
Последнее время в среде программистов и тестировщиков стал популярен Docker. Чаще всего его используют для разработки.
Что делать, если понадобилось удалить с компьютера Docker контейнеры. Как это сделать самым простым способом?
Смотрим список всех контейнеров Docker
~$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
ubuntu latest d65e68e6cc7c 8 weeks ago 187.9 MB
nginx/official latest 32936ce9d754 5 months ago 16.4 MB
mysql latest 8c90d670d8c1 20 months ago 93.9 MB
Сначала удалим один любой контейнер. Например nginx/official.
~$ sudo docker rmi 32936ce9d754
Error response from daemon: Conflict, cannot delete 32936ce9d754 because the container ad41f0d8bed4 is using it, use -f to force
FATA[0000] Error: failed to remove one or more images
~$ sudo docker rmi -f 32936ce9d754
Untagged: nginx/official:latest
Deleted: 456367e93724f55b133bd20bd886f387beaae420c5ffef8e9f8388b9e39ed4ca
Deleted: a1edaad25e21c258b532c678b3b582f38e82b161655ebe249c1e13e1e16383ab
Deleted: 44e7c4c4db2f148ff697562b15330fd7a18d7d915bb90f97ef7d1e12fc44e526
Deleted: 7325a2153bd642f7bb629206086e99a479df72eac25c485a09c94500861d43a6
Deleted: a2764315d1c32a31f25a37dbd7c70def8e6847725d34adc93ce4d56f2e2acd28
Deleted: 1eef97e7200a2ae40343da9ec62e6e0cffbecbe8d23abc0418252f471fc63e34
Deleted: 6c37a0ec84ec524c6df4629d7724c9023e4d079ad817511516b558eb30d14d9a
Deleted: b54da45fe14971f425c9a6c1e48acc55cd29507e6b849b93c33b15be3fe08a7b
Deleted: ea854c9b01867648a1bfccab89aee285d333b26dbd8bff7643f3846fd72e2762
Deleted: 4a5e6db8c0693a16de88b7559ded7c1cb804018571b137e13abb1713ce6a71cf
Deleted: 1c49f83e0b13f73bf3d276c9fe56ba9aa94d2a1614e866642b95cb0545d0cdab
Если у нас много контейнеров, то можно удалить их массово.
Остановить все Docker контейнеры.
# docker stop $(docker ps -a -q)
Удалить все Docker контейнеры
# docker rm $(docker ps -a -q)
Опция –q (–quiet) — дает возможность узнавать идентификаторы самих контейнеров с утилитой ps.
Другие статьи
Метки: docker
Copyright © 2013-2017. All rights reserved.
докер пм | Документация Docker
Описание
Удалить один или несколько контейнеров
Использование
docker rm [ОПЦИИ] КОНТЕЙНЕР [КОНТЕЙНЕР ...]
Примеры использования этой команды см. В разделе примеров ниже.
Опции
Сокращенное наименование | По умолчанию | Описание |
- усилие, -f | Принудительно удалить работающий контейнер (использует SIGKILL) | |
--ссылка, -l | Убрать указанную ссылку | |
- объемы, -v | Удалить анонимные тома, связанные с контейнером |
Примеры
Удалить емкость
Это удаляет контейнер, указанный по ссылке / redis
.
$ докер rm / redis
/ redis
Удалить ссылку, указанную с помощью --link
в сети моста по умолчанию
Это удаляет базовую ссылку между / webapp
и / redis
контейнеры в мостовой сети по умолчанию, удаляя все сетевые коммуникации
между двумя контейнерами. Это не применяется, когда --link
используется с
сети, указанные пользователем.
$ docker rm - ссылка / webapp / redis
/ webapp / redis
Снять с силой работающий контейнер
Эта команда принудительно удаляет работающий контейнер.
$ docker rm --force redis
Redis
Главный процесс внутри контейнера, на который есть ссылка по ссылке , redis
получит
SIGKILL
, контейнер будет удален.
Удалить все остановленные контейнеры
$ docker rm $ (докер ps -a -q)
Эта команда удаляет все остановленные контейнеры. Команда
docker ps -a -q
выше возвращает все существующие идентификаторы контейнеров и передает их в
команда rm
, которая их удаляет.Работающие контейнеры не удаляются.
Снять тару и ее объемы
$ docker rm -v redis
Redis
Эта команда удаляет контейнер и все связанные с ним тома.
Обратите внимание: если том был указан с именем, он не будет удален.
Удалить контейнер и выборочно удалить объемы
$ docker create -v awesome: / foo -v / bar --name hello redis
Здравствуйте
$ docker rm -v привет
В этом примере том для / foo
остается неизменным, но том для
/ бар
удаляется.Такое же поведение справедливо для томов, унаследованных от
- объемы - от
.
Родительская команда
Команда | Описание |
---|---|
докер | Базовая команда для Docker CLI. |
Как остановить и удалить работающий контейнер по идентификатору или имени? — thispointer.com
В этой статье мы обсудим, как остановить и удалить работающий контейнер с помощью фильтрации по идентификатору и имени.
Чтобы полностью удалить работающий контейнер, сначала мы должны остановить его, а затем удалить.
Как остановить работающий докер-контейнер?
Предположим, у нас есть работающий контейнер со статусом «ВВЕРХ», т. Е.
ИДЕНТИФИКАТОР КОНТЕЙНЕРА ИДЕНТИФИКАЦИЯ ИЗОБРАЖЕНИЯ КОМАНДА СОЗДАНО СОСТОЯНИЕ ИМЕНА ПОРТОВ d857536373e3 centos "/ bin / bash" 3 минуты назад вверх на 3 минуты musing_bose
Чтобы остановить работающий контейнер, нам нужно передать идентификатор или имя контейнера, чтобы остановить команду i.е.
docker stop <идентификаторы контейнеров | имена контейнеров>
Теперь остановим вышеупомянутый работающий контейнер по идентификатору контейнера, то есть
docker stop d857536373e3
В качестве альтернативы, чтобы остановить контейнер, мы также можем передать имя контейнера, например,
docker stop musing_bose
Обе приведенные выше команды остановят работающий контейнер, но контейнер еще не удален из системы. Он все еще существует в системе и имеет статус « Завершено, ». Давайте возьмем список всех контейнеров, чтобы проверить статус остановленного контейнера i.е.
докер ps -a
Выход:
КОНТЕЙНЕР ИДЕНТИФИКАЦИЯ ИЗОБРАЖЕНИЕ КОМАНДА СОЗДАНО СОСТОЯНИЕ НАЗВАНИЯ ПОРТОВ d857536373e3 centos "/ bin / bash" 34 минуты назад Завершился (137) 1 минуту назад musing_bose 4622f48ceaed ubuntu "/ bin / bash" 34 минуты назад Завершился (0) 34 минуты назад hungry_hofstadter ecc42527bba4 ubuntu "/ bin / bash" 35 минут назад Завершился (0) 35 минут назад sharp_kapitsa 6f51f7a centos "/ bin / bash" 35 минут назад Завершился (0) 35 минут назад loving_cocks 6708084317a1 centos "/ bin / bash" 35 минут назад Завершился (0) 35 минут назад jovial_diffie af70224e7cc5 centos "/ bin / bash" 35 минут назад Завершился (0) 35 минут назад objective_haibt 121ba587209b centos "/ bin / bash" 35 минут назад Завершился (0) 35 минут назад flamboyant_nobel
В первой строке мы можем увидеть статус контейнера с ID d857536373e3 — « Exited ».
Как удалить остановленный / закрытый докер-контейнер?
Теперь, чтобы полностью удалить контейнер из системы, нам нужно использовать команду docker rm, т.е.
docker rm
Он удалит один или несколько остановленных контейнеров на основе предоставленных идентификаторов или имен.
Давайте удалим недавно остановленный контейнер по идентификатору контейнера, то есть
docker rm d857536373e3
В качестве альтернативы, чтобы удалить контейнер, мы также можем передать имя контейнера i.е.
докер rm musing_bose
Обе приведенные выше команды удаляют контейнер с идентификатором d857536373e3 из нашего движка докеров. Если мы попытаемся удалить какой-либо работающий контейнер (статус — UP) с помощью команды docker rm, то произойдет ошибка, подобная этой,
Ошибка, ответ от демона: вы не можете удалить работающий контейнер 1a600547f8f52a57d03f04667b9e8497bf5d2d37b85696b16918ca1187831e0e. Остановите контейнер перед попыткой извлечения или извлеките принудительно
Итак, один из способов — остановиться, а затем удалить контейнер.Кроме того, как упоминалось в приведенной выше строке ошибки, есть другой способ напрямую удалить работающий контейнер.
Непосредственно остановить и удалить работающий контейнер с помощью одной команды
В команде docker rm мы также можем предоставить параметр –force или -f для принудительного удаления контейнеров (внутренне используется SIGKILL).
Предположим, у нас есть работающий контейнер, т.е.
PS C: \ Varun> docker ps
КОНТЕЙНЕР ИДЕНТИФИКАЦИЯ ИЗОБРАЖЕНИЯ КОМАНДА СОЗДАНО СОСТОЯНИЕ ИМЕНА ПОРТОВ 1a600547f8f5 centos "/ bin / bash" 4 минуты назад Вверх на 4 минуты hungry_kapitsa
Теперь давайте принудительно удалим этот контейнер, не останавливая его сначала,
docker rm -f 1a600547f8f5
Он сразу остановит и удалит контейнер из движка докера.Теперь, если мы получим список всех контейнеров в нашей системе, то этого контейнера там не будет, т.е.
PS C: \ Varun> docker ps КОНТЕЙНЕР ИДЕНТИФИКАЦИЯ ИЗОБРАЖЕНИЕ КОМАНДА СОЗДАНА СОСТОЯНИЕ НАЗВАНИЯ ПОРТОВ
Мы также можем удалить несколько контейнеров с помощью команды docker rm, т.е.
Предположим, у нас есть два запущенных контейнера с ID 1a600547f8f5 и 3ab005456123 . Теперь, чтобы удалить оба контейнера, мы можем передать их ID команде rm i.е.
докер rm -f 1a600547f8f5 3ab005456123
Оба контейнера будут удалены с силой.
Пробный запуск использованных выше команд:
Получить список всех контейнеров,
PS C: \ Windows \ system32> docker ps -a
КОНТЕЙНЕР ИДЕНТИФИКАЦИЯ ИЗОБРАЖЕНИЕ КОМАНДА СОЗДАНО СОСТОЯНИЕ ИМЕНА ПОРТОВ 0d68f20be559 ubuntu "/ bin / bash" 5 секунд назад Завершился (0) 4 секунды назад cranky_keller 494355aa24f6 ubuntu "/ bin / bash" 11 секунд назад Завершился (0) 9 секунд назад vibrant_tu 5d79bd7be240 centos "/ bin / bash" 16 секунд назад Завершился (0) 14 секунд назад hopeful_feynman 7e212f6b8780 centos "/ bin / bash" 18 секунд назад Завершился (0) 17 секунд назад gifted_chandrasekhar 338b3c461ae7 centos "/ bin / bash" 21 секунду назад Завершился (0) 20 секунд назад mystifying_williamson 4e88ee8e736e centos "/ bin / bash" Около часа назад Вверх Около часа agitated_chaplygin 8b38ae16205a ubuntu "/ bin / bash" Около часа назад Вверх Около часа silly_napier
Теперь удалите работающий контейнер с ID 8b38ae16205a
docker stop 8b38ae16205a докер RM 8b38ae16205a
Теперь удалите запущенный контейнер с именем agitated_chaplygin,
docker stop agitated_chaplygin Докер RM agitated_chaplygin
Проверьте, удалены ли оба упомянутых выше работающих контейнера i.е.
PS C: \ Windows \ system32> докер ps -a КОНТЕЙНЕР ИДЕНТИФИКАЦИЯ ИЗОБРАЖЕНИЕ КОМАНДА СОЗДАНО СОСТОЯНИЕ НАЗВАНИЯ ПОРТОВ 0d68f20be559 ubuntu "/ bin / bash" 2 минуты назад Завершился (0) 2 минуты назад cranky_keller 494355aa24f6 ubuntu "/ bin / bash" 2 минуты назад Завершился (0) 2 минуты назад vibrant_tu 5d79bd7be240 centos "/ bin / bash" 2 минуты назад Завершился (0) 2 минуты назад hopeful_feynman 7e212f6b8780 centos "/ bin / bash" 2 минуты назад Завершился (0) 2 минуты назад gifted_chandrasekhar 338b3c461ae7 centos "/ bin / bash" 2 минуты назад Завершился (0) 2 минуты назад mystifying_williamson
Контейнеры с ID 8b38ae16205a и именем agitated_chaplygin сейчас не найдены.Так что удалил полностью.
Теперь, чтобы удалить все загнутые контейнеры, нам не нужно указывать параметр -f, то есть
docker rm 0d68f20be559 494355aa24f6 5d79bd7be240 7e212f6b8780 338b3c461ae7
Он удалит 5 контейнеров, которые были в закрытом состоянии.
Но если вы хотите удалить 100 контейнеров или удалить контейнеры на основе условной фильтрации, то будет действительно сложно передавать их ID контейнера один за другим. Итак, в следующей статье мы обсудим, как остановить и удалить несколько контейнеров с помощью одной команды.
Как остановить и удалить все докер-контейнеры?
Автор mkyong |
Просмотрено: 14 640 | +75 pv / w
В Docker мы не можем удалить работающий контейнер, сначала остановите его.
Остановить все работающие контейнеры.
Терминал
$ sudo docker stop $ (sudo docker ps -aq)
Удалите все остановленные контейнеры.
Терминал
$ sudo docker rm $ (sudo docker ps -aq)
1.Остановить контейнер
1.1 Перечислить все контейнеры sudo docker ps
Terminal
$ sudo docker ps
КОНТЕЙНЕР ИДЕНТИФИКАЦИЯ ИЗОБРАЖЕНИЕ КОМАНДА СОЗДАНО СОСТОЯНИЕ НАЗВАНИЯ ПОРТОВ
9ab3de2442e2 spring-boot: 1.0 "java -jar app.jar" 3 секунды назад Вверх на 3 секунды 0.0.0.0:443->8443/tcp intelligent_mclean
9a2fe01d9df9 spring-boot: 1.0 "java -jar app.jar" 28 секунд назад На 27 секунд выше 0.0.0.0: 8080-> 8080 / tcp quizzical_curran
1.2 Остановить контейнер по ИДЕНТИФИКАТОР КОНТЕЙНЕРА
или ИМЕНА
Терминал
$ sudo docker stop 9ab3de2442e2
$ sudo docker stop intelligent_mclean
1.3 Остановка нескольких контейнеров по ИДЕНТИФИКАТОР КОНТЕЙНЕРА
или ИМЕНА
Терминал
$ sudo docker stop 9ab3de2442e2 9a2fe01d9df9
$ sudo docker stop intelligent_mclean quizzical_curran
1.4 Показать идентификаторы контейнеров для всех контейнеров.
условно
$ sudo docker ps -aq
9ab3de2442e2
9a2fe01d9df9
1.5 Объедините sudo docker ps -aq
с командой stop
; мы можем остановить все контейнеры в одну линию.
Терминал
$ sudo docker stop $ (sudo docker ps -aq)
2. Удалить контейнер
2.1 Удалить контейнер по ИДЕНТИФИКАТОР КОНТЕЙНЕРА
или ИМЯ
Терминал
$ sudo docker rm 9ab3de2442e2
$ sudo docker rm intelligent_mclean
2.2 Удалите несколько контейнеров по КОНТЕЙНЕР ID
или ИМЕНА
Терминал
$ sudo docker rm 9ab3de2442e2 9a2fe01d9df9
$ sudo docker rm intelligent_mclean quizzical_curran
2.3 Удалить все остановленные контейнеры.
Терминал
$ sudo docker rm $ (sudo docker ps -aq)
3. Очистка системы докеров
Эта система докеров удаляет
очищает следующее:
- все остановленные контейнеры
- все сети, не используемые хотя бы одним контейнером
- все висячие образы
- все висячие кеши сборки
Эта команда очистки сэкономит много места на жестком диске.
Терминал
$ sudo docker system prune
ПРЕДУПРЕЖДЕНИЕ! Это удалит:
- все остановленные контейнеры
- все сети не используются хотя бы одним контейнером
- все висячие изображения
- весь болтающийся кеш сборки
Вы уверены что хотите продолжить? [да / нет] г
Удаленные контейнеры:
10b3f08a93df89818976a29c26f5ccefbda1e2dc2e0205a02e9a3306590a1455
89d9cb3e102dbadc9d314bea0db5feb3110931727e2da0b88d6d88d7d78f4400
49e429f26db40615557a85fdf758cd66afa208dba03f74aea860bb04bb4772b2
3e36a2c0c241f8b815ddc73f398cae97962a6799c244fd5169cd845023c5b657
...
Удаленные изображения:
удалено: sha256: fe111236265a30b8ec54390defb5da60cc7b76a0d3ff0e883691b8b3c663f2e9
удалено: sha256: 2e591f44cd334c7896ed01660d45099f4f58169d0584163b6009dea56c3abcbe
удалено: sha256: 8b1c255bf0e627c789fc35b3b3b0a1e5033f6be612e01dca08eb1aa4fd161364
...
Общее освобожденное пространство: 251,3 МБ
Ссылки
Как удалить образы, сети, контейнеры и тома Docker
Удаление образов, сетей, контейнеров и томов Docker
Docker позволяет создавать и развертывать приложения и службы в виде переносимых контейнеров, чтобы их можно было запускать где угодно.Когда вы работаете с Docker, он не удалит излишнее количество неиспользуемых объектов, пока вы не скажете им об этом. Если вы этого не сделаете, эти неиспользуемые объекты займут ваше дисковое пространство и испортят вывод. В этом руководстве вы узнаете, как удалить образы, сети, контейнеры и тома Docker.
Удаление неиспользуемых или болтающихся предметов
После выполнения команды Docker будут удалены все образы, сети, контейнеры и тома, которые не связаны с контейнером.
докер система prune
Приведенная выше команда запросит подтверждение, просто введите y
, чтобы продолжить.
ВНИМАНИЕ! Это удалит: - все остановленные контейнеры - все сети не используются хотя бы одним контейнером - все висячие изображения - весь кеш сборки Вы уверены что хотите продолжить? [да / нет]
Удаление образов Docker
Чтобы удалить образы Docker, следуйте инструкциям ниже:
Удаление определенного образа Docker
Чтобы удалить определенный образ Docker, вы должны сначала перечислить все образы Docker.Чтобы вывести список всех образов Docker, выполните следующую команду:
образ докера ls
Результат должен быть:
РАЗМЕР ИЗОБРАЖЕНИЯ ИДЕНТИФИКАЦИИ ИЗОБРАЖЕНИЯ РЕПОЗИТОРА ubuntu последнее 545acca98ac2 2 месяца назад 113MB centos последнее 781335a6d457 4 месяца назад 210MB
В приведенном выше выходном столбце ИДЕНТИФИКАТОР ИЗОБРАЖЕНИЯ видно, что там отображается идентификатор изображения.
Чтобы удалить изображение, вы можете запустить команду ниже. Если изображение не используется каким-либо контейнером, оно будет удалено, в противном случае отобразится ошибка, указывающая, что сначала удалите контейнер, чтобы удалить целевое изображение. Чтобы удалить изображение, вы должны просто указать IMAGE ID с помощью команды docker image rmi
:
образ докера rmi 545acca98ac2
Удалить оборванные изображения
Чтобы удалить все болтающиеся изображения, вы можете ввести в терминале следующую команду. Она также удалит изображения без тегов:
обрезка образа докера
Результатом будет:
ВНИМАНИЕ! Это удалит все болтающиеся изображения.Вы уверены что хотите продолжить? [г / н] г
Введите и
, чтобы удалить все болтающиеся изображения.
Теперь Чтобы удалить образы, которые не связаны с какими-либо контейнерами, вы должны запустить команду docker image prune
с флагом -a
:
образ докера prune -a
Результат должен быть:
ВНИМАНИЕ! Это приведет к удалению всех изображений, с которыми не связан хотя бы один контейнер. Вы уверены что хотите продолжить? [да / нет] г
Удаление изображений с помощью метки
Чтобы удалить образы с помощью label
, вы должны запустить команду docker image prune -a
с параметром --filter
, указав метку образа.
Следующая команда удалит изображения с меткой first_ubuntu
:
docker image prune -a --filter "label = first_ubuntu"
Удаление сетей Docker
Чтобы удалить Docker Networks, выполните следующие инструкции:
Удаление определенных сетей Docker
Чтобы удалить определенную сеть Docker, вы должны сначала перечислить все сети Docker. Чтобы вывести список всех сетей Docker, выполните следующую команду:
докер сеть ls
Результат должен быть:
ИМЯ ИДЕНТИФИКАЦИИ СЕТИ ДРАЙВЕР df902d74307a first_bridge мост местный 972bc97b913b host host local 49d337bf91f5 none null
Как использовать docker-compose для запуска, остановки и удаления контейнеров Docker
Если вы плохо знакомы с докером и взяли на себя управление системой, в которой уже запущено приложение докера, вы должны хотя бы знать, как его поддерживать.
В этом кратком руководстве объясняется, как запускать, останавливать, удалять, перезапускать и просматривать состояние приложения контейнера докеров с помощью docker-compose.
docker-compose очень полезен при управлении сложным докер-приложением с несколькими контейнерами.
1. Запуск контейнеров Docker в фоновом режиме
Все службы вашего приложения обычно определяются в файле docker-compose.yml. В этом yml-файле вы также определите все зависимости службы вашего приложения.
Иногда у вас может быть отдельный файл Dockerfile, в котором вы указываете, как создать конкретный образ.
Обычно, когда вы выполняете docker-compose up, он загружает и извлекает соответствующий образ (если он не кэширован локально на вашем сервере), затем создает образ, используя код вашего приложения, и, наконец, запускает все приложение docker с все зависимости.
Для начала перейдите в каталог, в котором находится файл docker-compose.yml, и выполните следующую команду docker-compose up.
# cd / home / myapp / # ls -l -rw-rw-r--. 1 root root 1288 4 апр, 09:26 docker-compose.yml -rw-rw-r--. 1 root root 132 4 апреля 21:34 Dockerfile # docker-compose up -d Создание сети "myapp" с драйвером "overlay" Получение данных (myrepo / mongo: последний) ... datanode: вытаскивает myrepo / mongo: последнее ...: загружено Создание данных .. Получение myapp (myrepo / tomcat: latest) ... datanode: получение myrepo / tomcat: latest...: скачано Создание myapp Сборка myapp .. Вытягивание сети (myrepo / nginx: latest) ... datanode: получение myrepo / nginx: последнее ...: загружено Создание сети ..
Вы заметите, что он загрузит контейнер только в первый раз, когда вы его запустите, после этого он будет использовать кешированную версию. Вы больше не увидите строку «Pulling ..» в выводе about.
Вы увидите следующее, только когда запустите docker-compose в следующий раз.
# docker-compose up -d Создание данных Создание myapp Создание сети
Параметры -d запускают приложение докера в фоновом режиме в качестве демона. При этом приложение будет работать до тех пор, пока вы не решите его остановить.
В выходных данных приведенного выше примера запущены следующие службы:
- mongo для базы данных
- nginx для веб-сервера
- tomcat для сервера приложений
2. Запуск Docker-контейнеров на переднем плане
Если вы не укажете параметр -d, docker-compose запустит все службы на переднем плане.
В этом случае вы можете видеть все сообщения журнала прямо на экране.
Это полезно при отладке любых связанных с запуском проблем с контейнерами докеров, образами или службами.
# cd / home / myapp / # docker-compose up
В этом случае приложение будет запущено и будет работать до тех пор, пока вы не нажмете Ctrl-C, чтобы отменить процесс переднего плана.
В этом случае нажатие Ctrl-C эквивалентно выполнению команды «docker-compose stop».Таким образом, он изящно остановит все контейнеры.
3. Дополнительные параметры запуска docker-compose
Когда вы используете docker-compose up, если в файле docker-compose.yml есть какие-либо изменения, влияющие на контейнеры, они будут остановлены и созданы заново.
Но вы можете заставить docker-compose не останавливать и воссоздавать контейнеры, вы можете использовать параметр –no-reconate, как показано ниже, во время docker-compose up. Другими словами, если контейнер уже выходит, он не будет воссоздан.
# docker-compose up -d --no-воссоздать
Вы также можете сделать наоборот. Следующее приведет к принудительному воссозданию контейнеров, даже если в docker-compose.yml ничего не изменится.
Вы также можете указать значение тайм-аута. Значение по умолчанию — 10 секунд, но следующая команда будет использовать значение тайм-аута 30 секунд.
# docker-compose up -d -t 30
Ниже приведены несколько дополнительных параметров, которые можно использовать вместе с «docker-compose up»
- –no-deps При этом не запускаются никакие связанные зависимые службы.
- –no-build Образ не будет построен, даже если образ отсутствует
- –abort-on-container-exit Это остановит все контейнеры, если какой-либо из них был остановлен. Вы не можете использовать эту опцию с -d, вы должны использовать эту опцию отдельно.
- –no-color На выходе цвет не будет отображаться. Это отобразит монохромный вывод на экране.
4. Остановить все контейнеры Docker
Чтобы остановить приложение докера, работающее на переднем плане, вам просто нужно нажать Ctrl-C, как показано выше.
Но, чтобы остановить приложение docker, работающее в фоновом режиме, используйте команду docker-compose stop, как показано ниже.
Есть два шага, чтобы остановить контейнеры приложения Docker:
- Сначала остановите работающие контейнеры с помощью docker-compose stop
- Во-вторых, удалите остановленные контейнеры с помощью docker-compose rm -f
Остановите контейнеры приложений с помощью docker-compose stop:
# cd / home / myapp / # docker-compose stop Остановка сети... сделанный Остановка данных ... готово Остановка myapp ... готово
Удалите контейнеры приложений с помощью docker-compose rm -f:
# cd / home / myapp / # docker-compose rm -f Собираюсь удалить веб, данные, мое приложение Удаление Интернета ... готово Удаление данных ... готово Удаление myapp ... готово
Примечание. Если вы не укажете -f в приведенной выше команде, перед удалением вам будет предложено ввести Да / Нет.
Так как вы будете делать это часто, объедините оба вышеуказанных значения stop и rm, как показано ниже.
В этом случае, поскольку у нас есть «&&», который выполнит вторую команду только после того, как первая команда будет успешной. Таким образом, он выполнит «rm -f» только после успешной остановки контейнеров докеров.
# docker-compose stop && docker-compose rm -f Остановка Интернета ... готово Остановка данных ... готово Остановка myapp ... готово Собираюсь удалить веб, данные, мое приложение Удаление Интернета ... готово Удаление данных ... готово Удаление myapp ... готово
5.Остановить конкретный контейнер Docker
Вместо остановки всех контейнеров вы также можете специально остановить конкретную службу.
В следующем примере будет остановлен только контейнер данных
# docker-compose stop data Остановка данных ... готово
Вы также можете указать тайм-аут завершения работы во время остановки docker-compose. По умолчанию он будет ждать 10 секунд. По какой-то причине, если вы знаете, что для остановки вашего приложения может потребоваться немного больше времени, вы можете увеличить этот тайм-аут, как показано ниже, во время завершения работы.
# docker-compose stop -t 30 # docker-compose stop data -t 30
6. Удалите объемы контейнера
При удалении остановленных контейнеров не удаляются все тома, прикрепленные к контейнерам.
В типичной ситуации вы не хотите удалять присоединенные тома во время обычного процесса остановки / запуска / выполнения.
Но, если вы решите удалить прикрепленные тома, вы можете сделать это во время rm, используя параметр -v, как показано ниже.
Следующее приведет к удалению томов, прикрепленных к контейнерам.
# docker-compose rm -v
Вы также можете удалить конкретный контейнер, указав имя контейнера. Следующее удалит только контейнер данных.
# docker-compose rm -f data Собираюсь удалить данные Удаление данных ... готово
7. Статус контейнеров Docker
Чтобы просмотреть состояние приложения Docker, выполните следующую команду docker-compose ps.
# docker-compose ps Имя команды Состояние портов -------------------------------------------------- -------------- myapp catalina.sh запустить 192.168.1.2:8080->8080/tcp данные / usr / bin / mongod вверх 192.168.1.3:28017->27017/tcp web nginx -g daemon off; Вверх 192.168.1.4:80->80/tcp
В приведенных выше выходных данных мы видим, что все три наших контейнера работают без каких-либо проблем. Приведенный выше вывод не показывает идентификатор контейнера.Если вы хотите получить идентификатор для конкретного контейнера, используйте параметр -q.
Ниже будет показан идентификатор контейнера данных.
# docker-compose ps -q db a6e7334b4454f65b1a45931 ..
После команды docker-compose rm -f, если вы выполните команду docker-compose ps, вы не увидите никаких контейнеров, перечисленных в выводе.
Однако после остановки docker-compose, если вы выполните команду docker-compose ps, вы увидите пустые значения в столбце «Порты», а в столбце «Состояние» отобразится Exit и соответствующее значение выхода процесса, когда он остановился.
# docker-compose ps Имя команды Состояние портов ---------------------------------------------- myapp catalina.sh запустить Exit 137 data / usr / bin / mongod Выход 0 web nginx -g daemon off; Выход 0
8. Перезапустите несколько контейнеров Docker
Подводя итог, если вы просто хотите перезапустить несколько контейнеров, созданных файлом docker-compose.yml, используйте последовательно следующие команды.
Это сначала остановит все контейнеры, затем удалит все контейнеры и, наконец, запустит их в фоновом режиме, как указано в docker-compose.yml файл.
Сначала перейдите в каталог, в котором находится файл docker-compose.yml, а затем выполните следующее для перезапуска.
cd / главная / myapp docker-compose stop && docker-compose rm -f docker-compose up -d
Если вам понравилась эта статья, возможно, вам также понравится ..
Докер 容器 使用 |菜鸟 教程
Докер 客户 端
docker 端 非常 简单, 可以 直接 docker 命令 来 查看 到 Docker 客户 端 的 所有 命令 选项。
runoob @ runoob: ~ # докер
通过 命令 docker command —help 更 深入 的 了解 指定 的 Docker 命令 使用 方法。
我们 要 查看 docker stats 指令 的 具体 使用 方法 :
runoob @ runoob: ~ # статистика докеров --help
容器 使用
获取
如果 我们 本地 没有 ubuntu 镜像 , 我们 可以 docker pull 命令 来 载入 ubuntu 镜像 :
$ docker pull ubuntu
启动
以下 命令 使用 ubuntu 镜像 启动 一个 容器 , 参数 为 以 命令 行 模式 进入 该 容器 :
$ docker run -it ubuntu / bin / bash
参数 说明 :
- -i : 交互式 操作。
- -t : 终端。
- Ubuntu : Ubuntu 镜像
- / bin / bash 放在 镜像 名 后 的 是 命令 , 这里 我们 希望 有 个 Shell 因此 用 的 是 / bin / bash。
要 退出 终端 exit :
корень @ ed09e4490c57: / # выход
启动 已 停止 运行 的 容器
查看 所有 的 容器 命令 如下 :
$ докер ps -a
点击 图片 查看 大 图 :
start docker start 启动 一个 已 停止 的 容器 :
$ запуск докера b750bbbcfd88
后台
大部分 的 场景 下 , 我们 docker 的 服务 是 在 后台 运行 的 , 我们 可以 -d 指定 容器 的 运行 模式。
$ docker run -itd --name ubuntu-test ubuntu / bin / bash
点击 图片 查看 大 图 :
注 : 加 了 -d 参数 默认 不会 进入 容器 , 想要 进入 容器 需要 使用 指令 docker exec (下面 会 介绍 到))
停止 一个 容器
停止 容器 的 命令 如下 :
$ docker stop <容器 ID>
的 可以 перезапуск докера 重启 :
$ перезапуск докера <容器 ID>
进入
在 使用 -d 参数 时 , 容器 启动 后 会 进入 后台。 此时 想要 进入 , 可以 通过 以下 指令 进入 :
прикрепить 命令
下面 演示 了 使用 присоединение докера 命令。
$ докер прикрепить 1e560fca3906
: 如果 从 这个 容器 退出 , 会 导致 容器 的 停止。
нач. 命令
下面 演示 了 使用 docker exec 命令。
docker exec -it 243c32535da7 / bin / bash
注意 : 这个 容器 不会 导致 容器 的 停止 , 这 就是 大 大家 使用 docker exec 的 原因。
更多 参数 说明 请 使用 docker exec —help 命令 查看。
导出 和 导入 容器
导出 容器
如果 要 导出 本地 某个 容器 , 可以 使用 экспорт докеров 命令。
$ docker export 1e560fca3906> ubuntu.деготь
容器 1e560fca3906 快照 到 本地 文件 ubuntu.tar。
这样 将 导出 容器 快照 到 本地 文件。
导入 容器 快照
使用 импорт докеров 从 容器 快照 文件 中 为 镜像 , 以下 实例 将 快照 文件 ubuntu.tar 导入 到 镜像 test / ubuntu: v1:
$ cat docker / ubuntu.tar | импорт докеров - test / ubuntu: v1
此外 , 也 可以 通过 指定 URL 或者 某个 目录 来 导入 , 例如 :
$ docker import http://example.com/exampleimage.tgz example / imagerepo
删除 容器
删除 容器 使用 докер RM 命令 :
$ докер rm -f 1e560fca3906
下面 的 命令 可以 清理 掉 所有 处于 终止 状态 的 容器。
$ docker container prune
运行 一个 Интернет 应用
前面 我们 运行 的 容器 并 没有 一些 什么 特别 的 用处。
接下来 让 我们 尝试 докер 构建 一个 Интернет 应用 程序。
将 docker 容器 中 运行 一个 Python Flask 应用 来 运行 一个 web 应用。
runoob @ runoob: ~ # обучение вытягиванию докеров / webapp # 载入 镜像 runoob @ runoob: ~ # docker run -d -P training / webapp приложение python.ру
:
WEB 应用 容器
— докер ps, 查看 我们 正在 运行 的 容器 :
runoob @ runoob: ~ # докер ps КОНТЕЙНЕР ID ИЗОБРАЖЕНИЕ КОМАНДА ... ПОРТЫ d3d5e39ed9d3 обучение / webapp "python app.py" ... 0.0.0.0:32769->5000/tcp
这里 多 了 端口 信息。
ПОРТЫ 0.0.0.0:32769->5000/tcp
Docker 开放 了 5000 端口 (Python Flask 端口) 映射 到 主机 端口 32769 上。
这时 我们 可以 通过 浏览 器 访问 WEB 应用
我们 也 可以 通过 -p 参数 来 设置 不 一样 的 端口 :
runoob @ runoob: ~ $ docker run -d -p 5000: 5000 обучение / приложение python webapp.ру
докер ps 正在 运行 的 容器
runoob @ runoob: ~ # докер ps ИДЕНТИФИКАЦИЯ КОНТЕЙНЕРА ИЗОБРАЖЕНИЕ НАЗВАНИЯ ПОРТОВ bf08b7f2cd89 обучение / веб-приложение ... 0.0.0.0:5000->5000/tcp wizardly_chandrasekhar d3d5e39ed9d3 обучение / webapp ... 0.0.0.0:32769->5000/tcp xenodochial_hoov
内部 的 5000 端口 映射 到 我们 本地 主机 的 5000 端口 上。
网络 端口 的 快捷 方式
通过 docker ps 查看 到 的 端口 映射 , docker 还 提供 另一个 docker port , docker port 可以 指定 (ID 名字) 容器 端口 映射到 宿 主机 的 端口 号。
我们 创建 的 web 应用 容器 ID 为 bf08b7f2cd89 名字 为 wizardly_chandrasekhar 。
我 可以 使用 порт докера bf08b7f2cd89 或 порт докера wizardly_chandrasekhar 来 查看 容器 端口 的 映射 情况。
runoob @ runoob: ~ $ порт докера bf08b7f2cd89 5000 / TCP -> 0.0,0.0: 5000
runoob @ runoob: ~ $ порт докера wizardly_chandrasekhar 5000 / TCP -> 0.0.0.0:5000
WEB 应用 程序 日志
журналов докеров [ID 或者 名字] 可以 查看 容器 内部 的 标准 输出。
runoob @ runoob: ~ $ журналы докеров -f bf08b7f2cd89 * Запуск на http://0.0.0.0:5000/ (нажмите CTRL + C, чтобы выйти) 192.168.239.1 - - [09 / May / 2016 16:30:37] «GET / HTTP / 1.1» 200 - 192.168.239.1 - - [09 / May / 2016 16:30:37] "GET /favicon.ico HTTP / 1.1" 404 -
-f: 让 журналы докеров 像 使用 tail -f 一样 来 输出 容器 内部 的 标准 输出。
上面 , 我们 可以 应用 程序 使用 的 是 5000 端口 并且 能够 查看 到 应用 程序 的 访问 日志。
WEB 应用 程序 容器 的 进程
还 可以 docker top 来 查看 容器 内部 的 进程
runoob @ runoob: ~ $ docker top wizardly_chandrasekhar UID PID PPID... ВРЕМЯ CMD корень 23245 23228 ... 00:00:00 python app.py
WEB 应用 程序
docker inspect Docker 的 底层 信息。 它 件 返回 一个 JSON 文件 的 Docker 容器 的。 和 5 信息。
runoob @ runoob: ~ $ docker проверить wizardly_chandrasekhar [ { «Id»: «bf08b7f2cd897b5964943134aa6d373e355c286db9b9885b1f60b6e8f82b2b85», «Создано»: «2018-09-17T01: 41: 26.174228707Z», «Путь»: «питон», «Аргументы»: [ "приложение.ру " ], "Состояние": { «Статус»: «работает», «Бег»: правда, «Приостановлено»: ложь, «Перезапуск»: ложь, "OOMKilled": ложь, «Мертвый»: ложь, «Пид»: 23245, г. «ExitCode»: 0, "Ошибка": "", "StartedAt": "2018-09-17T01: 41: 26.494185806Z", «FinishedAt»: «0001-01-01T00: 00: 00Z» }, ......
WEB 应用 容器
runoob @ runoob: ~ $ docker stop wizardly_chandrasekhar wizardly_chandrasekhar
WEB 应用 容器
停止 的 容器 , 我们 可以 使用 docker start 来 启动。
runoob @ runoob: ~ $ docker start wizardly_chandrasekhar wizardly_chandrasekhar
докер ps -l 查询 最后 一次 创建 的 容器 :
# docker ps -l
ИДЕНТИФИКАЦИЯ КОНТЕЙНЕРА ИЗОБРАЖЕНИЕ НАЗВАНИЯ ПОРТОВ
bf08b7f2cd89 обучение / webapp..