# Docker  **Docker** - платформа для разработки, доставки и запуска контейнерных приложений. Именно что приложений. Потому как отличие от виртуальной машины - отсутствие надобности под приложение разворачивать целую виртуальную машину. К примеру Zabbix можно установить внутри виртуальной машины, а можно запустить несколько контейнеров (Zabbix Server + PostgreSQL) и бонусом еще веб-сервер Nginx с сайтиком. И все это будет в рамках одной виртуалки/bare metal тачки. Сами приложения называются образами, найти их можно на DockerHub если готовые и изготовить самому, если есть необходимость. Одни плюсы. Из минусов - конечно же пользователи которые суют все на свете в докер без особых на то причин, но это уже другое психическое отклонение. Или же - подготовка приложений к работе в K8s. В любом случае в условиях малых ресурсов организация инфраструктуры в docker-контейнерах позволяет более компактно и щадяще к ресурсам собрать свои сервисы и особо не замарачиваться. Работает исключительно на nix-системах. Наличие версии Docker-Desktop для Windows подразумевает установку Linux в Hyper-V/WSL. На MacOS таких приколов, очевидно, нет. ## Установка Docker (или Docker-Compose) в Ubuntu/Debian Официальная документация гласит: ```bash sudo apt-get update sudo apt-get install ca-certificates curl sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc sudo chmod a+r /etc/apt/keyrings/docker.asc # Add the repository to Apt sources: echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \ $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update ``` Не официальная (лично моя). Просто ставим пакет docker-compose. Из минусов - может быть старая версия, если принципиально нужна самая новая, см. выше: ```bash sudo apt install docker-compose ``` Таким образом быстро и без пердолинга мы установили докер ## Даем пользователю права запуска docker По умолчанию docker без sudo вы не запустите. Для решения проблемы пишем: ```bash sudo usermod -aG docker username ``` После чего нужно перелогиниться в систему. ## Проброс видеокарты Nvidia в контейнер Ubuntu/Debian Необходимо добавить репозиторий. Nvidia советует использовать такой метод. ```bash curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \ && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \ sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \ sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list ``` Далее включаем экспериментальные пакеты и установим ```bash sed -i -e '/experimental/ s/^#//g' /etc/apt/sources.list.d/nvidia-container-toolkit.list sudo apt-get update sudo apt-get install -y nvidia-container-toolkit ``` Генерируем конфигурационный фаил ```bash sudo nvidia-ctk cdi generate --output=/etc/cdi/nvidia.yaml ``` Убедимся что видеокарта получила идентификатор ```bash root@exclusion-watch:~# nvidia-ctk cdi list INFO[0000] Found 3 CDI devices nvidia.com/gpu=0 nvidia.com/gpu=GPU-ec7e5c60-b699-86c7-39da-e61db1767de2 nvidia.com/gpu=all ``` Ставим рантайм по умолчанию и рестартим сервис докер ```bash sudo nvidia-ctk runtime configure --runtime=docker --set-as-default sudo systemctl restart docker ``` Теперь если необходимо пробросить карточку то ознакомьтесь с примером docker-compose ```yaml ... transcoder-nvidia: <<: *transcoder-base deploy: resources: reservations: devices: - capabilities: [gpu] driver: nvidia device_ids: - nvidia.com/gpu=0 ```