Цели практической работы

  • Научиться устанавливать среду запуска Docker-контейнеров
  • Ознакомиться с концепциями: среда исполнения, образ и контейнер
  • Запускать Docker-контейнеры
  • Подключаться к запущенному Docker-контейнеру
  • Запускать приложения, поставляемые в качестве Docker образов

Документация

Задача № 1: установка окружения для запуска Docker-контейнеров

Следуйте официальной инструкции для установки Docker-окружения в дистрибутиве Debian.

Кратко процесс установки заключён в следующем:

  1. Добавить официальный репозиторий Docker.
  2. Установить нужные пакеты из репозитория.
  3. Добавить пользователя-администратора в группу docker.

Удостоверьтесь, что можете запустить контейнер с проверочным приложением от имени администратора: docker container run hello-world

Задача № 2: Запуск команд внутри базового контейнера

  1. Запустите контейнер на основе базового образа debian:buster с приложением /bin/bash.
    • Необходимо формировать псевдотерминал для данной задачи (-t)
    • Необходимо подключить стандартный поток ввода данных (-i)
  2. Установите внутри контейнера проксирующий сервер squid.
  3. Удостоверьтесь, что в рамках хост-системы данный сервер не установлен.
  4. Сравните количество пакетов, которые установлены в хост-системе и в рамках контейнера.
  5. Завершите работу данного контейнера.

Задача № 3: Проверка списка локальных контейнеров и образов

  1. Посмотрите на список контейнеров, которые сейчас запущены в системе.
  2. Посмотрите на список контейнеров, включая выключенные.
  3. Посмотрите на список образов.
  4. Оцените объём занимаемого дискового пространства в каталоге /var/lib/docker.
  5. Удалите контейнер, который соответствует запущенному в рамках задачи № 2 контейнеру.
  6. Оцените объём занимаемого дискового пространства в каталоге /var/lib/docker.
  7. Удалите образ debian:buster.
  8. Оцените объём занимаемого дискового пространства в каталоге /var/lib/docker.

Задача № 4: Запуск автоматически удаляемого контейнера

  1. Запустите контейнер согласно задаче № 2 с параметрами для автоматического удаления (--rm)
  2. Выполните установку nginx в рамках данного контейнера.
  3. Завершите работу контейнера.
  4. Проверьте наличие или отсутствие данного контейнера в списке всех контейнеров.

Задача № 5: Запуск команды в работающем контейнере

  1. Запустите контейнер согласно задаче № 2
  2. Запустите другой эмулятор терминала на хост-системе
  3. С помощью команды container exec создайте внутри контейнера файл /tmp/extra-data, содержащий текущую дату
  4. Используя первое подключение к контейнеру, чтобы удостовериться, что файл действительно был создан
  5. Завершите работу контейнера.

Задача № 6: Предоставление доступа к файловой системе хоста

Внимание! По умолчанию приложения в контейнере запускаются с правами суперпользователя. Это может привести к повреждению хост-системе, если будет использовано некорректно.

  1. В рамках хост-системы создайте каталог /tmp/common-data
  2. Запустите контейнер на базе debian:buster с приложением /bin/bash
    • Контейнер должен остаться запущенным после старта.
    • Контейнер должен быть удалён после завершения работы /bin/bash.
    • Обеспечьте доступ к хост-каталогу /tmp/common-data внутри контейнера по пути /var/common-data
  3. На хост-системе в каталоге /tmp/common-data от имени обычного пользователя создайте файл с текущей датой и временем
  4. В рамках контейнера отобразите права доступа к созданному файлу.
    • Кто является владельцем файла?
    • Как преобразовать число к имени пользователя?
  5. В рамках контейнера создайте новый файл и запишите в него данные. Проведите проверку, аналогичной предыдущей уже на хост-системе.
  6. Завершите работу контейнера.

Задача № 7: Предоставление доступа на чтение к файловой системе хоста

  1. Запустите контейнер на базе debian:buster с приложением /bin/bash
    • Контейнер должен предоставлять интерактивную сессию для взаимодействия с интерпретатором Bash
    • Контейнер должен быть удалён после остановки
    • Обеспечьте доступ на чтение к хост-каталогу /etc внутри контейнера по пути /srv/etc
  2. Добавьте новый файл /etc/zzzzzz на хост-каталоге. Удостоверьтесь, что файл доступен внутри контейнера.
  3. Удалите файл /srv/etc/zzzzzz внутри контейнера
    • Проверьте результаты выполнения команды внутри контейнера и на хост-системе
    • Удостоверьтесь, что работаете в контейнере с правами суперпользователя
  4. Завершите работу контейнера.
  5. Удалите файл /etc/zzzzzz

Задача № 8: Предоставление доступа к сетевым службам контейнера

  1. Запустите контейнер на базе debian:buster с приложением /bin/bash
    • Контейнер должен предоставлять интерактивную сессию для взаимодействия с интерпретатором Bash
    • Контейнер должен быть удалён после остановки
    • Обеспечьте доступ на чтение к хост-каталогу /var/www/docker-static-site по пути /var/www/host-site
    • Обеспечьте доступ к порту 80 внутри контейнера при обращении к пору 8080 в хост-системе
  2. Установите nginx внутри конейнера
  3. Установите тестовый редактор по своему выбору
  4. Настройте nginx внутри контейнера для раздачи данных из каталога /var/www/host-site
  5. Запустите nginx с помощью команды: /usr/sbin/nginx -g 'daemon on; master_process on;'
  6. Откройте в веб-браузере порт 8080 хост-системы. Удостоверьтесь, что сервер доступен и предоставляет нужный сайт.
  7. Остановите работу nginx внутри контейнера.
  8. Запустите nginx внутри контейнера с помощью SystemD. Обработайте результаты.
  9. Завершите работу контейнера.