6.21 Настройка Docker на сервере
Docker– это популярная платформа контейнеризации, которая позволяет разрабатывать, развертывать и управлять контейнерами с приложениями. Благодаря контейнеризации разработчики могут быстро создавать, тестировать и развертывать программное обеспечение в изолированной среде, минимизируя конфликты между зависимостями. Это делает Docker идеальным инструментом для разработки и сопровождения современных облачных решений. Docker значительно упрощает процесс развертывания приложений, позволяя запускать программное обеспечение в унифицированной среде, независимо от конфигурации операционной системы хоста. Контейнеры обеспечивают масштабируемость, повышенную безопасность и удобство управления, что делает их незаменимыми в DevOps-практиках.
Сегодня Docker используется во множестве сценариев — от локальной разработки до развертывания сложных распределенных систем. В этом руководстве рассмотрим:
- Установку Docker на различные операционные системы;
- Запуск контейнеров и работу с образами;
- Основные команды Docker;
- Настройку автозапуска контейнеров.
Терминология
Далее в статье используется общепринятая терминология по работе с Docker. Основные термины описаны ниже:
Контейнер (Docker Container)
Контейнер – изолированный процес запущенный из образа. У контейнер есть:
- собственное пространство имён (процессы, сеть, файловая система);
- ограниченные ресурсы (CPU, RAM, диск);
- доступ только к тому, что разрешено.
Образ (Docker Image)
Образ – Шаблон из которого создаются контейнеры. Он включает:
- файловую систему (например, Ubuntu, Alpine);
- зависимости (библиотеки, пакеты);
- код приложения;
- инструкции (из Dockerfile), например COPY, RUN, CMD;
- Важно. Образы неизменяемы. Когда ты обновляешь приложение — создаёшь новый образ.
Том (Docker Volume)
Том – постоянное хранилище данных, подключаемое к контейнеру. Используется для:
- сохранения данных БД, логов и конфигураций;
- обмена файлами между хостом и контейнером;
- разделения данных между несколькими контейнерами.
Подготовка сервера и установка Docker
Важно: перед настройкой Docker необходимо убедиться, что:
- У вас есть root-доступ. Установку можно реализовать на наших виртульных или выделенных серверах;
- Включена поддержка виртуализации (для работы контейнеров);
- Достаточно места на диске (Docker может занимать много места при активном использовании).
Перед выполнением любых подобных операций рекомендуется обновить Вашу систему. Команда для выполнения зависит от ОС:
Для Debian/Ubuntu:
1. Обновляем список пакетов и устанавливаем обновления системы:
2. Устанавливаем необходимые зависимости:
3. Добавляем официальный GPG-ключ Docker:
4. Добавляем Docker-репозиторий:
5. Обновляем список пакетов и устанавливаем Docker:
Для CentOS/AlmaLinux/RockyLinux
1. Устанавливаем необходимые плагины для работы с репозиториями:
2. Добавляем официальный репозиторий Docker:
3. Устанавливаем Docker и его компоненты:
Как добавить Docker в автозагрузку?
При необходимости Вы можете настроить Docker для включения после перезагрузки системы:
Основные команды
Далее мы расмотрим некоторые команды с примерами. В примерах мы будем обозначать команды как my_command контейнеры как my_container, образы – my_image, а теги как my_tag и так далее. Также мы будем использовать некоторые флаги. Более детально c командами и флагами к ним можете ознакомиться в официальной документации Docker.
Управление образами
- build – сборка образа;
- push – отправка образа в удалённый реэстр;
- ls – вывод списка образов;
- history – вывод информации о слоях образа;
- inspect – вывод подробной информации об образах;
- rm – удаление образа.
Примеры:
- -t(
--tag
) – указывает, что создаваемоум образу необходимо назначить тег. В данном случае это my_tag.
Управление контейнерами
- create – создание контейнера из образа;
- start – запуск существующего контейнера;
- run – создание контейнера и его запуск;
- ls – вывод списка работающих контейнеров;
- rename – переименование контейнера
- inspect – вывод подробной информации о контейнере.
Примеры:
- -i(
--interactive
) – поток STDIN поддерживается в открытом состоянии даже если контейнер к STDIN не подключён; - -t(
--tty
) – выделяется псевдотерминал, который соединяет используемый терминал с потоками STDIN и STDOUT контейнера; - -p(
--port
) – маппинг порта на сервере к порту контейнера;
Примеры подобного маппинга:
- “3000”
- “3000-3005”
- “8000:8000”
- “9090-9091:8080-8081”
- Совместное использование флагов -i -t создаёт возможность управления контейнером через терминал;
Управление томами
- create – создание тома;
- ls – вывести список томов;
- inspect --просмотр детальной информации о томе;
- rm – удаление тома
- prune – удаление всех неиспользованых томов.
Примеры:
Команды общего назначения
- version– вывод сведений о версиях клиента и сервера Docker;
- login– вход в реестр Docker;
- system prune– удаление неиспользуемых контейнеров, сетей и образов, которым не назначено имя и тег.
Примеры:
Частые ошибки и их решения
Ошибка: Cannot connect to the Docker daemon
Причина: Docker-сервис не запущен или проблемы с правами доступа.
Решение:
Ошибка: No space left on device
Причина: На диске сервера закончилось место, что мешает созданию новых контейнеров и образов.
Решение:
- Проверьте какие образы и контейнеры занимают место на диске:
- Удалите ненужные данные Docker.
- Проверьте оставшееся свободное место на диске
Ошибка: Permission denied while trying to connect to the Docker daemon socket
Причина: Текущий пользователь не имеет прав доступа к сокету Docker (/var/run/docker.sock).
Решение:
- Проверьте владельца сокета:
- Добавьте пользователя в группу
docker
:
- Перезагрузите систему и проверьте доступ к Docker
Ошибка: Bind for 0.0.0.0:80 failed: port is already allocated
Причина:
Порт, который вы пытаетесь использовать (80
в данном случае), уже занят другим процессом.
Решение:
- Найти и завершить процесс:
- Или запустить контейнер на другом порту:
Информируем: Для получения дополнительной информации можете воспользоваться официальными ресурсами: