Какая команда запускает контейнер в Docker?

«Какая команда запускает контейнер в Docker?» — вопрос из категории Docker, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Основная команда для запуска контейнера — docker run. Однако в реальной DevOps-практике я редко запускаю контейнеры вручную. Вместо этого я использую оркестраторы (Kubernetes) или сервисы запуска (Docker Compose). Вот контекст для каждого подхода:

  1. Базовый запуск (для тестирования образа):

    docker run -d --name test-nginx -p 8080:80 nginx:alpine
    • -d (detached): Запуск в фоне.
    • --name: Присвоение имени для последующего управления (docker stop test-nginx).
    • -p 8080:80: Проброс порта с хоста на контейнер.
  2. Запуск с переменными окружения и томами (ближе к продакшену):

    docker run -d 
      --name my-app 
      -e DATABASE_URL=postgres://user:pass@host/db 
      -v /host/path/config:/app/config 
      my-registry/app:latest
  3. Практика в DevOps: Прямой docker run не используется для рабочих нагрузок. Вместо этого:

    • Локальная разработка: Используется docker-compose up, который читает конфигурацию из docker-compose.yml.
    • Продакшен: Контейнеры запускаются через Kubernetes, где желаемое состояние описывается в YAML-манифестах (Deployment, StatefulSet). Команда kubectl apply -f deployment.yaml предпочтительнее, так как обеспечивает отказоустойчивость, масштабирование и управление жизненным циклом.
      # deployment.yaml для Kubernetes
      apiVersion: apps/v1
      kind: Deployment
      spec:
      template:
      spec:
        containers:
        - name: app
          image: my-registry/app:latest
          env:
          - name: DATABASE_URL
            valueFrom:
              secretKeyRef:
                name: app-secrets
                key: database-url

      Таким образом, docker run — это низкоуровневая команда, в то время как в DevOps фокус смещен на декларативное управление контейнерами с помощью оркестраторов.