- Home »

Как установить и использовать Docker на Ubuntu 24 — Полное руководство
Рано или поздно каждый системный администратор и разработчик сталкивается с задачей развертывания приложений на серверах. И тут на помощь приходит Docker — технология контейнеризации, которая кардинально изменила подход к управлению инфраструктурой. Если вы устали от “а у меня на машине работает” и хотите создавать предсказуемую среду выполнения, то эта статья для вас.
Мы разберем установку Docker на Ubuntu 24 от А до Я, покажем практические примеры использования и поделимся лайфхаками, которые сэкономят вам часы отладки. Готовы погрузиться в мир контейнеров? Поехали!
Что такое Docker и зачем он нужен?
Docker — это платформа для разработки, доставки и запуска приложений в контейнерах. Если объяснять простыми словами, то контейнер — это легковесная виртуальная машина, которая содержит все необходимые компоненты для работы приложения: код, runtime, системные инструменты, библиотеки и настройки.
Основные преимущества Docker:
- Изоляция процессов и ресурсов
- Быстрое развертывание и масштабирование
- Единообразная среда выполнения
- Эффективное использование системных ресурсов
- Простота управления зависимостями
Установка Docker на Ubuntu 24
Перед установкой убедитесь, что у вас есть VPS или выделенный сервер с Ubuntu 24. Приступим к пошаговой установке:
Шаг 1: Обновление системы
sudo apt update
sudo apt upgrade -y
Шаг 2: Установка необходимых пакетов
sudo apt install apt-transport-https ca-certificates curl software-properties-common -y
Шаг 3: Добавление официального GPG ключа Docker
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
Шаг 4: Добавление репозитория Docker
echo "deb [arch=$(dpkg --print-architecture) 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
Шаг 5: Установка Docker Engine
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
Шаг 6: Проверка установки
sudo docker run hello-world
Если вы видите сообщение “Hello from Docker!”, значит установка прошла успешно!
Настройка Docker для удобной работы
Добавление пользователя в группу docker
Чтобы не писать sudo перед каждой командой Docker, добавьте текущего пользователя в группу docker:
sudo usermod -aG docker $USER
newgrp docker
Настройка автозапуска Docker
sudo systemctl enable docker
sudo systemctl start docker
Основные команды Docker
Вот базовый набор команд, которые вам понадобятся для ежедневной работы:
# Просмотр информации о Docker
docker info
# Просмотр версии
docker version
# Поиск образов
docker search nginx
# Скачивание образа
docker pull nginx
# Просмотр локальных образов
docker images
# Запуск контейнера
docker run -d -p 80:80 --name my-nginx nginx
# Просмотр запущенных контейнеров
docker ps
# Просмотр всех контейнеров
docker ps -a
# Остановка контейнера
docker stop my-nginx
# Удаление контейнера
docker rm my-nginx
# Удаление образа
docker rmi nginx
Практические примеры использования
Пример 1: Веб-сервер Nginx
# Запуск Nginx с маппингом портов
docker run -d -p 8080:80 --name web-server nginx
# Проверка работы
curl http://localhost:8080
Пример 2: База данных MySQL
# Запуск MySQL с переменными окружения
docker run -d \
--name mysql-db \
-e MYSQL_ROOT_PASSWORD=mypassword \
-e MYSQL_DATABASE=testdb \
-p 3306:3306 \
mysql:8.0
# Подключение к базе данных
docker exec -it mysql-db mysql -u root -p
Пример 3: Создание собственного образа
Создайте файл Dockerfile:
# Dockerfile
FROM ubuntu:24.04
RUN apt-get update && apt-get install -y \
python3 \
python3-pip \
&& rm -rf /var/lib/apt/lists/*
COPY app.py /app/
WORKDIR /app
CMD ["python3", "app.py"]
Соберите и запустите образ:
docker build -t my-python-app .
docker run -d --name python-container my-python-app
Docker Compose для управления несколькими контейнерами
Для сложных приложений, состоящих из нескольких сервисов, используйте Docker Compose. Создайте файл docker-compose.yml:
version: '3.8'
services:
web:
image: nginx:alpine
ports:
- "80:80"
depends_on:
- app
app:
build: .
ports:
- "5000:5000"
depends_on:
- db
environment:
- DATABASE_URL=mysql://root:password@db:3306/myapp
db:
image: mysql:8.0
environment:
- MYSQL_ROOT_PASSWORD=password
- MYSQL_DATABASE=myapp
volumes:
- mysql_data:/var/lib/mysql
volumes:
mysql_data:
Запуск и управление:
# Запуск всех сервисов
docker compose up -d
# Просмотр логов
docker compose logs
# Остановка сервисов
docker compose down
Управление ресурсами и мониторинг
Ограничение ресурсов
# Ограничение памяти и CPU
docker run -d --memory=512m --cpus="1.0" nginx
# Мониторинг использования ресурсов
docker stats
# Информация о контейнере
docker inspect container_name
Работа с логами
# Просмотр логов контейнера
docker logs container_name
# Отслеживание логов в реальном времени
docker logs -f container_name
# Ограничение размера логов
docker run -d --log-opt max-size=10m --log-opt max-file=3 nginx
Сравнение Docker с альтернативами
Решение | Преимущества | Недостатки | Использование |
---|---|---|---|
Docker | Простота использования, большая экосистема | Демон архитектура, проблемы с безопасностью | Разработка, CI/CD, микросервисы |
Podman | Безопасность, без демона | Меньшая экосистема, сложнее в освоении | Безопасные среды, rootless контейнеры |
LXC/LXD | Системные контейнеры, производительность | Сложность настройки, меньше образов | Виртуализация на системном уровне |
containerd | Низкоуровневый, стабильный | Сложный API, нет высокоуровневых инструментов | Kubernetes, встроенные системы |
Безопасность и лучшие практики
Основные принципы безопасности:
- Используйте официальные образы из Docker Hub
- Регулярно обновляйте образы
- Не запускайте контейнеры от root пользователя
- Используйте multi-stage builds для уменьшения размера образов
- Сканируйте образы на уязвимости
Пример безопасного Dockerfile:
# Multi-stage build
FROM node:18-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
FROM node:18-alpine AS runtime
RUN addgroup -g 1001 -S nodejs
RUN adduser -S nextjs -u 1001
COPY --from=builder /app/node_modules ./node_modules
COPY . .
USER nextjs
EXPOSE 3000
CMD ["node", "server.js"]
Автоматизация и интеграция
Использование с CI/CD
Пример GitLab CI конфигурации:
# .gitlab-ci.yml
build:
stage: build
script:
- docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA .
- docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
deploy:
stage: deploy
script:
- docker pull $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
- docker stop myapp || true
- docker rm myapp || true
- docker run -d --name myapp -p 80:80 $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
Интеграция с системами мониторинга
Пример настройки Prometheus для мониторинга Docker:
# docker-compose.yml для мониторинга
version: '3.8'
services:
prometheus:
image: prom/prometheus
ports:
- "9090:9090"
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
cadvisor:
image: gcr.io/cadvisor/cadvisor:latest
ports:
- "8080:8080"
volumes:
- /:/rootfs:ro
- /var/run:/var/run:rw
- /sys:/sys:ro
- /var/lib/docker/:/var/lib/docker:ro
Полезные инструменты и расширения
Популярные инструменты для работы с Docker:
- Docker Compose — управление многоконтейнерными приложениями
- Docker Bench Security — проверка безопасности Docker
- Dive — анализ слоев Docker образов
- LazyDocker — TUI для управления Docker
- Portainer — веб-интерфейс для Docker
Интересные факты и нестандартные применения
Docker можно использовать не только для веб-приложений. Вот несколько креативных примеров:
- Песочница для тестирования — изолированная среда для экспериментов
- Портабельная среда разработки — одинаковые условия для всей команды
- Запуск GUI приложений — используя X11 forwarding
- Миграция legacy приложений — обертка для старых систем
- Научные вычисления — воспроизводимые исследования
Пример запуска GUI приложения:
docker run -it --rm \
-e DISPLAY=$DISPLAY \
-v /tmp/.X11-unix:/tmp/.X11-unix \
firefox
Оптимизация производительности
Лучшие практики для ускорения работы:
- Используйте .dockerignore для исключения ненужных файлов
- Кэшируйте слои, размещая часто изменяемые инструкции в конце
- Используйте alpine образы для уменьшения размера
- Настройте Docker daemon для оптимальной производительности
Оптимизация daemon.json:
# /etc/docker/daemon.json
{
"storage-driver": "overlay2",
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
},
"default-ulimits": {
"nofile": {
"Name": "nofile",
"Hard": 64000,
"Soft": 64000
}
}
}
Решение типичных проблем
Проблема: Недостаток места на диске
# Очистка неиспользуемых ресурсов
docker system prune -a
# Удаление неиспользуемых образов
docker image prune
# Удаление неиспользуемых volume
docker volume prune
Проблема: Контейнер не может подключиться к другому сервису
# Проверка сетевых настроек
docker network ls
docker network inspect bridge
# Создание пользовательской сети
docker network create my-network
docker run --network my-network nginx
Статистика и тенденции
По данным Stack Overflow Developer Survey 2024, Docker используют более 69% разработчиков, что делает его одним из самых популярных инструментов. Рост использования контейнеризации составляет около 30% в год, что говорит о зрелости технологии.
Интересный факт: Docker Inc. была оценена в $1.3 миллиарда долларов, а экосистема Docker Hub содержит более 13 миллионов образов.
Заключение и рекомендации
Docker кардинально изменил подход к развертыванию приложений и стал стандартом де-факто в современной разработке. Освоив эту технологию, вы получите:
- Упрощенное управление зависимостями
- Быстрое развертывание и масштабирование
- Улучшенную портабельность приложений
- Эффективное использование ресурсов сервера
Рекомендую начать с простых контейнеров, постепенно переходя к более сложным сценариям использования. Помните о безопасности и следуйте лучшим практикам. Docker — это не просто инструмент, это новая философия разработки и эксплуатации приложений.
Для продуктивной работы с Docker вам понадобится надежная серверная инфраструктура. Выбирайте проверенные решения и не экономьте на качестве хостинга — это основа стабильной работы ваших контейнеризованных приложений.
В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.
Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.