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

Запуск Ubuntu в Docker — пошаговое руководство

7 min read DevOps Обновлено 31 Dec 2025
Запуск Ubuntu в Docker — пошаговое руководство
Запуск Ubuntu в Docker — пошаговое руководство

Важное: команды в примерах запускаются от имени root внутри контейнера; на хосте многие команды требуют sudo.

Что такое Docker (одной строкой)

Docker — инструмент для упаковки приложений и минимальной ОС в контейнеры: изолированные, быстро стартующие процессы с лёгким управлением версиями и зависимостями.

Шаг 1 — получить образ Ubuntu

Docker Hub — основной публичный репозиторий официальных образов. Чтобы скачать последний официальный образ Ubuntu, выполните:

sudo docker pull ubuntu

Если нужен конкретный релиз, используйте тег. Пример для Ubuntu 20.04:

sudo docker pull ubuntu:20.04

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

sudo docker images

Список локальных Docker-образов на компьютере

Советы:

  • Используйте версии с тегами (например, 22.04, 20.04) для повторяемости сборок.
  • Для автоматизации сборок лучше хранить Dockerfile в системе контроля версий, а не полагаться на docker commit.

Шаг 2 — запустить образ Ubuntu в контейнере

Образ — это шаблон, контейнер — его запущенный экземпляр. Для интерактивного запуска с Bash:

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

Что делают флаги:

  • -t и -i (часто сокращённо -ti) — подключают терминал и ввод.
  • –rm — удалить контейнер после остановки.
  • ubuntu — имя образа (может включать тег через двоеточие).
  • /bin/bash — команда, выполняемая в контейнере.

Контейнер стартует как root и обычно получает случайный hostname. Увидите очень «пустой» rootfs: без GUI и без многих утилит, которые знакомы из полноценной установки Ubuntu.

Docker запускает контейнер Ubuntu в терминале

Размер минимального официального образа Ubuntu обычно в районе десятков мегабайт (в зависимости от тега); в исходном примере образ был около 78 MB.

Выполнение команд Linux внутри контейнера

Многие привычные утилиты могут отсутствовать. Например, lsb_release не установлен по умолчанию — образ минимален. Для просмотра информации об ОС можно использовать файл /etc/os-release:

cat /etc/os-release

Вывод информации об Ubuntu внутри Docker

Чтобы установить дополнительные пакеты, сначала обновите индексы APT и установите нужный пакет:

apt update && apt install -y lsb-release

Примечание: sudo не нужен внутри контейнера, если вы в нём работаете как root. На хосте команды docker обычно требуют sudo (или добавления пользователя в группу docker).

Сохранение состояния контейнера (docker commit) — когда и зачем

По умолчанию изменения внутри контейнера непродолжительны: при остановке контейнер удаляется (если использовался –rm) и изменения теряются. Чтобы сохранить текуще состояние в новый образ:

  1. Узнайте ID запущенного контейнера:
sudo docker ps

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

  1. Зафиксируйте состояние в новый образ:
sudo docker commit -p  myubuntu

Флаги и нюансы:

  • -p приостанавливает контейнер перед коммитом, чтобы получить консистентный снимок.
  • Имена образов должны быть в нижнем регистре.
  • docker commit полезен для быстрых экспериментов, но не заменяет Dockerfile и CI/CD-процессы: он создаёт небескриптированный образ, который трудно воспроизводить из кода.

Альтернатива (и лучшая практика): создать Dockerfile с шагами установки пакетов и конфигурации и билдить образ через docker build.

Пример простого Dockerfile:

FROM ubuntu:22.04
RUN apt-get update && apt-get install -y lsb-release curl
CMD ["/bin/bash"]

Сборка образа:

sudo docker build -t myubuntu:22.04 .

Персистентность данных: тома и bind-монты

Чтобы сохранять файлы вне контейнера, используйте Docker-тoмы (volumes) или привязку каталогов (bind mounts).

Создание каталога на хосте:

sudo mkdir -p ~/Docker_Share

Запуск контейнера с привязкой каталога хоста в /data:

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

