Практика. Введение в использование 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. Обработайте результаты. - Завершите работу контейнера.