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:latestDocker 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
*.mdCI/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 -fInfrastructure 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 — балансировка нагрузки
Начало работы:
- Зарегистрируйтесь на cloud.yandex.ru
- Создайте облако и каталог
- Получите OAuth токен
- Установите 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 и продвинутые темы можно изучать на работе.
Следующие шаги:
- Установите Docker и попрактикуйтесь с базовыми командами
- Создайте Dockerfile для простого приложения
- Настройте CI/CD пайплайн для своего проекта
- Изучите Terraform на примере создания сервера в облаке
- Соберите портфолио из 2-3 проектов