Практика. Введение в использование Docker-контейнеров
Цели практической работы
- Научиться устанавливать среду запуска Docker-контейнеров
 - Ознакомиться с концепциями: среда исполнения, образ и контейнер
 - Запускать Docker-контейнеры
 - Подключаться к запущенному Docker-контейнеру
 - Запускать приложения, поставляемые в качестве Docker образов
 
Документация
- Docker документация на русском
 - Что такое Docker, и как его использовать?
 - Команды для взаимодействия с контейнерами
 - Команды для взаимодействия с образами
 - Детальное описание команды container run со всеми опциями
 
Задача № 1: установка окружения для запуска Docker-контейнеров
Следуйте официальной инструкции для установки Docker-окружения в дистрибутиве Debian.
Кратко процесс установки заключён в следующем:
- Добавить официальный репозиторий Docker.
 - Установить нужные пакеты из репозитория.
 - Добавить пользователя-администратора в группу docker.
 
Удостоверьтесь, что можете запустить контейнер с проверочным приложением от имени администратора: docker container run hello-world
Задача № 2: Запуск команд внутри базового контейнера
- Запустите контейнер на основе базового образа 
debian:busterс приложением/bin/bash.- Необходимо формировать псевдотерминал для данной задачи (
-t) - Необходимо подключить стандартный поток ввода данных (
-i) 
 - Необходимо формировать псевдотерминал для данной задачи (
 - Установите внутри контейнера проксирующий сервер 
squid. - Удостоверьтесь, что в рамках хост-системы данный сервер не установлен.
 - Сравните количество пакетов, которые установлены в хост-системе и в рамках контейнера.
 - Завершите работу данного контейнера.
 
Задача № 3: Проверка списка локальных контейнеров и образов
- Посмотрите на список контейнеров, которые сейчас запущены в системе.
 - Посмотрите на список контейнеров, включая выключенные.
 - Посмотрите на список образов.
 - Оцените объём занимаемого дискового пространства в каталоге 
/var/lib/docker. - Удалите контейнер, который соответствует запущенному в рамках задачи № 2 контейнеру.
 - Оцените объём занимаемого дискового пространства в каталоге 
/var/lib/docker. - Удалите образ 
debian:buster. - Оцените объём занимаемого дискового пространства в каталоге 
/var/lib/docker. 
Задача № 4: Запуск автоматически удаляемого контейнера
- Запустите контейнер согласно задаче № 2 с параметрами для автоматического удаления (
--rm) - Выполните установку 
nginxв рамках данного контейнера. - Завершите работу контейнера.
 - Проверьте наличие или отсутствие данного контейнера в списке всех контейнеров.
 
Задача № 5: Запуск команды в работающем контейнере
- Запустите контейнер согласно задаче № 2
 - Запустите другой эмулятор терминала на хост-системе
 - С помощью команды 
container execсоздайте внутри контейнера файл/tmp/extra-data, содержащий текущую дату - Используя первое подключение к контейнеру, чтобы удостовериться, что файл действительно был создан
 - Завершите работу контейнера.
 
Задача № 6: Предоставление доступа к файловой системе хоста
Внимание! По умолчанию приложения в контейнере запускаются с правами суперпользователя. Это может привести к повреждению хост-системе, если будет использовано некорректно.
- В рамках хост-системы создайте каталог 
/tmp/common-data - Запустите контейнер на базе 
debian:busterс приложением/bin/bash- Контейнер должен остаться запущенным после старта.
 - Контейнер должен быть удалён после завершения работы 
/bin/bash. - Обеспечьте доступ к хост-каталогу 
/tmp/common-dataвнутри контейнера по пути/var/common-data 
 - На хост-системе в каталоге 
/tmp/common-dataот имени обычного пользователя создайте файл с текущей датой и временем - В рамках контейнера отобразите права доступа к созданному файлу.
    
- Кто является владельцем файла?
 - Как преобразовать число к имени пользователя?
 
 - В рамках контейнера создайте новый файл и запишите в него данные. Проведите проверку, аналогичной предыдущей уже на хост-системе.
 - Завершите работу контейнера.
 
Задача № 7: Предоставление доступа на чтение к файловой системе хоста
- Запустите контейнер на базе 
debian:busterс приложением/bin/bash- Контейнер должен предоставлять интерактивную сессию для взаимодействия с интерпретатором Bash
 - Контейнер должен быть удалён после остановки
 - Обеспечьте доступ на чтение к хост-каталогу 
/etcвнутри контейнера по пути/srv/etc 
 - Добавьте новый файл 
/etc/zzzzzzна хост-каталоге. Удостоверьтесь, что файл доступен внутри контейнера. - Удалите файл 
/srv/etc/zzzzzzвнутри контейнера- Проверьте результаты выполнения команды внутри контейнера и на хост-системе
 - Удостоверьтесь, что работаете в контейнере с правами суперпользователя
 
 - Завершите работу контейнера.
 - Удалите файл 
/etc/zzzzzz 
Задача № 8: Предоставление доступа к сетевым службам контейнера
- Запустите контейнер на базе 
debian:busterс приложением/bin/bash- Контейнер должен предоставлять интерактивную сессию для взаимодействия с интерпретатором Bash
 - Контейнер должен быть удалён после остановки
 - Обеспечьте доступ на чтение к хост-каталогу 
/var/www/docker-static-siteпо пути/var/www/host-site - Обеспечьте доступ к порту 80 внутри контейнера при обращении к пору 8080 в хост-системе
 
 - Установите 
nginxвнутри конейнера - Установите тестовый редактор по своему выбору
 - Настройте 
nginxвнутри контейнера для раздачи данных из каталога/var/www/host-site - Запустите 
nginxс помощью команды:/usr/sbin/nginx -g 'daemon on; master_process on;' - Откройте в веб-браузере порт 8080 хост-системы. Удостоверьтесь, что сервер доступен и предоставляет нужный сайт.
 - Остановите работу 
nginxвнутри контейнера. - Запустите 
nginxвнутри контейнера с помощью SystemD. Обработайте результаты. - Завершите работу контейнера.