Home » Установка и использование Docker на последний CentOS
Установка и использование Docker на последний CentOS

Установка и использование 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 для отладки.

Полезные ссылки:


В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.

Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.

Leave a reply

Your email address will not be published. Required fields are marked