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

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

Автор — Дмитрий Тыльный, Senior DevOps · 10 января 2026 · 25 мин
DevOps старт: с чего начать в 2026

Введение: что такое 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 проектов

Частые вопросы

Можно ли войти в DevOps без опыта?
Сложно: вакансий «с нуля» мало, чаще приходят из администрирования, разработки или QA.

С чего начать изучение?
С Linux и Docker, затем CI/CD, инфраструктура как код и уже потом Kubernetes.

Нужен ли Kubernetes сразу?
Нет. Сначала уверенные Linux, Docker и CI/CD, K8s — следующий шаг.

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

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