Skip to content

Docker

🧰 Лабораторная работа

Ознакомиться перед выполнением любой лабораторной работы (список раскрывается)
  • Вместо ❔ или x нужно подставить свой номер по журналу
  • Выполнять задание без "отмашки" не стоит ⛔, т.к. задание здесь может существовать более актуальная версия
  • У каждой работы есть срок сдачи 📅, который озвучивается на занятии, после которого работа не может быть защищена на максимальный балл 📉
  • Дополнительные задания 📚 не являются обязательными, но по результатам сдачи лабораторной работы может быть выдано одно или несколько из них. Также дополнительное задание может быть сформулировано устно
  • Для каждой лабораторной работы должен быть отчет 📝 с описанием выполнения ваших действий, оформление должно соответствовать требованиям (см. на сайте учебного заведения)
  • Нужно уметь ответить на вопросы ❓ по теме, контрольные вопросы и другие связанные вопросы
  • Примеры могут быть выполнены по желанию, а также выданы в качестве дополнительного задания с изменениями или без в случае неуспешной 😢 защиты основной работы
  • Иногда в работах встречаются задания по IPv4 и IPv6 одновременно 🔗. Это считается как одна работа. Допускается сдача работы только с IPv4 или только с IPv6, но максимальный балл в таком случае получить невозможно

🎯 Цель работы: получить навыки работы с существующими публичными образами, создания собственных образов с помощью Dockerfile, использования собственного репозитория.

✔️ Условия

  1. Имена создаваемых объектов должны содержать фамилию и номер в группе.
  2. Сеть Docker - 10.x.0.0/24.

🔀 Порядок выполнения работы

Часть 1 - Hello, world

  1. Загрузить образ hello-world из Docker Hub (docker pull ...) и создать из него контейнер (docker run ...). Удалить созданный контейнер.
  2. Еще раз создать контейнер, но так чтобы он автоматически был удален после отработки (docker ... --rm ...).

Часть 2 - Взаимодействие между контейнерами

  1. Создать со своими именами и запустить 2 контейнера из образа debian/alpine так, чтобы они не завершали сразу же свою работу (docker ... --name <name> ... /bin/sh).
  2. Подключиться к терминалам контейнеров (docker attach / exec) и узнать IP-адреса контейнеров, выданные автоматически. Проверить, что выданные адреса совпадают с теми, что отображаются в результате выполнения команды docker container inspect ....
  3. Проверить доступность между контейнерами с помощью эхо-запроса по IP-адресам и именам контейнеров.
  4. Остановить и запустить (stop, start) один из контейнеров. Проверить, что доступность между ними осталась.

Часть 3 - Portainer

  1. Создать и изучить контейнер portainer-ce (ссылка). Изучите документацию по запуску контейнера.
  2. Проделать часть 2 с помощью portainer.

Часть 4 — Создание собственного образа и сети (Dockerfile)

  1. На основе debian и alpine создать (docker build ...) 2 своих образа, которые должны содержать внутри себя пакеты nano и mc, а также файл в корне файловой системы, в файле записать вашу фамилию и имя.
  2. При создании и запуске контейнера должно отображаться содержимое созданного файла.

Часть 5 - Собственный репозиторий

  1. Используя существующий публичный образ, создайте свой контейнер-репозиторий для хранения своих образов. Название контейнера найдите самостоятельно.
  2. Сохраните созданные в части 4 образы в свой репозиторий образов (docker push ...).
  3. Удалите (rm) локальные образы из части 4.
  4. Создайте новые контейнеры на основе созданных образов, но сейчас они должны подгрузиться из вашего репозитория.

🤔 Контрольные вопросы

  1. Какие номера сетей назначаются по умолчанию новым сетям?
  2. После удаления контейнера остается удаляется ли вместе с ним том?
  3. Чем отличаются контейнеры и образы Docker?
  4. Какие команды используются в Dockerfile? Есть ли среди них такие, которые используются для настройки сети?
  5. Зачем нужно создавать свои образы?
  6. Можно ли изменить созданную сеть Docker?
  7. Что такое слои образа Docker?
  8. Чем отличаются типы сетей Docker none и bridge?
  9. Можно ли подключить 2 контейнера к сети типа bridge и выдать им адреса из совершенно другой сети? При этом они должны "пинговать" друг друга.