Skip to content

Лабораторная работа №2: Ручная установка и основы Docker

Научиться устанавливать Docker Engine и управлять жизненным циклом контейнеров (запускать, останавливать, просматривать логи, удалять) с помощью командной строки.

Основные теоретические положения

Section titled “Основные теоретические положения”

1. Образ (Image) и Контейнер (Container)

Section titled “1. Образ (Image) и Контейнер (Container)”

Это фундаментальные концепции Docker.

  • Образ: Пакет “только для чтения”, который содержит все необходимое для запуска приложения: код, среду выполнения, библиотеки, переменные окружения и файлы конфигурации. Образы строятся послойно.
  • Контейнер: Запущенный, исполняемый экземпляр образа. Контейнер изолирован от хост-системы и других контейнеров. В один момент времени из одного образа можно запустить множество контейнеров.
  • Рекомендуемая литература: Docker overview (Документация Docker)

Публичный репозиторий Docker-образов, похожий на GitHub для кода. Содержит тысячи готовых образов для популярных программ (базы данных, веб-серверы, языки программирования).

3. Жизненный цикл контейнера

Section titled “3. Жизненный цикл контейнера”

Основные команды для управления контейнерами:

  • docker run: Создает и запускает контейнер из образа.
  • docker ps: Показывает список запущенных контейнеров. Флаг -a показывает все контейнеры, включая остановленные.
  • docker stop: Корректно останавливает запущенный контейнер.
  • docker start: Запускает остановленный контейнер.
  • docker logs: Показывает логи (стандартный вывод) контейнера. Критически важная команда для отладки.
  • docker rm: Удаляет остановленный контейнер.
  • Рекомендуемая литература: docker run (Справочник CLI)

Задания для выполнения

Section titled “Задания для выполнения”
  1. Ручная установка Docker (30 мин):

    • Подключитесь по SSH к Web-node и Db-node.
    • Следуя официальной документации, установите Docker Engine. Для Ubuntu шаги обычно такие:
      Terminal window
      # 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. Добавление репозитория
      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
      sudo apt-get update
      # 4. Установка Docker Engine
      sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
    • Добавьте своего пользователя в группу docker, чтобы выполнять команды без sudo. Важно: после этого нужно перелогиниться в SSH-сессию.
      Terminal window
      sudo usermod -aG docker $USER
    • Рекомендуемая литература: Install Docker Engine on Ubuntu (Документация Docker)
  2. Работа с образами:

    • На Web-node найдите официальный образ для блога Ghost: docker search ghost.
    • Скачайте последнюю версию образа: docker pull ghost:latest.
    • На Db-node скачайте образ mysql версии 8.0: docker pull mysql:8.0.
    • Просмотрите список всех скачанных локально образов на каждой машине: docker images.
  3. Запуск контейнеров:

    • На Db-node запустите контейнер mysql. Это stateful-приложение, которому для первого запуска нужен пароль root.
      Terminal window
      docker run -d --name db-mysql -e MYSQL_ROOT_PASSWORD=mysecretpassword mysql:8.0
      • -d (detach): запустить в фоновом режиме.
      • --name db-mysql: дать контейнеру человекочитаемое имя.
      • -e: передать переменную окружения.
    • На Web-node запустите контейнер ghost. Ему нужно “пробросить” порт, чтобы мы могли зайти на сайт из браузера.
      Terminal window
      docker run -d --name blog -p 8080:2368 ghost:latest
      • -p 8080:2368: связать порт 8080 хост-машины с портом 2368 внутри контейнера.
    • Проверьте, что оба контейнера запущены (docker ps).
    • Посмотрите логи контейнера db-mysql (docker logs db-mysql), чтобы убедиться, что он успешно запустился.
    • Откройте в браузере на своем компьютере http://<IP-адрес Web-node>:8080 и убедитесь, что открылась страница приветствия Ghost.
    • Остановите и удалите оба контейнера: docker stop blog, docker rm blog (и аналогично для db-mysql ).
  1. В чем разница между docker pull и docker run?
  2. Для чего используется флаг -p в команде docker run?
  3. Как посмотреть логи запущенного контейнера и почему это важно для администратора?
  4. Что произойдет, если запустить команду docker run для образа, которого нет локально?