Docker
🧰 Лабораторная работа
Ознакомиться перед выполнением любой лабораторной работы (список раскрывается)
- Вместо ❔ или
x
нужно подставить свой номер по журналу - Выполнять задание без "отмашки" не стоит ⛔, т.к. задание здесь может существовать более актуальная версия
- У каждой работы есть срок сдачи 📅, который озвучивается на занятии, после которого работа не может быть защищена на максимальный балл 📉
- Дополнительные задания 📚 не являются обязательными, но по результатам сдачи лабораторной работы может быть выдано одно или несколько из них. Также дополнительное задание может быть сформулировано устно
- Для каждой лабораторной работы должен быть отчет 📝 с описанием выполнения ваших действий, оформление должно соответствовать требованиям (см. на сайте учебного заведения)
- Нужно уметь ответить на вопросы ❓ по теме, контрольные вопросы и другие связанные вопросы
- Примеры могут быть выполнены по желанию, а также выданы в качестве дополнительного задания с изменениями или без в случае неуспешной 😢 защиты основной работы
- Иногда в работах встречаются задания по IPv4 и IPv6 одновременно 🔗. Это считается как одна работа. Допускается сдача работы только с IPv4 или только с IPv6, но максимальный балл в таком случае получить невозможно
🎯 Цель работы: получить навыки работы с существующими публичными образами, создания собственных образов с помощью Dockerfile, использования собственного репозитория.
✔️ Условия
- Имена создаваемых объектов должны содержать фамилию и номер в группе.
- Сеть Docker -
10.x.0.0/24
.
🔀 Порядок выполнения работы
Часть 1 - Hello, world
- Загрузить образ
hello-world
из Docker Hub (docker pull ...
) и создать из него контейнер (docker run ...
). Удалить созданный контейнер. - Еще раз создать контейнер, но так чтобы он автоматически был удален после отработки (
docker ... --rm ...
).
Часть 2 - Взаимодействие между контейнерами
- Создать со своими именами и запустить 2 контейнера из образа
debian
/alpine
так, чтобы они не завершали сразу же свою работу (docker ... --name <name> ... /bin/sh
). - Подключиться к терминалам контейнеров (
docker attach / exec
) и узнать IP-адреса контейнеров, выданные автоматически. Проверить, что выданные адреса совпадают с теми, что отображаются в результате выполнения командыdocker container inspect ...
. - Проверить доступность между контейнерами с помощью эхо-запроса по IP-адресам и именам контейнеров.
- Остановить и запустить (
stop
,start
) один из контейнеров. Проверить, что доступность между ними осталась.
Часть 3 - Portainer
- Создать и изучить контейнер
portainer-ce
(ссылка). Изучите документацию по запуску контейнера. - Проделать часть 2 с помощью
portainer
.
Часть 4 — Создание собственного образа и сети (Dockerfile)
- На основе
debian
иalpine
создать (docker build ...
) 2 своих образа, которые должны содержать внутри себя пакетыnano
иmc
, а также файл в корне файловой системы, в файле записать вашу фамилию и имя. - При создании и запуске контейнера должно отображаться содержимое созданного файла.
Часть 5 - Собственный репозиторий
- Используя существующий публичный образ, создайте свой контейнер-репозиторий для хранения своих образов. Название контейнера найдите самостоятельно.
- Сохраните созданные в части 4 образы в свой репозиторий образов (
docker push ...
). - Удалите (
rm
) локальные образы из части 4. - Создайте новые контейнеры на основе созданных образов, но сейчас они должны подгрузиться из вашего репозитория.
🤔 Контрольные вопросы
- Какие номера сетей назначаются по умолчанию новым сетям?
- После удаления контейнера остается удаляется ли вместе с ним том?
- Чем отличаются контейнеры и образы Docker?
- Какие команды используются в Dockerfile? Есть ли среди них такие, которые используются для настройки сети?
- Зачем нужно создавать свои образы?
- Можно ли изменить созданную сеть Docker?
- Что такое слои образа Docker?
- Чем отличаются типы сетей Docker
none
иbridge
? - Можно ли подключить 2 контейнера к сети типа
bridge
и выдать им адреса из совершенно другой сети? При этом они должны "пинговать" друг друга.
©️ Оформление, изложение, медиаконтент. И. Попов, 2020-2025