Продвинутые возможности Docker

Docker предоставляет множество продвинутых возможностей для эффективного управления контейнерами, обеспечения безопасности и интеграции с системами непрерывной интеграции и доставки (CI/CD). В этой документации мы рассмотрим использование Docker Swarm для оркестрации, управление правами и секретами для повышения безопасности, а также интеграцию Docker с CI/CD системами. Все примеры будут приведены для НАЙС ОС с использованием пакетного менеджера tdnf.

Использование Docker Swarm для оркестрации

Docker Swarm — это нативный оркестратор контейнеров для Docker, который позволяет создавать, управлять и масштабировать контейнерные приложения в кластере Docker-движков. Он обеспечивает балансировку нагрузки, автоматическое восстановление и масштабирование контейнеров.

Инициализация Docker Swarm

Для создания кластера Docker Swarm необходимо инициализировать главный узел (менеджер). Выполните следующую команду на основном узле:


sudo docker swarm init --advertise-addr 

Эта команда инициализирует кластер и выведет команду для добавления рабочих узлов (воркеров) к кластеру.

Добавление узлов в кластер

Для добавления рабочих узлов в кластер выполните команду, выведенную при инициализации кластера, на каждом рабочем узле:


sudo docker swarm join --token  :2377

Создание и управление службами

Службы в Docker Swarm представляют собой один или несколько контейнеров, которые автоматически распределяются по узлам кластера. Для создания службы используйте команду docker service create:


sudo docker service create --name my-service --replicas 3 -p 80:80 nginx

Эта команда создаст службу my-service, состоящую из трех реплик контейнера Nginx, доступного на порту 80.

Основные команды для управления службами

  • docker service ls: отображает список служб.
  • docker service ps my-service: отображает задачи, связанные со службой.
  • docker service scale my-service=5: изменяет количество реплик службы.
  • docker service update --image nginx:latest my-service: обновляет образ службы.
  • docker service rm my-service: удаляет службу.

Мониторинг и восстановление служб

Docker Swarm автоматически восстанавливает службы в случае их сбоя, перезапуская контейнеры на доступных узлах. Вы можете использовать встроенные инструменты мониторинга, такие как Docker Dashboard, или сторонние решения, такие как Prometheus и Grafana, для мониторинга состояния кластера и служб.

Секьюрити в Docker: управление правами и секретами

Обеспечение безопасности в Docker включает управление доступом, настройку прав и управление секретами для защиты конфиденциальных данных.

Управление правами доступа

Docker предоставляет несколько уровней управления доступом, включая Docker Content Trust (DCT) для подписания образов и Docker Bench for Security для аудита конфигурации.

Docker Content Trust

DCT позволяет подписывать и проверять образы для обеспечения их целостности. Для включения DCT используйте следующую команду:


export DOCKER_CONTENT_TRUST=1

После включения DCT все команды Docker будут использовать подписи для проверки образов.

Docker Bench for Security

Docker Bench for Security — это скрипт, который проверяет конфигурацию Docker на соответствие рекомендациям по безопасности. Для установки и запуска выполните следующие команды:


sudo tdnf install -y git
git clone https://github.com/docker/docker-bench-security.git
cd docker-bench-security
sudo sh docker-bench-security.sh

Скрипт выполнит серию проверок и выведет рекомендации по улучшению безопасности конфигурации Docker.

Управление секретами

Docker Secrets позволяет безопасно управлять конфиденциальной информацией, такой как пароли, ключи API и сертификаты.

Создание и использование секретов

Для создания секрета используйте команду docker secret create:


echo "my_secret_password" | docker secret create my_secret_password -

Для использования секрета в службе добавьте его в конфигурацию службы:


sudo docker service create --name my-service --secret my_secret_password nginx

Основные команды для управления секретами

  • docker secret ls: отображает список секретов.
  • docker secret inspect my_secret_password: отображает информацию о секрете.
  • docker secret rm my_secret_password: удаляет секрет.

Интеграция Docker с CI/CD системами

Интеграция Docker с системами непрерывной интеграции и доставки (CI/CD) позволяет автоматизировать процесс сборки, тестирования и развертывания приложений. Рассмотрим примеры интеграции Docker с Jenkins и GitLab CI.

Интеграция с Jenkins

