# Docker Practise Основные команды

## Работа с образами/image

`docker search debian` # поиск образов по ключевому слову debian

`docker images` # просмотр локальных образов

`docker rmi $(docker images -aq)` # удаление всех образов

## Работа с контейнерами

`echo $(docker inspect -f '"Gateway": "{{.NetworkSettings.Networks.bridge.Gateway}}", "IPAddress": "{{.NetworkSettings.Networks.bridge.IPAddress}}"' suppi-backend-container)` # вывод Gateway и IPAddress



**-d сокращение от --detach или daemon** - вы просто запускаете контейнер как демона, а затем отключаетесь от него. По сути, вы запускаете контейнер в фоновом режиме (программами в режиме демона).

> `docker logs infallible_archimedes` для вывода полученных логов от контейнера, которые не вывелись из-за `-d` флага

`docker exec -it <docker-container-name/docker-container-name> /bin/bash` войти внутрь контейнера через оболочку [/bin/bash](/1%20Common//1.3%20Terminal/1.3.3%20CLI/1.3.3.1%20Shells.md):

**-it** являются флагами для команды docker runили docker container run(это псевдонимы). Предлагаю узнать, что такое флаги и идти вперед:

    -i или --interactive - **ввод**:
    Когда вы вводите docker run -i это, это означает, что ваш терминал будет передавать ваш ввод в контейнер (приложение в контейнере), пока вы не нажмете ctrl-D (выйти из контейнера). Например, если какое-то приложение работает в контейнере, ожидающем ввода пользователя, вы можете ввести что-нибудь, и это будет перенаправлено в приложение.

Ключевым здесь является слово «интерактивный». Если вы опустите этот флаг, контейнер все равно будет выполняться в [/bin/bash](/1%20Common/1.3%20Terminal/1.3.3%20CLI/1.3.3.1%20Shells.md), но немедленно завершится. С этим флагом контейнер выполняется, [/bin/bash](/1%20Common/1.3%20Terminal/1.3.3%20CLI/1.3.3.1%20Shells.md) а затем терпеливо ждет вашего ввода.

-t или -[tty](/1%20Common/1.3%20Terminal/1.3.0%20Terminal.md)(Псевдо-[TTY](/1%20Common/1.3%20Terminal/1.3.0%20Terminal.md)) - **вывод**:
если вы добавите этот флаг, выходные данные вашего контейнера будут прикреплены к вашему терминалу.

Объединение двух флагов as -it дает вам возможность заставить ваш контейнер получать ваш стандартный ввод и получать красивый форматированный вывод из контейнера, как если бы вы работали со своим собственным собственным терминалом.

Последующие действия :

Как докер понимает, какое приложение получит мой стандартный ввод (стандартный ввод)?

Когда вы вводите docker run -i <image> <app>, последний аргумент ( <app>) получит ваши входные данные.

Каково практическое применение обоих флагов по отдельности?

-i полезно, когда вы хотите взаимодействовать с приложением в контейнере, но вам не важно получать форматированный вывод. Например, вы хотите отправить данные в контейнер, получить из него данные и сохранить их в файл. В таком случае -tнет необходимости.
echo "my input" | docker run -i <image> > output.txt

-t полезен, когда вам нужен вывод, подобный терминалу, но не требуется, чтобы вводимые данные передавались в контейнер. Допустим, у вас есть скрипт, который запускается внутри контейнера, выводит данные в определенном формате, и после этого данные используются другим скриптом:
docker run -t my-image | my-processing-script.sh

## Работа с системой докера

`docker system info` # общая информация о системе (соответствует docker info)

`docker system df` # занятое место на диске

## Очистка дискового пространства

[Docker prune](https://docs.docker.com/reference/cli/docker/system/prune/)

После долгого использования докера на хосте может скопиться много мусора, команды ниже помогут с этим справиться.

| Обьект удаления | Команда |
|---|---|
| Тома |docker volume prune |
| Контейнеры | docker container prune |
| Образы | docker image prune |
| build cache | docker builder prune |
| Сети | docker network prune |
| --- | --- |
| Все и сразу, кроме используемых объектов | docker system prune |
| Абсолютно все и сразу | docker system prune -a |
| Абсолютно все и сразу без подтверждения | docker system prune -af |

> По умолчанию в этой команде тома не удаляются, чтобы предотвратить удаление важных данных, если в настоящее время нет контейнера, использующего том. Используйте этот `--volumes` флаг при запуске команды, чтобы также удалить тома `docker system prune -af --volumes`

---

[4.3.4 Network Driver Theme](./4.3.4%20NetworkDriver.md) | [Back To iTWiki Contents](https://github.com/eldaroid/iTWiki) | [4.3.6 Orchestrators Theme Folder](./4.3.6%20Orchestrators/)