Введение / Зачем это нужно
Docker — это платформа для контейнеризации, которая позволяет упаковывать приложения и их зависимости в изолированные, переносимые среды — контейнеры. На Linux это особенно удобно, поскольку Docker использует встроенные возможности ядра (cgroups, namespaces). После прохождения этого гайда вы сможете:
- Установить и настроить Docker Engine на свой сервер или рабочую станциюю.
- Запускать, останавливать и удалять контейнеры.
- Работать с образами: искать, скачивать, создавать свои.
- Понять базовый синтаксис Dockerfile для автоматизации сборки.
Это основа для дальнейшего изучения оркестрации (Kubernetes) и CI/CD-пайплайнов.
Требования / Подготовка
Перед началом убедитесь, что:
- У вас есть доступ к терминалу Linux (Ubuntu, Debian, CentOS, Fedora и т.д.) с правами
sudo. - Система 64-битная (x86_64/amd64 или arm64).
- Подключение к интернету для загрузки пакетов и образов.
- (Опционально) Базовое понимание командной строки и управления пакетами (
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 — это текстовый файл с инструкциями для сборки образа.
- Создайте пустую директорию и в ней файл
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 - Создайте простой
index.htmlв той же директории:echo "<h1>Hello from my custom Docker image!</h1>" > index.html - Соберите образ:
docker build -t my-custom-nginx:latest .-t— тег (имя:версия) образа..— контекст сборки (текущая директория).
- Запустите контейнер из нового образа:
docker run -d -p 8081:80 --name my-app my-custom-nginx:latest
Откройтеhttp://localhost:8081— вы увидите свой заголовок.
Проверка результата
Вы успешно освоили базовый цикл работы с Docker, если можете:
- Установить Docker на чистую систему Linux.
- Запустить контейнер из образа
nginxи увидеть страницу в браузере. - Создать
Dockerfile, собрать из него образ и запустить контейнер. - Остановить и удалить все созданные ресурсы:
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