- Home »

Установка и использование Docker на последний CentOS
Сегодня поговорим о том, как правильно поднять Docker на свежем CentOS — вопрос, который волнует многих сисадминов и DevOps-инженеров. Контейнеризация уже давно перестала быть экзотикой и стала стандартом де-факто для деплоя приложений. Если вы только начинаете знакомство с Docker или мигрируете на новую версию CentOS, эта статья станет вашим практическим руководством.
Мы разберем три ключевых момента: как устроен Docker и почему он так хорошо работает именно на CentOS, как быстро и без лишних телодвижений настроить всю систему, и главное — рассмотрим реальные примеры использования с подводными камнями, которые могут встретиться на пути.
Как работает Docker на CentOS
Docker на CentOS работает через демон dockerd, который взаимодействует с ядром Linux через cgroups и namespaces. CentOS Stream (текущая rolling-release версия) и CentOS 8 отлично подходят для Docker благодаря стабильному ядру и хорошей поддержке контейнерных технологий.
Основные компоненты системы:
- Docker Engine — основной демон, который управляет контейнерами
- containerd — высокоуровневый runtime для контейнеров
- runc — низкоуровневый runtime, который непосредственно запускает контейнеры
- Docker CLI — командная строка для взаимодействия с Docker
Пошаговая установка Docker на CentOS
Начнем с самого важного — установки. Забудьте про стандартные репозитории CentOS, там версии Docker часто устаревшие. Будем ставить из официального репозитория Docker.
Шаг 1: Подготовка системы
# Обновляем систему
sudo dnf update -y
# Устанавливаем необходимые пакеты
sudo dnf install -y dnf-utils device-mapper-persistent-data lvm2
# Удаляем старые версии Docker, если они есть
sudo dnf remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
Шаг 2: Добавление официального репозитория
# Добавляем репозиторий Docker
sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# Обновляем информацию о пакетах
sudo dnf makecache
Шаг 3: Установка Docker
# Устанавливаем Docker CE
sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
# Запускаем и добавляем в автозагрузку
sudo systemctl start docker
sudo systemctl enable docker
# Проверяем статус
sudo systemctl status docker
Шаг 4: Настройка пользователя
# Добавляем пользователя в группу docker
sudo usermod -aG docker $USER
# Перелогиниваемся или выполняем
newgrp docker
# Проверяем работу
docker run hello-world
Практические примеры и кейсы
Теперь перейдем к реальным сценариям использования. Покажу несколько типичных задач, с которыми сталкивается каждый сисадмин.
Запуск веб-сервера Nginx
# Простой запуск Nginx
docker run -d -p 80:80 --name my-nginx nginx
# Запуск с монтированием конфигурации
docker run -d -p 80:80 \
-v /etc/nginx/nginx.conf:/etc/nginx/nginx.conf:ro \
-v /var/www:/usr/share/nginx/html:ro \
--name my-nginx nginx
# Проверяем логи
docker logs my-nginx
База данных MySQL с persistent storage
# Создаем volume для данных
docker volume create mysql-data
# Запускаем MySQL
docker run -d \
--name mysql-server \
-e MYSQL_ROOT_PASSWORD=supersecret \
-e MYSQL_DATABASE=myapp \
-e MYSQL_USER=appuser \
-e MYSQL_PASSWORD=apppass \
-v mysql-data:/var/lib/mysql \
-p 3306:3306 \
mysql:8.0
# Подключаемся к базе
docker exec -it mysql-server mysql -u root -p
Таблица сравнения подходов к хранению данных
Метод | Производительность | Портабельность | Backup | Рекомендации |
---|---|---|---|---|
Bind mount | Высокая | Низкая | Простой | Для разработки |
Named volume | Высокая | Высокая | Через Docker | Для продакшена |
tmpfs mount | Очень высокая | Нет | Невозможен | Для временных данных |
Docker Compose для сложных конфигураций
Для реальных проектов лучше использовать Docker Compose. Вот пример LAMP-стека:
# docker-compose.yml
version: '3.8'
services:
web:
image: nginx:alpine
ports:
- "80:80"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
- ./html:/usr/share/nginx/html
depends_on:
- php
php:
image: php:8.1-fpm
volumes:
- ./html:/var/www/html
depends_on:
- db
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: rootpass
MYSQL_DATABASE: webapp
MYSQL_USER: webuser
MYSQL_PASSWORD: webpass
volumes:
- mysql_data:/var/lib/mysql
volumes:
mysql_data:
# Запуск stack'а
docker-compose up -d
# Просмотр логов
docker-compose logs -f
# Остановка
docker-compose down
Оптимизация и мониторинг
Настройка логирования
# Создаем конфигурацию Docker daemon
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json > /dev/null <
Мониторинг ресурсов
# Просмотр использования ресурсов
docker stats
# Информация о системе
docker system df
# Очистка неиспользуемых объектов
docker system prune -a
# Мониторинг конкретного контейнера
docker exec -it container_name htop
Подводные камни и решения
Проблема с SELinux
На CentOS SELinux может блокировать Docker. Если возникают проблемы с доступом к файлам:
# Проверяем статус SELinux
getenforce
# Временно отключаем (не рекомендуется для продакшена)
sudo setenforce 0
# Правильное решение - настройка контекста
sudo setsebool -P container_manage_cgroup true
sudo setsebool -P virt_use_execmem true
Проблемы с файрволом
# Добавляем Docker в доверенную зону
sudo firewall-cmd --permanent --zone=trusted --add-interface=docker0
sudo firewall-cmd --permanent --zone=trusted --add-masquerade
# Для конкретных портов
sudo firewall-cmd --permanent --add-port=80/tcp
sudo firewall-cmd --permanent --add-port=443/tcp
sudo firewall-cmd --reload
Автоматизация и скрипты
Docker отлично интегрируется с CI/CD пайплайнами. Вот пример скрипта для автоматического деплоя:
#!/bin/bash
# deploy.sh
APP_NAME="myapp"
IMAGE_NAME="myapp:latest"
CONTAINER_NAME="myapp-container"
# Собираем новый образ
docker build -t $IMAGE_NAME .
# Останавливаем старый контейнер
docker stop $CONTAINER_NAME 2>/dev/null || true
docker rm $CONTAINER_NAME 2>/dev/null || true
# Запускаем новый
docker run -d \
--name $CONTAINER_NAME \
-p 80:80 \
--restart unless-stopped \
$IMAGE_NAME
# Проверяем здоровье
sleep 5
if docker ps | grep -q $CONTAINER_NAME; then
echo "Deployment successful!"
else
echo "Deployment failed!"
exit 1
fi
Альтернативы Docker
Стоит знать о других контейнерных решениях:
- Podman — daemonless альтернатива, поддерживает rootless контейнеры
- LXC/LXD — системные контейнеры, ближе к виртуализации
- Kubernetes — для оркестрации контейнеров в кластере
- OpenVZ — контейнерная виртуализация на уровне ОС
Статистика и сравнение
Docker показывает отличные результаты по сравнению с традиционными VM:
- Время запуска: Docker ~2-5 сек vs VM ~30-60 сек
- Использование памяти: на 60-70% меньше чем VM
- Производительность: практически native performance
- Плотность: в 2-3 раза больше контейнеров на том же железе
Нестандартные применения
Docker как песочница для тестирования
# Быстрое тестирование разных версий ПО
docker run --rm -it python:3.9 python
docker run --rm -it python:3.11 python
# Тестирование скриптов в изолированной среде
docker run --rm -v $(pwd):/app -w /app python:3.9 python test_script.py
Бекап баз данных
# Автоматический бекап MySQL
docker exec mysql-container mysqldump -u root -ppassword dbname > backup.sql
# Бекап PostgreSQL
docker exec postgres-container pg_dump -U postgres dbname > backup.sql
Интеграция с другими инструментами
Docker + Ansible
# Пример Ansible playbook
- name: Deploy application
hosts: servers
tasks:
- name: Pull Docker image
docker_image:
name: myapp:latest
source: pull
- name: Run container
docker_container:
name: myapp
image: myapp:latest
ports:
- "80:80"
restart_policy: unless-stopped
Рекомендации по безопасности
# Запуск контейнера с ограниченными правами
docker run --user 1000:1000 --read-only --tmpfs /tmp nginx
# Ограничение ресурсов
docker run -m 512m --cpus="1.5" --name limited-app myapp
# Использование secrets
echo "mysecret" | docker secret create db_password -
docker service create --secret db_password myapp
Заключение и рекомендации
Docker на CentOS — это мощная связка для современной инфраструктуры. Основные рекомендации:
- Используйте официальные репозитории Docker, а не системные пакеты
- Настройте логирование с ротацией, чтобы не забить диск
- Изучите Docker Compose для многоконтейнерных приложений
- Не забывайте про безопасность — используйте non-root пользователей в контейнерах
- Мониторьте ресурсы и регулярно очищайте систему от неиспользуемых образов
Для серьезных проектов рекомендую рассмотреть VPS или выделенные серверы с достаточным количеством ресурсов.
Docker революционизировал способ разработки и развертывания приложений. С правильной настройкой на CentOS вы получите стабильную, масштабируемую платформу для ваших проектов. Главное — не бойтесь экспериментировать и всегда держите под рукой docker logs
для отладки.
Полезные ссылки:
В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.
Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.