DevOps старт: с чего начать в 2026

    Полный гайд по старту в DevOps: Docker, CI/CD, Infrastructure as Code, облачные платформы. Практические примеры, команды, проекты для портфолио.

    Введение: что такое DevOps

    DevOps — это культура и практики, которые объединяют разработку (Development) и эксплуатацию (Operations). Цель DevOps — автоматизировать процессы разработки, тестирования и развертывания приложений, чтобы выпускать обновления быстрее и надежнее.

    Основные задачи DevOps-инженера:

    • Настройка CI/CD пайплайнов для автоматической сборки и деплоя
    • Работа с контейнерами (Docker) и оркестрацией (Kubernetes)
    • Управление инфраструктурой через код (Terraform, Ansible)
    • Мониторинг и логирование сервисов
    • Автоматизация рутинных задач
    • Обеспечение безопасности инфраструктуры

    Для старта в DevOps нужно знать Linux, основы программирования (Bash, Python), понимать, как работают приложения и сети. Можно начать с позиции DevOps-ассистента или перейти из системного администрирования.

    Docker: контейнеризация приложений

    Docker — это платформа для контейнеризации приложений. Контейнер упаковывает приложение и все его зависимости в единый образ, который работает одинаково на любой системе.

    Установка Docker

    Для Linux (Ubuntu/Debian):

    # Обновляем пакеты
    sudo apt update
    
    # Устанавливаем зависимости
    sudo apt install apt-transport-https ca-certificates curl gnupg lsb-release
    
    # Добавляем официальный GPG ключ Docker
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
    
    # Добавляем репозиторий
    echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    
    # Устанавливаем Docker
    sudo apt update
    sudo apt install docker-ce docker-ce-cli containerd.io
    
    # Запускаем Docker
    sudo systemctl start docker
    sudo systemctl enable docker
    
    # Добавляем пользователя в группу docker (чтобы не использовать sudo)
    sudo usermod -aG docker $USER

    Для проверки установки:

    docker --version
    docker run hello-world

    Базовые команды Docker

    Работа с образами:

    # Скачать образ
    docker pull nginx
    
    # Посмотреть список образов
    docker images
    
    # Удалить образ
    docker rmi nginx
    
    # Поиск образов в Docker Hub
    docker search nginx

    Работа с контейнерами:

    # Запустить контейнер
    docker run -d -p 80:80 --name my-nginx nginx
    
    # Посмотреть запущенные контейнеры
    docker ps
    
    # Посмотреть все контейнеры (включая остановленные)
    docker ps -a
    
    # Остановить контейнер
    docker stop my-nginx
    
    # Запустить остановленный контейнер
    docker start my-nginx
    
    # Удалить контейнер
    docker rm my-nginx
    
    # Посмотреть логи контейнера
    docker logs my-nginx
    
    # Выполнить команду в запущенном контейнере
    docker exec -it my-nginx bash

    Создание Dockerfile

    Dockerfile — это инструкция для создания образа. Пример для Python-приложения:

    # Используем официальный Python образ
    FROM python:3.11-slim
    
    # Устанавливаем рабочую директорию
    WORKDIR /app
    
    # Копируем файл зависимостей
    COPY requirements.txt .
    
    # Устанавливаем зависимости
    RUN pip install --no-cache-dir -r requirements.txt
    
    # Копируем код приложения
    COPY . .
    
    # Открываем порт
    EXPOSE 8000
    
    # Команда запуска
    CMD ["python", "app.py"]

    Сборка образа:

    docker build -t my-app:latest .
    
    # Запуск контейнера из образа
    docker run -d -p 8000:8000 --name my-app my-app:latest

    Docker Compose

    Docker Compose позволяет управлять несколькими контейнерами через один файл. Пример docker-compose.yml:

    version: '3.8'
    
    services:
      web:
        build: .
        ports:
          - "8000:8000"
        environment:
          - DATABASE_URL=postgresql://user:pass@db:5432/mydb
        depends_on:
          - db
      
      db:
        image: postgres:15
        environment:
          POSTGRES_USER: user
          POSTGRES_PASSWORD: pass
          POSTGRES_DB: mydb
        volumes:
          - postgres_data:/var/lib/postgresql/data
    
    volumes:
      postgres_data:

    Команды Docker Compose:

    # Запустить все сервисы
    docker-compose up -d
    
    # Остановить все сервисы
    docker-compose down
    
    # Посмотреть логи
    docker-compose logs -f
    
    # Пересобрать образы
    docker-compose build

    Оптимизация Dockerfile

    Многослойная сборка: копируем зависимости отдельно от кода, чтобы использовать кэш:

    FROM python:3.11-slim
    WORKDIR /app
    
    # Сначала копируем только requirements.txt
    COPY requirements.txt .
    RUN pip install --no-cache-dir -r requirements.txt
    
    # Потом копируем код (этот слой пересобирается только при изменении кода)
    COPY . .
    
    EXPOSE 8000
    CMD ["python", "app.py"]

    Использование .dockerignore: исключаем ненужные файлы из образа:

    # .dockerignore
    __pycache__
    *.pyc
    .git
    .env
    node_modules
    *.md

    CI/CD: автоматизация сборки и деплоя

    CI/CD (Continuous Integration / Continuous Deployment) — это практика автоматической сборки, тестирования и развертывания кода при каждом изменении.

    GitHub Actions

    GitHub Actions — встроенная система CI/CD в GitHub. Создайте файл .github/workflows/ci.yml:

    name: CI/CD Pipeline
    
    on:
      push:
        branches: [ main, develop ]
      pull_request:
        branches: [ main ]
    
    jobs:
      build-and-test:
        runs-on: ubuntu-latest
        
        steps:
        - name: Checkout code
          uses: actions/checkout@v3
        
        - name: Set up Python
          uses: actions/setup-python@v4
          with:
            python-version: '3.11'
        
        - name: Install dependencies
          run: |
            pip install -r requirements.txt
            pip install pytest
        
        - name: Run linter
          run: |
            pip install flake8
            flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
        
        - name: Run tests
          run: pytest
        
        - name: Build Docker image
          run: docker build -t my-app:${{ github.sha }} .
        
        - name: Push to registry (optional)
          if: github.ref == 'refs/heads/main'
          run: |
            echo "Deploy to production"
            # Здесь команды для деплоя

    GitLab CI

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

    stages:
      - build
      - test
      - deploy
    
    variables:
      DOCKER_DRIVER: overlay2
    
    build:
      stage: build
      script:
        - docker build -t my-app:$CI_COMMIT_SHA .
        - docker tag my-app:$CI_COMMIT_SHA my-app:latest
      only:
        - main
        - develop
    
    test:
      stage: test
      image: python:3.11
      script:
        - pip install -r requirements.txt
        - pip install pytest
        - pytest
      only:
        - main
        - develop
    
    deploy:
      stage: deploy
      script:
        - echo "Deploying to production..."
        - # Команды для деплоя
      only:
        - main
      when: manual

    Практический пример: деплой на сервер

    Пример пайплайна для деплоя веб-приложения:

    name: Deploy to Server
    
    on:
      push:
        branches: [ main ]
    
    jobs:
      deploy:
        runs-on: ubuntu-latest
        steps:
        - uses: actions/checkout@v3
        
        - name: Deploy via SSH
          uses: appleboy/ssh-action@master
          with:
            host: ${{ secrets.HOST }}
            username: ${{ secrets.USERNAME }}
            key: ${{ secrets.SSH_KEY }}
            script: |
              cd /var/www/my-app
              git pull
              docker-compose down
              docker-compose up -d --build
              docker system prune -f

    Infrastructure as Code: Terraform

    Terraform — инструмент для управления инфраструктурой через код. Позволяет описывать серверы, сети, базы данных в файлах конфигурации.

    Установка Terraform

    # Linux
    wget https://releases.hashicorp.com/terraform/1.6.0/terraform_1.6.0_linux_amd64.zip
    unzip terraform_1.6.0_linux_amd64.zip
    sudo mv terraform /usr/local/bin/
    
    # Проверка
    terraform version

    Базовый пример: создание сервера в Yandex Cloud

    Создайте файл main.tf:

    terraform {
      required_providers {
        yandex = {
          source = "yandex-cloud/yandex"
          version = "~> 0.100"
        }
      }
    }
    
    provider "yandex" {
      token     = var.yandex_token
      cloud_id  = var.cloud_id
      folder_id = var.folder_id
      zone      = "ru-central1-a"
    }
    
    resource "yandex_compute_instance" "vm" {
      name        = "my-vm"
      platform_id = "standard-v2"
    
      resources {
        cores  = 2
        memory = 4
      }
    
      boot_disk {
        initialize_params {
          image_id = "fd8kdq6d0p8sij7h5qe3" # Ubuntu 22.04
          size     = 20
        }
      }
    
      network_interface {
        subnet_id = yandex_vpc_subnet.subnet.id
        nat       = true
      }
    
      metadata = {
        ssh-keys = "ubuntu:${file("~/.ssh/id_rsa.pub")}"
      }
    }
    
    resource "yandex_vpc_network" "network" {
      name = "my-network"
    }
    
    resource "yandex_vpc_subnet" "subnet" {
      name           = "my-subnet"
      zone           = "ru-central1-a"
      network_id     = yandex_vpc_network.network.id
      v4_cidr_blocks = ["10.0.1.0/24"]
    }

    Создайте файл variables.tf:

    variable "yandex_token" {
      description = "Yandex Cloud OAuth token"
      type        = string
      sensitive   = true
    }
    
    variable "cloud_id" {
      description = "Yandex Cloud ID"
      type        = string
    }
    
    variable "folder_id" {
      description = "Yandex Cloud Folder ID"
      type        = string
    }

    Создайте файл terraform.tfvars (не коммитьте в Git!):

    yandex_token = "your-token"
    cloud_id     = "your-cloud-id"
    folder_id    = "your-folder-id"

    Команды Terraform:

    # Инициализация
    terraform init
    
    # Планирование изменений
    terraform plan
    
    # Применение изменений
    terraform apply
    
    # Уничтожение инфраструктуры
    terraform destroy
    
    # Просмотр состояния
    terraform show

    Модули Terraform

    Модули позволяют переиспользовать код. Структура:

    modules/
      webserver/
        main.tf
        variables.tf
        outputs.tf

    Использование модуля:

    module "webserver" {
      source = "./modules/webserver"
      
      instance_count = 2
      instance_type  = "standard-v2"
    }

    Облачные платформы

    Для DevOps важно знать облачные платформы. В России популярны Yandex Cloud и VK Cloud (бывший Mail.ru Cloud Solutions).

    Yandex Cloud

    Основные сервисы:

    • Compute Cloud — виртуальные машины
    • Object Storage — хранилище файлов (аналог S3)
    • Managed Kubernetes — управляемый Kubernetes
    • Container Registry — реестр Docker-образов
    • Load Balancer — балансировка нагрузки

    Начало работы:

    1. Зарегистрируйтесь на cloud.yandex.ru
    2. Создайте облако и каталог
    3. Получите OAuth токен
    4. Установите Yandex Cloud CLI

    AWS (для международных проектов)

    Основные сервисы:

    • EC2 — виртуальные машины
    • S3 — хранилище объектов
    • RDS — управляемые базы данных
    • EKS — управляемый Kubernetes
    • Lambda — serverless функции

    Практические проекты для портфолио

    Проект 1: Настройка CI/CD для веб-приложения

    • Создайте простое веб-приложение (Python/Node.js)
    • Напишите Dockerfile
    • Настройте GitHub Actions для автоматической сборки и тестирования
    • Задеплойте на сервер через CI/CD
    • Опубликуйте на GitHub с README

    Проект 2: Инфраструктура через Terraform

    • Опишите инфраструктуру для приложения (сервер, БД, сеть)
    • Используйте модули для переиспользования
    • Настройте переменные и outputs
    • Задокументируйте в README

    Проект 3: Мониторинг и логирование

    • Настройте Prometheus для сбора метрик
    • Создайте дашборды в Grafana
    • Настройте алерты
    • Настройте сбор логов (ELK Stack или Loki)

    Ресурсы для изучения

    Официальная документация:

    Курсы и туториалы:

    • Docker для начинающих — официальный туториал
    • Terraform Learn — интерактивные туториалы от HashiCorp
    • Kubernetes Basics — официальный курс

    Практика:

    • Создавайте проекты и публикуйте на GitHub
    • Используйте бесплатные tier облачных платформ
    • Читайте блоги и статьи на Habr, Medium
    • Участвуйте в open-source проектах

    Заключение

    DevOps — это практическая область. Начните с Docker, затем изучите CI/CD, потом Terraform. Делайте проекты, публикуйте на GitHub, описывайте в резюме. Для первого оффера достаточно знать Docker, основы CI/CD и Linux. Kubernetes и продвинутые темы можно изучать на работе.

    Следующие шаги:

    1. Установите Docker и попрактикуйтесь с базовыми командами
    2. Создайте Dockerfile для простого приложения
    3. Настройте CI/CD пайплайн для своего проекта
    4. Изучите Terraform на примере создания сервера в облаке
    5. Соберите портфолио из 2-3 проектов

    Полезно? Подпишитесь на Telegram

    Вступить в канал