Поведение:

  • /data внутри контейнера будет отображать содержимое ~/Docker_Share на хосте.
  • Все изменения в /data синхронизируются с хостом и сохраняются после остановки контейнера.

Разница между типами томов:

  • Bind-mount (как в примере) — точная привязка каталога хоста; удобна для разработки.
  • Docker volume — управляется Docker, удобен для персистентности в продакшне и для бэкапов; команды: docker volume create, docker run -v volume_name:/data.

Права доступа и UID/GID:

  • Внутри контейнера файлы принадлежат UID/GID пользователя, который записал их. Для работы без конфликтов часто создают пользователя с тем же UID, что и на хосте, или настраивают права с помощью опций –user и chown.

Роли и чек-листы

Ниже — краткие чек-листы для разных ролей при работе с Ubuntu в Docker.

Чек-лист для разработчика:

  • Использовать тегированный образ (для воспроизводимости).
  • Настроить bind-mount для кода и логов.
  • Не запускать процессы как root внутри контейнера, если это не нужно.
  • Использовать docker-compose для локальной разработки.

Чек-лист для системного администратора/инженера DevOps:

  • Публиковать образы в приватном реестре (если нужно).
  • Настроить сканирование уязвимостей образов.
  • Использовать Docker volumes для данных и бэкапов.
  • Задать лимиты ресурсов (—memory, —cpus) для продакшн-контейнеров.

Чек-лист для тестировщика:

  • Запустить контейнер с флагом –rm, чтобы не оставлять следов.
  • Сохранять окружение через Dockerfile для воспроизводимости тестовых сценариев.

Лучшие практики и рекомендации

  • Для постоянных конфигураций используйте Dockerfile и систему CI/CD, а не docker commit.
  • Минимизируйте права: не запускайте ненужные сервисы и не давайте контейнерам доступ к Docker socket, если это не требуется.
  • Храните секреты в менеджерах секретов, а не в Dockerfile или переменных окружения без шифрования.
  • Ограничивайте ресурсы контейнеров: —memory и —cpus.

Когда Docker не подходит — контраргументы и альтернатива

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

  • Нужна полная изоляция ядра и собственного ядра ОС → использовать виртуальные машины (например, KVM, VMware).
  • Требуется длительное сохранение состояния и сложная конфигурация хоста → VM или управляемые инстансы лучше подходят.
  • Для системного контейнеризации с отдельными системными службами — LXC/LXD может быть более подходящим.

Альтернативы Docker:

  • Podman — демонless-альтернатива с совместимыми командами.
  • LXC/LXD — контейнеры уровня ОС с более полной виртуализацией окружения.
  • Kubernetes — для оркестрации множества контейнеров в продакшне.

Команда docker-compose — быстрое локальное окружение

Пример docker-compose.yml для запуска Ubuntu с томом:

version: "3.8"
services:
  ubuntu:
    image: ubuntu:22.04
    command: /bin/bash
    volumes:
      - ./Docker_Share:/data
    tty: true
    stdin_open: true

Запуск:

sudo docker-compose up --build

Безопасность и привилегии

  • Не выполняйте контейнеры с флагом –privileged без крайней необходимости.
  • Ограничьте доступ к Docker daemon (не давайте неавторизованным пользователям доступ к сокету /var/run/docker.sock).
  • Сканируйте образы на уязвимости и обновляйте базовые образы регулярно.

Краткая таблица сравнения: Docker vs VM vs Podman

ХарактеристикаDockerВиртуальная машинаPodman
ИзоляцияПроцессы, общий хост-ядроПолная, собственное ядроКак Docker, без демона
Время стартаМиллисекунды — секундыДесятки секунд — минутыМиллисекунды — секунды
РазмерДесятки — сотни МБГБДесятки — сотни МБ
Подходит дляМикросервисы, локальная разработкаТяжёлые изолированные рабочие нагрузкиКак Docker, безопасная альтернатива

