Docker: различия между версиями
Admin (обсуждение | вклад) Новая страница: «= Docker: основы контейнеризации для self‑hosted сервисов = Docker — это платформа для упаковки приложений в контейнеры, которые работают изолированно друг от друга и от хост‑системы. Контейнеры содержат всё необходимое для запуска: код, библиотеки, зависимости...» |
Admin (обсуждение | вклад) м Защитил страницу Docker ([Редактирование=Разрешено только администраторам] (бессрочно) [Переименование=Разрешено только администраторам] (бессрочно)) |
(нет различий)
| |
Текущая версия от 12:25, 4 августа 2026
Docker: основы контейнеризации для self‑hosted сервисов
Docker — это платформа для упаковки приложений в контейнеры, которые работают изолированно друг от друга и от хост‑системы. Контейнеры содержат всё необходимое для запуска: код, библиотеки, зависимости и настройки. Благодаря этому приложение можно легко перенести между серверами, обновить или откатить без влияния на другие сервисы.
Эта статья даёт базовое понимание Docker, которое необходимо для работы с Nextcloud, ZeroTier, базами данных и другими компонентами. Предполагается, что Docker уже установлен (это описано в статьях Linux, Windows или macOS).
1. Основные понятия
| Понятие | Описание |
|---|---|
| Образ (Image) | неизменяемый шаблон, содержащий приложение и его окружение (например, nextcloud:stable). Образы могут быть слоёными, чтобы экономить место.
|
| Контейнер (Container) | запущенный экземпляр образа. Контейнер имеет собственное файловое пространство, сеть и процессы, изолированные от хоста. |
| Том (Volume) | механизм сохранения данных вне контейнера. Данные в томе переживают перезапуск или удаление контейнера. |
| Сеть (Network) | виртуальный изолированный сегмент, в котором контейнеры могут общаться друг с другом. |
| Docker Compose | инструмент для описания многоконтейнерных приложений в одном YAML‑файле (например, Nextcloud + MariaDB). |
2. Жизненный цикл контейнера
Основные команды для управления контейнерами:
docker pull <образ>— скачать образ из реестра (по умолчанию Docker Hub).docker run <образ>— создать и запустить контейнер из образа.docker ps— список запущенных контейнеров.docker ps -a— все контейнеры (включая остановленные).docker stop <контейнер>— остановить контейнер.docker start <контейнер>— запустить остановленный контейнер.docker restart <контейнер>— перезапустить.docker rm <контейнер>— удалить контейнер (предварительно остановив).docker rmi <образ>— удалить образ.
Пример запуска простого веб‑сервера:
docker run -d --name my-nginx -p 8080:80 nginx
-d— запуск в фоновом режиме (detach)--name— задать имя контейнера-p— пробросить порт хоста:порт контейнера
После этого Nginx доступен по адресу http://localhost:8080.
3. Управление данными: тома и привязка папок
Контейнеры по умолчанию не сохраняют данные при пересоздании. Чтобы данные сохранялись, используют:
3.1. Именованные тома (Volumes)
Тома управляются Docker и хранятся в специальной области (обычно /var/lib/docker/volumes).
docker volume create nextcloud_data docker run -v nextcloud_data:/var/www/html/data nextcloud
3.2. Привязка папки хоста (Bind Mount)
Папка на хост‑системе монтируется в контейнер. Удобно для разработки или прямого доступа к файлам.
docker run -v /home/user/data:/var/www/html/data nextcloud
3.3. В Docker Compose
Тома описываются в секции volumes сервиса и в корневом блоке volumes для именованных томов:
services:
app:
image: nextcloud
volumes:
- ./data:/var/www/html/data # bind mount
- nextcloud_config:/var/www/html/config # именованный том
volumes:
nextcloud_config:
4. Сети в Docker
Docker создаёт несколько сетей по умолчанию:
- bridge — изолированная внутренняя сеть, в которой контейнеры могут общаться друг с другом по именам. Используется по умолчанию.
- host — контейнер использует сетевой стек хоста (порты не мапятся, контейнер слушает напрямую на интерфейсах хоста).
- overlay — для связи контейнеров на разных хостах в режиме Swarm.
Обычно мы используем пользовательские сети bridge для изоляции и удобства. Создадим сеть для Nextcloud:
docker network create nextcloud_net
Запустим контейнеры в этой сети:
docker run -d --name db --network nextcloud_net mariadb docker run -d --name app --network nextcloud_net -p 8080:80 nextcloud
Теперь контейнер app может обращаться к БД по имени db.
5. Переменные окружения (Environment Variables)
Многие образы позволяют настраиваться через переменные окружения. Это безопаснее, чем жёсткое кодирование конфигов.
Пример для MariaDB:
docker run -d --name db -e MYSQL_ROOT_PASSWORD=secret -e MYSQL_DATABASE=nextcloud mariadb
В Docker Compose это выглядит так:
environment: - MYSQL_ROOT_PASSWORD=secret - MYSQL_DATABASE=nextcloud
5.1. Файл переменных (.env)
Для хранения паролей и других чувствительных данных рекомендуется использовать файл .env в папке проекта, а в Compose ссылаться на переменные.
.env:
MYSQL_ROOT_PASSWORD=verysecret MYSQL_PASSWORD=anothersecret
В docker-compose.yml:
environment:
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
- MYSQL_PASSWORD=${MYSQL_PASSWORD}
Не забывайте добавить .env в .gitignore, если используете Git.
6. Логи и отладка
docker logs <контейнер>— просмотр логов контейнера (stdout/stderr).docker logs -f <контейнер>— следить за логами в реальном времени.docker exec -it <контейнер> /bin/bash— войти внутрь работающего контейнера для диагностики.docker inspect <контейнер>— подробная информация о контейнере (IP, переменные, монтирования и т.д.).docker stats— просмотр использования ресурсов (CPU, память) в реальном времени.
7. Docker Compose: управление группой контейнеров
Docker Compose позволяет запускать несколько контейнеров как единое приложение. Обычно мы используем docker-compose.yml.
Основные команды
docker compose up -d— запустить все сервисы в фоне.docker compose down— остановить и удалить все контейнеры, сети (тома по умолчанию не удаляются).docker compose logs— логи всех сервисов.docker compose ps— статус сервисов.docker compose exec <сервис> bash— войти в контейнер сервиса.
Пример Compose-файла для стека Nextcloud
Мы уже использовали его в статьях по ОС. Приведём его здесь с комментариями:
version: '3'
services:
db:
image: mariadb:10.6
restart: unless-stopped
command: --transaction-isolation=READ-COMMITTED --log-bin=binlog --binlog-format=ROW
volumes:
- ./db:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=${ROOT_PASS}
- MYSQL_PASSWORD=${USER_PASS}
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
networks:
- nextcloud_net
app:
image: nextcloud:stable
restart: unless-stopped
ports:
- "8080:80"
volumes:
- ./data:/var/www/html/data
- ./config:/var/www/html/config
- ./apps:/var/www/html/custom_apps
environment:
- MYSQL_HOST=db
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
- MYSQL_PASSWORD=${USER_PASS}
depends_on:
- db
networks:
- nextcloud_net
networks:
nextcloud_net:
driver: bridge
8. Бэкап и восстановление томов
Бэкап данных из тома
Используем временный контейнер для архивации:
docker run --rm -v nextcloud_data:/source -v $(pwd):/backup ubuntu tar czf /backup/nextcloud_backup.tar.gz -C /source .
Это создаст файл nextcloud_backup.tar.gz в текущей папке.
Восстановление
docker run --rm -v nextcloud_data:/target -v $(pwd):/backup ubuntu tar xzf /backup/nextcloud_backup.tar.gz -C /target
Для бэкапа баз данных используйте mysqldump внутри контейнера или отдельный дамп-контейнер.
9. Обновление контейнеров
Чтобы обновить образ и пересоздать контейнер:
docker pull nextcloud:stable docker compose down docker compose up -d
Если используете Compose, образы обновляются автоматически при наличии новых тегов (если не указан точный тег, например, :stable всегда указывает на последнюю стабильную версию). Для контроля обновляйте вручную.
10. Советы по безопасности
- Не используйте
latest‑тег в продакшене, так как он может непредсказуемо меняться. Указывайте конкретную версию, напримерnextcloud:27.0.0. - Ограничивайте ресурсы контейнера (CPU, память) через
docker run --memory=512m --cpus=1или в Compose. - Не запускайте контейнеры от root, используйте
user: "1000:1000"в Compose или параметр--user. - Скачивайте образы только из официальных реестров (Docker Hub, официальные организации).
- Регулярно обновляйте образы и перезапускайте контейнеры для получения исправлений безопасности.