CLI

Практические примеры использования docker

Link: https://blog.ropnop.com/docker-for-pentesters/

Запуск контейнера

Общий вид

docker run -d --name имя_контейнера имя_образа
    -d - запуск в автономном режиме
    --name - имя контейнера
    в конце - имя_образа

Примеры

docker run --rm -i -t --entrypoint=/bin/bash

docker run --name имя_контейнера -d -p 80:80 имя_образа
    Запуск нового контейнера с проброшенным портом (слева - порт сервиса, справа - через какой порт будут уходить сообщения)

Отправка команды терминалу в контейнер:

docker exec -it <container_id> <Команда>

-i - Оставить STDIN открытым, даже если контейнер запущен в неприкрепленном режиме
-t, -tty - Запустить псевдотерминал

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

Запущенные контейнеры:

Удалить контейнер:

Работа с файлами внутри контейнера: чтобы заменить какой-нибудь файл в контейнере, используется команда docker cp. Она копирует файл из локальной файловой системы в контейнер:

Где qa_nginx и /etc/nginx/nginx.conf — имя контейнера и путь к скачиваемому файлу из контейнера, соответственно, а /tmp/nginx.conf путь до нового файла в текущей операционной системе.

Остановить контейнер

Удалить все контейнеры, которые остановлены

Сохранение изменений в контейнере

Если мы удалим наш контейнер и вновь его запустим, то все наши изменения, сделанные через консоль, исчезнут. Чтобы сохранить изменения используется команда docker commit:

Работа с образами

Список установленных образов:

Установить образ из репозитория:

Можно установить образ из tar-архива (gz/gzip/tgz..):

Удалить образ:

Volumes

Подключение разделов в процессе запуска контейнера (например, если надо передать какие-то файлы на обработку):

Можно устанавливать права сразу:

Работа с логами

Информация о занимаемом объеме памяти

Ограничение сети

Другие сетевые адаптеры (можно делать свои):

  • bridge — сеть между контейнерами на одном хосте (default)

  • overlay — сеть между контейнерами на разных хостах

  • macvlan —

  • ...

  • none

Перенос директории с образами в новую папку

link: https://linuxconfig.org/how-to-move-docker-s-default-var-lib-docker-to-another-directory-on-ubuntu-debian-linux

Ограничение общих ресурсов

Есть такая проблема. Пусть есть несколько контейнеров, запущенных на одной машине. В случае, если один контейнер выедает все ресурсы (например озу), то от этого падают все контейнеры. Такое поведение не приемлемо, если есть контейнеры критичные и которые by design не могут выжирать столько ресурсов.

Решение — разделять важные и о не очень контейнеры на cgroups

У докера есть опция —cgroup-parent — ты можешь сделать цгруппу где ограничить общую память до 14 ГБ, а потом внутри запускать безлимитные контейнеры, например (или выставить дополнительные лимиты для контейнеров внутри).

или сделать то же самое через systemd

https://stackoverflow.com/questions/46408673/docker-17-06-ce-default-container-memory-limit-on-shared-host-resources/46557336#46557336 Например вот ответ где объясняется как.

Papers and notes

Подробная документация: https://docs.docker.com/engine/reference/ Работа с Docker: https://community.vscale.io/hc/ru/community/posts/211783625-Основы-работы-с-Docker

Last updated

Was this helpful?