Разное

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
6f51

f7a 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..

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *