Linux

Docker для Linux: установка и базовые команды с примерами

Это руководство поможет новичкам освоить Docker на Linux: от установки до управления контейнерами. Вы сможете запускать изолированные приложения и создавать собственные образы.

Обновлено 17 февраля 2026 г.
10-15 мин
Низкая
FixPedia Team
Применимо к:Ubuntu 22.04+Debian 11+CentOS 8+Docker 20.10+

Введение / Зачем это нужно

Docker — это платформа для контейнеризации, которая позволяет упаковывать приложения и их зависимости в изолированные, переносимые среды — контейнеры. На Linux это особенно удобно, поскольку Docker использует встроенные возможности ядра (cgroups, namespaces). После прохождения этого гайда вы сможете:

  • Установить и настроить Docker Engine на свой сервер или рабочую станциюю.
  • Запускать, останавливать и удалять контейнеры.
  • Работать с образами: искать, скачивать, создавать свои.
  • Понять базовый синтаксис Dockerfile для автоматизации сборки.

Это основа для дальнейшего изучения оркестрации (Kubernetes) и CI/CD-пайплайнов.

Требования / Подготовка

Перед началом убедитесь, что:

  1. У вас есть доступ к терминалу Linux (Ubuntu, Debian, CentOS, Fedora и т.д.) с правами sudo.
  2. Система 64-битная (x86_64/amd64 или arm64).
  3. Подключение к интернету для загрузки пакетов и образов.
  4. (Опционально) Базовое понимание командной строки и управления пакетами (apt, yum, dnf).

Шаг 1: Установка Docker Engine

Установка через официальный репозиторий — самый надежный способ.

Для Ubuntu/Debian:

# 1. Обновите индекс пакетов и установите зависимости
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg

# 2. Добавьте официальный GPG-ключ Docker
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# 3. Добавьте репозиторий Docker в sources.list
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 4. Установите Docker Engine, containerd и Docker Compose (plugin)
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Для CentOS/RHEL/Fedora:

# 1. Установите yum-utils (для управления репозиториями)
sudo yum install -y yum-utils

# 2. Добавьте репозиторий Docker
sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

# 3. Установите Docker Engine
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Проверьте установку:

sudo docker version

Вывод должен показать клиент и сервер (Engine) с версиями.

Шаг 2: Настройка прав доступа и первая проверка

По умолчанию команды docker требуют прав sudo. Чтобы запускать контейнеры от обычного пользователя, добавьте его в группу docker.

# Добавьте текущего пользователя в группу docker
sudo usermod -aG docker $USER

# Чтобы изменения вступили в силу, выйдите из системы и зайдите заново,
# или выполните в текущей сессии:
newgrp docker

Теперь проверьте, что всё работает без sudo:

docker run hello-world

Вы должны увидеть приветственное сообщение от Docker, подтверждающее успешную загрузку образа hello-world и запуск контейнера.

Шаг 3: Основные команды для работы с образами

Образ (image) — это шаблон (файловая система + метаданные) для создания контейнеров.

Поиск образа в Docker Hub (официальном репозитории)

docker search nginx

Ключевые колонки: NAME (официальные образы помечены как [OK]), DESCRIPTION, STARS.

Загрузка образа локально

docker pull ubuntu:22.04

Эта команда скачает последний LTS-образ Ubuntu 22.04. Если тег не указан, используется latest.

Список локальных образов

docker images

Обратите внимание на колонки: REPOSITORY, TAG, IMAGE ID, SIZE.

Удаление образа

docker rmi ubuntu:22.04

Если образ используется запущенным контейнером, его удаление невозможно. Сначала удалите контейнер.

Шаг 4: Запуск и управление контейнерами

Контейнер (container) — это запущенный экземпляр образа.

Запуск контейнера в интерактивном режиме

docker run -it --name my-ubuntu ubuntu:22.04 /bin/bash
  • -it — интерактивный режим с TTY (терминал).
  • --name — задаёт удобное имя контейнеру (иначе генерируется случайное).
  • После команды вы окажетесь внутри shell контейнера. Для выхода используйте exit.

Запуск контейнера в фоновом режиме (daemon)