Jenkins — это популярная система CI/CD, которая может быть интегрирована с Docker для автоматизации процессов.

Установка Jenkins

Для установки Jenkins на НАЙС ОС выполните следующие команды:


sudo tdnf install -y java-11-openjdk-devel
wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -
sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
sudo tdnf update
sudo tdnf install -y jenkins
sudo systemctl enable jenkins
sudo systemctl start jenkins

Настройка Jenkins для работы с Docker

Добавьте пользователя Jenkins в группу Docker для доступа к командам Docker:


sudo usermod -aG docker jenkins
sudo systemctl restart jenkins

Создание Jenkins Pipeline для работы с Docker

Создайте файл Jenkinsfile в корне вашего проекта:


pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                script {
                    docker.build('my_image')
                }
            }
        }
        stage('Test') {
            steps {
                script {
                    docker.image('my_image').inside {
                        sh 'echo "Running tests"'
                    }
                }
            }
        }
        stage('Deploy') {
            steps {
                script {
                    docker.image('my_image').push('my_registry/my_image:latest')
                }
            }
        }
    }
}

Добавьте этот проект в Jenkins и запустите Pipeline.

Интеграция с GitLab CI

GitLab CI — это встроенная система CI/CD в GitLab, которая может быть интегрирована с Docker для автоматизации процессов.

Настройка GitLab Runner

Для установки и регистрации GitLab Runner на НАЙС ОС выполните следующие команды:


sudo tdnf install -y gitlab-runner
sudo gitlab-runner register

Следуйте инструкциям для регистрации Runner с вашим GitLab проектом.

Создание GitLab CI Pipeline для работы с Docker

Создайте файл .gitlab-ci.yml в корне вашего проекта:


stages:
  - build
  - test
  - deploy

build:
  stage: build
  script:
    - docker build -t my_image .

test:
  stage: test
  script:
    - docker run my_image /bin/sh -c "echo 'Running tests'"

deploy:
  stage: deploy
  script:
    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
    - docker push $CI_REGISTRY/my_image:latest

Добавьте этот файл в ваш GitLab репозиторий и запустите Pipeline через GitLab.

Интеграция с другими CI/CD системами

Docker также может быть интегрирован с другими системами CI/CD, такими как Travis CI, CircleCI, Bamboo и другие. Основные шаги для интеграции обычно включают установку Docker на CI/CD агенте, создание конфигурационных файлов для описания Pipeline и настройку доступа к Docker Registry.

Продвинутые возможности Docker Compose

Docker Compose позволяет определять и запускать многоконтейнерные приложения. Рассмотрим продвинутые возможности Docker Compose, такие как использование переменных окружения, зависимостей между службами и масштабирования.

Использование переменных окружения

Docker Compose поддерживает использование переменных окружения для конфигурации контейнеров. Создайте файл .env с переменными окружения:


MYSQL_ROOT_PASSWORD=my-secret-pw
MYSQL_DATABASE=mydb

Используйте переменные окружения в файле docker-compose.yml:


version: '3.1'

services:
  db:
    image: mysql
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_DATABASE: ${MYSQL_DATABASE}

  web:
    image: wordpress
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_NAME: ${MYSQL_DATABASE}
      WORDPRESS_DB_PASSWORD: ${MYSQL_ROOT_PASSWORD}
    depends_on:
      - db

Масштабирование служб

Для масштабирования служб используйте команду docker-compose up --scale:


docker-compose up --scale web=3

Эта команда запустит три экземпляра службы web.

Использование зависимостей между службами

Docker Compose позволяет определять зависимости между службами, чтобы они запускались в правильном порядке. В приведенном выше примере служба web зависит от службы db и не будет запущена, пока не будет готова служба db.

Обновление и развертывание с Docker Compose

Docker Compose позволяет легко обновлять и развертывать многоконтейнерные приложения. Для обновления используйте команду docker-compose pull для загрузки новых образов и docker-compose up для перезапуска служб:


docker-compose pull
docker-compose up -d

Docker предоставляет мощные инструменты для управления контейнерами, обеспечения безопасности и интеграции с CI/CD системами. Понимание продвинутых возможностей, таких как использование Docker Swarm для оркестрации, управление правами и секретами, а также интеграция с CI/CD системами, поможет вам эффективно использовать Docker в вашей ИТ-инфраструктуре.