Гид по технологиям

Как запустить Ubuntu в Docker

7 min read Docker Обновлено 09 Jan 2026
Как запустить Ubuntu в Docker — пошагово
Как запустить Ubuntu в Docker — пошагово

Ubuntu, запущенный в контейнере Docker

Docker — один из самых популярных инструментов для разработки и развёртывания приложений. Он облегчает упаковку приложений и их зависимостей в лёгкие контейнеры, которые запускаются одинаково в разных окружениях. В этой статье мы пошагово покажем, как получить минимальный образ Ubuntu, запустить его в Docker, выполнить базовые команды, сохранить состояние и настроить персистентность данных.

Зачем запускать Ubuntu в Docker

Коротко: контейнеры дают изоляцию и предсказуемость окружения без нагрузки полной виртуальной машины. Ubuntu в Docker полезен, когда вам нужен знакомый пользовательский опыт (apt, Bash, знакомые пакеты) в лёгком контейнере для разработки, тестирования или CI.

Когда контейнеры подходят лучше всего:

  • Быстрая изоляция среды разработки.
  • Лёгкие тестовые стенды и CI-пайплайны.
  • Эксперименты с пакетами без изменения хоста.

Когда стоит выбрать виртуальную машину вместо контейнера:

  • Нужен полноценный отдельный kernel или загрузчик.
  • Требуется GUI/десктоп со сложным графическим стеком.
  • Требуется полная имитация отдельного физического сервера.

Шаг 1: Получение образа Ubuntu для Docker

Если Docker ещё не установлен, установите его на вашу ОС (Ubuntu, macOS или Windows). Официальные и проверенные образы обычно публикуют на Docker Hub — это рекомендуемый источник. Также у облачных провайдеров есть собственные репозитории образов.

Чтобы загрузить последний официальный образ Ubuntu, выполните:

sudo docker pull ubuntu

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

sudo docker pull ubuntu:22.04
sudo docker pull ubuntu:20.04

Посмотреть все локальные образы можно командой:

sudo docker images

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

Советы:

  • При необходимости указывайте конкретный тег (например, :22.04) — это даёт предсказуемость.
  • Для приватных образов используйте собственный реестр или службу облака.

Шаг 2: Запуск образа Ubuntu в Docker

Образ — это «чертёж», а контейнер — запущенная копия образа. Чтобы запустить Ubuntu в интерактивном режиме и попасть в Bash, выполните:

sudo docker run -ti --rm ubuntu /bin/bash

Разбор флагов:

  • -ti: интерактивный терминал (TTY + stdin).
  • –rm: удалить контейнер автоматически после остановки.
  • /bin/bash: команда, которая запускается внутри контейнера (интерактивная оболочка).

После запуска вы окажетесь в окружении Bash под root-пользователем. Контейнер получает случайное имя и hostname по умолчанию. Обратите внимание: образ минимален — в нём нет GUI и многих из привычных утилит.

Docker, запускающий контейнер Ubuntu

Выполнение команд Linux в Ubuntu Docker

Многие стандартные утилиты могут отсутствовать в минимальном образе. Например, команда lsb_release часто недоступна. Вместо этого можно читать системный файл:

cat /etc/os-release

Информация о ОС Ubuntu внутри Docker

Чтобы получить более подробную информацию или установить недостающие утилиты, обновите индексы пакетов и установите нужные пакеты. Пример для установки lsb-core:

apt update && apt install lsb-core

Замечания:

  • sudo не нужен, так как вы обычно в контейнере под root.
  • Для долгоживущих контейнеров и продакшн-образов лучше заранее включать нужные пакеты в Dockerfile, а не устанавливать их вручную.

Пример Dockerfile (минимальный):