Мини-методология: надёжная работа с Ubuntu в Docker

  1. Определите цель: тест, разработка или продакшн.
  2. Выберите базовый образ с подходящим тегом.
  3. Описывайте изменения в Dockerfile.
  4. Храните секреты и конфигурации отдельно.
  5. Автоматизируйте билды и сканирование образов.
  6. Используйте тома для данных, а не docker commit.

Шаблон быстрой проверки (cheat sheet)

Команды:

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

# запустить интерактивно
sudo docker run -ti --rm -v ~/Docker_Share:/data ubuntu:22.04 /bin/bash

# список контейнеров
sudo docker ps

# список образов
sudo docker images

# сохранить состояние контейнера в образ (не рекомендуется для продакшн)
sudo docker commit -p  myubuntu

# создать volume
sudo docker volume create mydata

# запустить с docker volume
sudo docker run -ti --rm -v mydata:/data ubuntu /bin/bash

Диагностика и частые ошибки

  • Проблема: контейнер не запускается — проверьте логи через docker logs .
  • Проблема: права на тома — проверьте UID/GID и используйте chown или опцию –user.
  • Проблема: «image not found» — убедитесь, что тег указан правильно.

Решение типичных задач (короткая инструкция)

  1. Протестировать пакет в Ubuntu без установки виртуальной машины:

    • docker run -ti –rm ubuntu /bin/bash
    • apt update && apt install -y <пакет>
  2. Сохранить рабочую среду для команды разработки:

    • Написать Dockerfile, залить в репозиторий, билдить и публиковать образ в реестр.
  3. Поделиться данными между контейнером и хостом:

    • Использовать -v ~/Docker_Share:/data или docker volume.

Когда стоит использовать docker commit

  • Быстро сохранить экспериментальную сессию для локального исследования.
  • НЕЛЬЗЯ использовать как долгосрочную практику для воспроизводимости.

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

  • Образ загружается из Docker Hub и запускается без ошибок.
  • Все необходимые пакеты установлены через Dockerfile или apt в контейнере.
  • Данные, которые должны сохраняться, корректно доступны в каталоге ~/Docker_Share.
  • Образ версионирован и доступен в реестре (при необходимости).

FAQ

Можно ли запускать GUI-приложения в контейнере Ubuntu?

Да, но это требует проброса X11/Wayland или использования VNC; контейнеры по умолчанию не содержат GUI.

Чем отличается docker commit от docker build?

docker commit делает снимок текущего контейнера в образ — это быстрый, но нефайловый способ. docker build использует Dockerfile и даёт воспроизводимый и документированный результат.

Как безопасно хранить секреты в контейнерах?

Используйте менеджеры секретов (Docker secrets в Swarm, Vault, KMS) и не храните секреты в образах или в git.

Ресурсы и далее

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

Docker позволяет быстро запускать минимальную Ubuntu, экономя ресурсы по сравнению с виртуальной машиной. Для повторяемости и безопасности используйте Dockerfile, управляемые тома и CI/CD. Команда docker commit пригодна для быстрых экспериментов, но не заменяет автоматизированный билд образов.


Пример диаграммы принятия решения (Mermaid):

flowchart TD
  A[Нужно запустить Ubuntu?] --> B{Цель}
  B -->|Разработка| C[Использовать Docker + bind-mount]
  B -->|Тесты/CI| D[Использовать Dockerfile + CI]
  B -->|Продакшн| E[Использовать Docker + volumes + реестр]
  B -->|Полная изоляция| F[Использовать ВМ]
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

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

TapTap для Android — установка и безопасность
Android.

TapTap для Android — установка и безопасность

Социальная инженерия: как распознать и защититься
Кибербезопасность

Социальная инженерия: как распознать и защититься

Echo для детей: безопасность и родительский контроль
Home Tech

Echo для детей: безопасность и родительский контроль

Отдельные SSID для 2.4/5/6 GHz — настройка
Wi‑Fi

Отдельные SSID для 2.4/5/6 GHz — настройка

Как очистить Mac от пыли — безопасное руководство
Обслуживание Mac

Как очистить Mac от пыли — безопасное руководство

Как исправить iPhone после попадания воды
Ремонт

Как исправить iPhone после попадания воды