docker run -d --name web-server -p 8080:80 nginx:alpine
  • -d — detached mode (контейнер работает в фоне).
  • -p 8080:80 — проброс портов: хост:контейнер. Веб-сервер внутри контейнера слушает порт 80, а снаружи доступен на порту 8080 вашего хоста.
  • Проверить работу: откройте в браузере http://localhost:8080.

Просмотр запущенных контейнеров

docker ps

Ключевые колонки: CONTAINER ID, NAMES, STATUS, PORTS.

Чтобы увидеть все контейнеры (включая остановленные):

docker ps -a

Остановка и удаление контейнера

# Остановить контейнер (сохраняет файловую систему)
docker stop web-server

# Запустить остановленный контейнер
docker start web-server

# Удалить остановленный контейнер
docker rm web-server

# Принудительно удалить запущенный контейнер (данные потеряются!)
docker rm -f web-server

Просмотр логов контейнера

docker logs web-server

Добавьте -f или --follow для отслеживания логов в реальном времени.

Шаг 5: Создание собственного образа через Dockerfile

Dockerfile — это текстовый файл с инструкциями для сборки образа.

  1. Создайте пустую директорию и в ней файл Dockerfile:
    mkdir my-nginx && cd my-nginx
    cat > Dockerfile << 'EOF'
    # Используем официальный легковесный образ Alpine Linux
    FROM alpine:3.18
    
    # Устанавливаем nginx
    RUN apk add --no-cache nginx
    
    # Копируем кастомный конфиг (если есть) или используем дефолтный
    # COPY nginx.conf /etc/nginx/nginx.conf
    
    # Создаём директорию для файлов сайта
    RUN mkdir -p /var/www/html
    
    # Копируем локальный файл index.html в образ
    COPY index.html /var/www/html/index.html
    
    # Открываем порт 80
    EXPOSE 80
    
    # Запускаем nginx в foreground
    CMD ["nginx", "-g", "daemon off;"]
    EOF
    
  2. Создайте простой index.html в той же директории:
    echo "<h1>Hello from my custom Docker image!</h1>" > index.html
    
  3. Соберите образ:
    docker build -t my-custom-nginx:latest .
    
    • -t — тег (имя:версия) образа.
    • . — контекст сборки (текущая директория).
  4. Запустите контейнер из нового образа:
    docker run -d -p 8081:80 --name my-app my-custom-nginx:latest
    

    Откройте http://localhost:8081 — вы увидите свой заголовок.

Проверка результата

Вы успешно освоили базовый цикл работы с Docker, если можете:

  1. Установить Docker на чистую систему Linux.
  2. Запустить контейнер из образа nginx и увидеть страницу в браузере.
  3. Создать Dockerfile, собрать из него образ и запустить контейнер.
  4. Остановить и удалить все созданные ресурсы:
    docker stop my-ubuntu web-server my-app
    docker rm my-ubuntu web-server my-app
    docker rmi ubuntu:22.04 nginx:alpine my-custom-nginx:latest
    

Возможные проблемы

Ошибка: Got permission denied while trying to connect to the Docker daemon socket...

Причина: Текущий пользователь не в группе docker или сессия не перезагружена. Решение: Выполните sudo usermod -aG docker $USER, выйдите из терминала и зайдите заново (или newgrp docker).

Контейнер мгновенно завершается после запуска

Причина: Основной процесс внутри контейнера завершился (например, команда docker run ubuntu echo "test"). Решение: Для долгоживущих контейнеров (веб-серверы, базы) основной процесс должен работать в foreground (как nginx -g 'daemon off;'). Используйте docker logs <container_id> для просмотра причины завершения.

Не хватает места на диске

Причина: Накопление образов, контейнеров, вольюмов. Решение: Очистите неиспользуемые ресурсы:

# Удалить все остановленные контейнеры, неиспользуемые сети и dangling-образы
docker system prune

# Удалить ВСЕ неиспользуемые данные (осторожно!)
docker system prune -a --volumes

Часто задаваемые вопросы

В чём разница между Docker-образом и контейнером?
Нужно ли использовать sudo с каждой командой docker?
Как удалить все остановленные контейнеры?
Можно ли запускать Docker без root-прав в production?

Полезное

Установите Docker Engine
Запустите тестовый контейнер
Управление образами
Запуск и управление контейнерами
Создайте простой Dockerfile