FROM ubuntu:22.04
RUN apt-get update && apt-get install -y lsb-core curl vim && rm -rf /var/lib/apt/lists/*
CMD ["/bin/bash"]

Это обеспечивает повторяемость сборки образа и избавляет от ручных действий в запущенном контейнере.

Сохранение состояния контейнера

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

Сначала найдите ID работающего контейнера:

sudo docker ps

Список запущенных контейнеров Docker

Затем создайте образ из контейнера:

sudo docker commit -p  myubuntu

Примечания:

  • Замените на реальный ID контейнера.
  • Имена образов должны быть в нижнем регистре.
  • Флаг -p позволяет приостановить контейнер перед фиксацией, чтобы минимизировать неконсистентность.

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

Дополнительно: если вы хотите разметить и отправить образ в реестр, используйте docker tag и docker push:

sudo docker tag myubuntu myregistry.example.com/myubuntu:latest
sudo docker push myregistry.example.com/myubuntu:latest

Для публичного Docker Hub:

sudo docker tag myubuntu yourhubusername/myubuntu:latest
sudo docker login
sudo docker push yourhubusername/myubuntu:latest

Не забудьте, что для push в приватные репозитории требуется аутентификация.

Персистентность данных: тома и монтирования

Есть два распространённых способа сохранять данные за пределами контейнера:

  1. Bind mount (прямое монтирование каталога хоста).
  2. Docker volumes (именованные и управляемые Docker тома).

Docker рекомендует использовать volumes, поскольку они более изолированы и протестированы для производительности и бэкапов. Однако bind mounts удобны для разработки, когда нужно быстро монтировать код из домашнего каталога.

Пример создания каталога на хосте и запуска контейнера с монтированием:

sudo mkdir -p ~/Docker_Share
sudo docker run -ti --rm -v ~/Docker_Share:/data ubuntu /bin/bash

В контейнере появится каталог /data, который привязан к ~/Docker_Share на хосте. Все изменения синхронизируются в обе стороны.

Пример с именованным томом:

sudo docker volume create my_data_volume
sudo docker run -ti --rm -v my_data_volume:/data ubuntu /bin/bash

Плюсы volumes:

  • Не зависят от структуры файловой системы хоста.
  • Легче переносить между хостами (при использовании драйверов резервного копирования).
  • Управление через docker volume команды.

Для docker-compose вы можете описать монтирования и тома в файле docker-compose.yml, что упрощает повторяемость окружения.

Сравнение с виртуальными машинами

Контейнеры легче, быстрее и проще масштабируются, но не заменяют виртуальные машины во всех сценариях. Контейнеры делят kernel хоста, поэтому они не подходят, если нужен отдельный kernel или сложный GUI. В других случаях контейнеры — экономичная и быстрая альтернатива для разработки и микросервисов.

Когда предпочесть VM:

  • Требуется изоляция на уровне ядра.
  • Необходимо тестировать разные ядра и драйверы.
  • Нужен полноценный десктоп со сложным GUI и аппаратным доступом.

Когда выбрать контейнер:

  • Быстрое развертывание сервисов и их тестирование.
  • CI/CD, лёгкие микросервисы, автоматизированные сборки.

Безопасность и лучшие практики

Короткая шпаргалка по безопасности при работе с Ubuntu в Docker:

  • Избегайте запуска приложений в контейнере под root-пользователем. Создавайте непривилегированных пользователей и используйте USER в Dockerfile.
  • Не запускайте контейнеры с флагом –privileged без крайней необходимости.
  • Ограничьте ресурсы контейнера флагами –memory и –cpus.
  • Используйте read-only файловые системы, где это возможно.
  • Сканируйте образы на уязвимости (инструменты сканирования образов помогают выявлять CVE).
  • Поддерживайте образы обновлёнными и пересобирайте их после обновлений зависимостей.
  • Применяйте политики для управления доступом к реестру и к запуску контейнеров в продакшне.

Пример пользовательских и ресурсных ограничений при запуске:

sudo docker run -ti --rm --user 1000:1000 --memory 512m --cpus 0.5 ubuntu /bin/bash

Чек-лист по ролям

Для разных ролей — краткий практический чек-лист.

Разработчик:

  • Использовать bind mounts для локальной разработки.
  • Писать Dockerfile для воспроизводимости.
  • Запускать контейнеры без –privileged.

DevOps / SRE:

  • Автоматизировать сборку и публикацию образов (CI/CD).
  • Хранить секреты в безопасном хранилище, не в образах.
  • Настроить мониторинг и лимиты ресурсов.

Инженер по безопасности:

  • Сканировать образы на уязвимости.
  • Настроить политики запуска контейнеров (Pod Security Policies, если K8s).
  • Проверять права доступа к реестру и томам.

QA:

  • Автоматически поднимать тестовые контейнеры в CI.
  • Использовать предсказуемые теги образов для тестирования.
  • Очищать артефакты и тома после тестов.

Шпаргалка команд (cheat sheet)

Основные команды, которые пригодятся при работе с Ubuntu в Docker:

# Скачать образ
sudo docker pull ubuntu:22.04

# Запустить интерактивный контейнер
sudo docker run -ti --rm ubuntu /bin/bash

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

# Список запущенных контейнеров
sudo docker ps

# Сохранить состояние контейнера в новый образ
sudo docker commit -p  myubuntu

# Пометить и запушить образ в реестр
sudo docker tag myubuntu yourhubusername/myubuntu:latest
sudo docker push yourhubusername/myubuntu:latest

# Создать именованный том и запустить с ним
sudo docker volume create my_data_volume
sudo docker run -ti --rm -v my_data_volume:/data ubuntu /bin/bash

# Остановить контейнер
sudo docker stop 

Критерии приёмки

Убедитесь, что следующие пункты выполнены перед переходом в следующую стадию работы с образом или деплоем:

  • Образ собран с фиксированным тегом и описан в Dockerfile.
  • Все необходимые пакеты установлены или доступны через том/volume.
  • Не храните секреты в образе — используйте секреты/переменные окружения и безопасные хранилища.
  • Контейнер запускается под непривилегированным пользователем в продакшене.
  • Данные, которые нужно сохранить, монтируются в тома или на внешнее хранилище.

Типичные проблемы и устранение неполадок

  1. Проблема: контейнер запускается, но нужная утилита отсутствует. Решение: установить пакет через apt или добавить установку в Dockerfile.

  2. Проблема: файлы не видны на хосте после монтирования. Решение: проверьте права доступа и путь монтирования, убедитесь, что в контейнере записаны файлы именно в смонтированный каталог.

  3. Проблема: образ слишком большой. Решение: минимизируйте слои, удаляйте кэш apt (rm -rf /var/lib/apt/lists/*), используйте более лёгкие базовые образы или стратегію multi-stage сборки.

Полезные практики при работе с Ubuntu в Docker

  • Автоматизируйте сборку образов через CI, не правьте критические пакеты вручную в запущенных контейнерах.
  • Версионируйте теги образов (semver или дата), избегайте использования :latest в продакшене.
  • Документируйте зависимости и шаги для локального запуска.

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

  • Образ: файл с инструкциями и файлами, из которого создаётся контейнер.
  • Контейнер: запускаемая из образа изолированная среда.
  • Том (volume): способ хранить данные вне жизненного цикла контейнера.

Краткое резюме

  • Ubuntu в Docker даёт знакомое окружение в лёгкой и быстро стартующей упаковке.
  • Используйте Dockerfile и теги для воспроизводимости.
  • Для персистентности применяйте тома или bind mounts.
  • Соблюдайте лучшие практики безопасности: непривилегированные пользователи и ограничения ресурсов.

Важно: контейнеры экономичны и удобны, но не всегда заменяют виртуальные машины. Выбирайте инструмент под задачу.

Краткие рекомендации для следующего шага: создайте Dockerfile с нужными пакетами, автоматизируйте сборку и поместите образ в приватный реестр или Docker Hub для совместного использования.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

RDP: полный гид по настройке и безопасности
Инфраструктура

RDP: полный гид по настройке и безопасности

Android как клавиатура и трекпад для Windows
Гайды

Android как клавиатура и трекпад для Windows

Советы и приёмы для работы с PDF
Документы

Советы и приёмы для работы с PDF

Calibration в Lightroom Classic: как и когда использовать
Фото

Calibration в Lightroom Classic: как и когда использовать

Отключить Siri Suggestions на iPhone
iOS

Отключить Siri Suggestions на iPhone

Рисование таблиц в Microsoft Word — руководство
Office

Рисование таблиц в Microsoft Word — руководство