10 лаба
Хорошо, давайте пошагово выполним лабораторную работу №7 на русском языке, используя одну из ваших виртуальных машин Ubuntu в VirtualBox. Будем следовать пунктам из раздела "Задание на лабораторную работу" (страница 19).
- Запустите одну из ваших ВМ Ubuntu в VirtualBox.
- Откройте окно Терминала (Ctrl+Alt+T или найдите "Терминал" в поиске).
- Убедитесь, что ваша ВМ имеет доступ в Интернет (возможно, потребуется настроить сеть в VirtualBox, обычно подходят "Сетевой мост" или "NAT").
- Обновите список пакетов:
sudo apt update - Установите nano (простой текстовый редактор для терминала), если он еще не установлен:
sudo apt install nano -yIGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_END
- Проверьте, установлен ли curl:
curl --versionIGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_END - Если команда выводит версию, curl уже установлен. Если вы видите curl: command not found (или аналогичное сообщение об ошибке на русском), его нужно установить.
- Установите curl (если не установлен):
sudo apt install curl -yIGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_END - Проверьте установку еще раз:
curl --versionIGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_END
(Шаг 2: Проверить, что curl возвращает содержимое html-страницы произвольного сайта)
- Получите HTML-содержимое сайта: Используем example.com, как в методичке (стр. 2), или любой другой сайт, например, ya.ru.
curl http://example.comIGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_END
(Шаг 3: Установить nginx, запустить, убедиться, что содержимое тестовой страницы отображается в браузере, доступно по запросу curl)
- Установите nginx:
sudo apt install nginx -yIGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_END - Запустите службу nginx:
sudo systemctl start nginxIGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_END - Проверьте статус службы (убедитесь, что она активна/работает):
sudo systemctl status nginxIGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_END - (Опционально, но рекомендуется) Разрешите автозапуск nginx при старте системы:
sudo systemctl enable nginxIGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_END - Проверка через браузер:
- Узнайте IP-адрес вашей виртуальной машины. В терминале введите:
ip addr showIGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_ENDНайдите ваш сетевой интерфейс (часто eth0 или enp0s...) и посмотрите на строку inet. Например, inet 192.168.1.105/24. - Откройте браузер на вашем основном компьютере (хосте) и перейдите по адресу http://<IP-адрес_вашей_ВМ>. Например: http://192.168.1.105.
- Вы должны увидеть стартовую страницу nginx ("Welcome to nginx!").
- Проверка через curl (в терминале ВМ):
curl http://localhostIGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_ENDcurl http://<IP-адрес_вашей_ВМ>IGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_END
(Шаг 4: Заменить страницу, которую отдает nginx по умолчанию или добавить новую на отдельный виртуальный хост...)
- Создайте директорию для нового сайта:
sudo mkdir -p /var/www/tutorialIGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_END - Создайте HTML-файл для нового сайта:
sudo nano /var/www/tutorial/index.htmlIGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_END - Вставьте в редактор nano следующий HTML-код (скопируйте из методички, стр. 5):
<!doctype html> <html> <head> <meta charset="utf-8"> <title>Hello, Nginx!</title> </head> <body> <h1>Hello, Nginx!</h1> <p>We have just configured our Nginx web server on Ubuntu Server!</p> </body> </html>IGNORE_WHEN_COPYING_START content_copy download Use code with caution. HtmlIGNORE_WHEN_COPYING_END - Сохраните файл и выйдите из nano: Нажмите Ctrl+O, затем Enter для сохранения, затем Ctrl+X для выхода.
- Создайте файл конфигурации для нового виртуального хоста:
sudo nano /etc/nginx/sites-available/tutorialIGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_END - Вставьте в редактор nano следующую конфигурацию (скопируйте из методички, стр. 5):
server { listen 81; listen [::]:81; server_name example.ubuntu.com; # Имя не важно для доступа по IP/localhost root /var/www/tutorial; index index.html; location / { try_files $uri $uri/ =404; } }IGNORE_WHEN_COPYING_START content_copy download Use code with caution. NginxIGNORE_WHEN_COPYING_END - Сохраните файл и выйдите из nano (Ctrl+O, Enter, Ctrl+X).
- Создайте символическую ссылку, чтобы включить сайт:
sudo ln -s /etc/nginx/sites-available/tutorial /etc/nginx/sites-enabled/IGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_END - (Опционально, но рекомендуется для чистоты) Удалите ссылку на дефолтный сайт, если он мешает:
sudo rm /etc/nginx/sites-enabled/defaultIGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_END - Проверьте конфигурацию nginx на ошибки:
sudo nginx -tIGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_END - Перезапустите nginx, чтобы применить изменения:
sudo systemctl restart nginxIGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_END - Проверка:
- Через браузер (на хосте): Откройте http://<IP-адрес_вашей_ВМ>:81 (например, http://192.168.1.105:81). Вы должны увидеть вашу новую страницу "Hello, Nginx!".
- Через curl (в терминале ВМ):
curl http://localhost:81IGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_ENDВы должны увидеть HTML-код вашей новой страницы.
(Шаг 5: Установить Docker с помощью curl, настроить его и проверить работу с помощью тестового образа)
- Скачайте скрипт установки Docker (как на стр. 9):
curl -fsSL https://get.docker.com -o get-docker.shIGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_END - Запустите скрипт установки:
sudo sh get-docker.shIGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_END - Добавьте вашего текущего пользователя в группу docker, чтобы выполнять команды Docker без sudo (как на стр. 9):
sudo usermod -aG docker $USERIGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_END - ВАЖНО: Чтобы изменения группы вступили в силу, вам нужно выйти из системы и войти снова, либо выполнить команду newgrp docker в текущем терминале (но это изменение будет действовать только для этого терминала). Проще всего перезайти в систему или перезагрузить ВМ.
- После перезахода/перезагрузки, проверьте работу Docker с тестовым образом hello-world:
docker run hello-worldIGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_END - Docker скачает образ (если его нет локально) и запустит контейнер. Вы должны увидеть сообщение, начинающееся с "Hello from Docker!". Это означает, что Docker установлен и работает правильно.
- (Опционально, если docker run hello-world не сработал без sudo даже после перезахода): Иногда требуется изменить права на сокет Docker (как упомянуто на стр. 9). Используйте с осторожностью:
sudo chmod 666 /var/run/docker.sockIGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_END
(Шаг 6: Запустить nginx в контейнере, проверить его работу...)
- Запустите контейнер с официальным образом nginx:
docker run --name my-nginx-container -d -p 8888:80 --rm nginx:latestIGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_END - --name my-nginx-container: Дает контейнеру имя для удобства управления.
- -d: Запускает контейнер в фоновом режиме (detached).
- -p 8888:80: Пробрасывает порт 8888 вашей ВМ на порт 80 внутри контейнера (где работает nginx).
- --rm: Автоматически удаляет контейнер после его остановки.
- nginx:latest: Использует последнюю версию официального образа nginx.
- Проверка:
- Через браузер (на хосте): Откройте http://<IP-адрес_вашей_ВМ>:8888 (например, http://192.168.1.105:8888). Вы должны увидеть стандартную страницу "Welcome to nginx!", но на этот раз она отдается из Docker-контейнера.
- Через curl (в терминале ВМ):
curl http://localhost:8888IGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_ENDВы должны увидеть HTML-код стандартной страницы nginx. - (Для информации) Чтобы остановить и удалить контейнер (если не использовали --rm):
docker stop my-nginx-container # docker rm my-nginx-container # --rm сделает это автоматически при остановкеIGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_END
(Шаг 7: Собрать модификацию образа nginx, заменив в нем страницу... запустить контейнер с этим образом и проверить его работу...)
- Создайте директорию для сборки вашего образа:
mkdir ~/my-custom-nginx cd ~/my-custom-nginxIGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_END - Создайте свой файл index.html:
nano index.htmlIGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_END - Вставьте в nano следующий HTML-код (из методички, стр. 10):
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>Docker Nginx</title> </head> <body> <h2>Hello from Nginx container</h2> </body> </html>IGNORE_WHEN_COPYING_START content_copy download Use code with caution. HtmlIGNORE_WHEN_COPYING_END - Сохраните и выйдите (Ctrl+O, Enter, Ctrl+X).
- Создайте файл Dockerfile:
nano DockerfileIGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_END - Вставьте в nano следующие инструкции (из методички, стр. 10):
# Используем базовый образ nginx FROM nginx:latest # Копируем наш index.html в директорию веб-сервера внутри контейнера COPY ./index.html /usr/share/nginx/html/index.htmlIGNORE_WHEN_COPYING_START content_copy download Use code with caution. DockerfileIGNORE_WHEN_COPYING_END - Сохраните и выйдите (Ctrl+O, Enter, Ctrl+X).
- Соберите Docker-образ из вашего Dockerfile:
docker build -t webserver .IGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_END - -t webserver: Присваивает образу имя (тег) webserver.
- .: Указывает, что контекст сборки (где искать Dockerfile и файлы для COPY) - это текущая директория (~/my-custom-nginx).
- Запустите контейнер из вашего нового образа:
docker run --name my-custom-web -d -p 8080:80 --rm webserverIGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_END - Используем порт 8080 на хосте (ВМ) и имя my-custom-web. Обратите внимание, что мы запускаем образ webserver, который только что собрали.
- Проверка:
- Через браузер (на хосте): Откройте http://<IP-адрес_вашей_ВМ>:8080. Вы должны увидеть вашу кастомную страницу "Hello from Nginx container".
- Через curl (в терминале ВМ):
curl http://localhost:8080IGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_ENDВы должны увидеть HTML-код вашей кастомной страницы. - Остановите контейнер:
docker stop my-custom-webIGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_END
(Шаг 8: Создать новый проект docker-compose... собрать проект, убедиться, что сборка проходит корректно)
- Установите Docker Compose (если еще не установлен):
sudo apt install docker-compose -yIGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_END - Примечание: apt может установить не самую свежую версию. Для более новых версий см. официальную документацию Docker. Но для этой ЛР версии из apt должно хватить.
- Проверьте установку:
docker-compose --versionIGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_END - Создайте директорию для проекта и перейдите в нее:
mkdir ~/my-compose-app cd ~/my-compose-appIGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_END - Создайте поддиректории для клиента и сервера:
mkdir server clientIGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_END - Создайте файлы для серверной части:
- nano server/Dockerfile (скопируйте содержимое со стр. 13-14)
# Dockerfile всегда должен начинаться с импорта базового образа. # Для этого используется ключевое слово 'FROM'. # Здесь нам нужно импортировать образ python (c DockerHub). # В результате мы, в качестве имени образа, указываем 'python', а в качестве # версии - 'latest'. FROM python:latest # Для того чтобы запустить в контейнере код, написанный на Python, нужно # импортировать файлы 'server.py' и 'index.html'. # Для того чтобы это сделать, мы используем ключевое слово 'ADD'. # Первый параметр, 'server.py', представляет собой имя файла, хранящегося на # компьютере. # Второй параметр, '/server/', это путь, по которому нужно разместить указанный # файл в образе. # Здесь мы помещаем файл в папку образа '/server/'. ADD server.py /server/ ADD index.html /server/ # Здесь мы воспользуемся командой 'WORKDIR'. # Она позволяет изменить рабочую директорию образа. # В качестве такой директории, в которой будут выполняться все команды, # устанавливаем '/server/'. WORKDIR /server/IGNORE_WHEN_COPYING_START content_copy download Use code with caution. DockerfileIGNORE_WHEN_COPYING_ENDСохраните и выйдите. - nano server/index.html (скопируйте текст со стр. 13)
Docker-Compose is magic!IGNORE_WHEN_COPYING_START content_copy download Use code with caution. IGNORE_WHEN_COPYING_ENDСохраните и выйдите. - nano server/server.py (скопируйте код со стр. 13)
#!/usr/bin/env python3 # Импорт системных библиотек python. # Эти библиотеки будут использоваться для создания веб-сервера. # Эти библиотеки обычно устанавливаются вместе с Python. import http.server import socketserver # Эта переменная нужна для обработки запросов клиента к серверу. handler = http.server.SimpleHTTPRequestHandler # Сервер запустится на порте 1234. with socketserver.TCPServer(("", 1234), handler) as httpd: # Благодаря этой команде сервер будет выполняться постоянно, ожидая # запросов от клиента. print("Сервер запущен на порту 1234") # Добавим вывод для ясности httpd.serve_forever()IGNORE_WHEN_COPYING_START content_copy download Use code with caution. PythonIGNORE_WHEN_COPYING_ENDСохраните и выйдите. - Создайте файлы для клиентской части:
- nano client/Dockerfile (скопируйте содержимое со стр. 15)
# То же самое, что и в серверном Dockerfile. FROM python:latest # Импортируем 'client.py' в папку '/client/'. ADD client.py /client/ # Устанавливаем в качестве рабочей директории '/client/'. WORKDIR /client/IGNORE_WHEN_COPYING_START content_copy download Use code with caution. DockerfileIGNORE_WHEN_COPYING_ENDСохраните и выйдите. - nano client/client.py (скопируйте код со стр. 14-15)
#!/usr/bin/env python3 # Импортируем системную библиотеку Python. # Она используется для загрузки файла 'index.html' с сервера. # Эта библиотека устанавливается вместе с Python. import urllib.request import time # Добавим задержку для надежности # Небольшая задержка перед попыткой подключения к серверу time.sleep(5) # Эта переменная содержит запрос к 'http://localhost:1234/'. # localhost указывает на то, что программа работает с локальным сервером. # 1234 - это номер порта # ВАЖНО: Так как мы будем использовать network_mode: host, localhost будет работать. # Если бы мы использовали стандартную сеть docker, нужно было бы указывать имя сервиса 'server'. fp = urllib.request.urlopen("http://localhost:1234/") # 'encodedContent' соответствует закодированному ответу сервера ('index.html'). # 'decodedContent' соответствует раскодированному ответу сервера (тут будет то, # что мы хотим вывести на экран). encodedContent = fp.read() decodedContent = encodedContent.decode("utf-8") # Выводим содержимое файла, полученного с серверa ('index.html'). print("Ответ от сервера:") print(decodedContent) # Закрываем соединение с сервером. fp.close()IGNORE_WHEN_COPYING_START content_copy download Use code with caution. PythonIGNORE_WHEN_COPYING_ENDСохраните и выйдите. - Создайте главный файл docker-compose.yml в корне проекта (~/my-compose-app):
- nano docker-compose.yml (скопируйте содержимое со стр. 15-16, ВНИМАНИЕ НА ОТСТУПЫ! YAML чувствителен к ним. Используйте пробелы, не табы.)
# Файл docker-compose должен начинаться с тега версии. version: "3" # Используем версию 3, как в методичке # Следует учитывать, что docker-compose работает с сервисами. # 1 сервис = 1 контейнер. # Сервисом может быть клиент, сервер, сервер баз данных... # Раздел, в котором будут описаны сервисы, начинается с 'services'. services: # Нам нужно два сервиса. # Первый сервис (контейнер): сервер. # Назвать его можно так, как нужно разработчику. # Понятное название сервиса помогает определить его роль. # Здесь мы, для именования соответствующего сервиса, используем ключевое # слово 'server'. server: # Ключевое слово "build" позволяет задать # путь к файлу Dockerfile, который нужно использовать для создания образа, # который позволит запустить сервис. # Здесь 'server/' соответствует пути к папке сервера, # которая содержит соответствующий Dockerfile. build: ./server/ # Указываем путь относительно docker-compose.yml # Команда, которую нужно запустить после создания образа. # Следующая команда означает запуск "python ./server.py". # Используем python3 явно command: python3 ./server.py # В нашем случае нужно использовать порт компьютера 1234 и организовать его # связь с портом 1234 контейнера (так как именно на этот порт сервер ожидает # поступления запросов). ports: - "1234:1234" # Второй сервис (контейнер): клиент. # Этот сервис назван 'client'. client: # Здесь 'client/' соответствует пути к папке, которая содержит # файл Dockerfile для клиентской части системы. build: ./client/ # Указываем путь относительно docker-compose.yml # Команда, которую нужно запустить после создания образа. # Следующая команда означает запуск "python ./client.py". # Используем python3 явно command: python3 ./client.py # Ключевое слово 'network_mode' используется для описания типа сети. # Тут мы указываем то, что контейнер может обращаться к 'localhost' # компьютера. network_mode: host # Важно для доступа к localhost:1234 из клиента # Ключевое слово 'depends_on' позволяет указывать, должен ли сервис, # прежде чем запуститься, ждать, когда будут готовы к работе другие сервисы. # Нам нужно, чтобы сервис 'client' дождался готовности к работе сервиса # 'server'. depends_on: - serverIGNORE_WHEN_COPYING_START content_copy download Use code with caution. YamlIGNORE_WHEN_COPYING_ENDСохраните и выйдите. - Соберите образы для всех сервисов в проекте:
docker-compose buildIGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_END
(Шаг 9: Запустить проект docker-compose, убедиться, что в результате клиент получает от сервера html-файл. Проверить, что сервер также доступен через браузер)
- Запустите сервисы (в фоновом режиме):
docker-compose up -dIGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_END - -d (detached) запускает контейнеры в фоне. Если запустить без -d, логи будут выводиться прямо в терминал, и терминал будет занят.
- Проверка клиента:
- Посмотрите логи клиентского контейнера. Имя контейнера обычно формируется как <папка_проекта>_<имя_сервиса>_1, например my-compose-app_client_1. Узнать точное имя можно командой docker ps.
- Просмотр логов:
docker-compose logs clientIGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_ENDdocker-compose logs -f clientIGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_END - В логах клиента вы должны увидеть:
Ответ от сервера: Docker-Compose is magic!IGNORE_WHEN_COPYING_START content_copy download Use code with caution. IGNORE_WHEN_COPYING_END - Проверка сервера:
- Через браузер (на хосте): Откройте http://<IP-адрес_вашей_ВМ>:1234. Вы должны увидеть текст Docker-Compose is magic!.
- Через curl (в терминале ВМ):
curl http://localhost:1234IGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_ENDВы должны увидеть текст Docker-Compose is magic!.
(Шаг 10: Остановить сервер, заменить содержимое html-страницы на свое, собрать и запустить проект заново, убедиться, что по клиенту доступна новая страница)
- Остановите и удалите контейнеры, созданные docker-compose:
docker-compose downIGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_END - Измените содержимое файла index.html на сервере:
nano server/index.htmlIGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_END - Замените Docker-Compose is magic! на свой текст, например:
Лабораторная работа №7 выполнена!IGNORE_WHEN_COPYING_START content_copy download Use code with caution. IGNORE_WHEN_COPYING_END - Сохраните и выйдите (Ctrl+O, Enter, Ctrl+X).
- Соберите проект заново (Docker заметит изменения и пересоздаст образ сервера) и запустите:
docker-compose up -d --buildIGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_END - Проверка:
- Проверьте логи клиента:
docker-compose logs clientIGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_ENDВы должны увидеть ваш новый текст:Ответ от сервера: Лабораторная работа №7 выполнена!IGNORE_WHEN_COPYING_START content_copy download Use code with caution. IGNORE_WHEN_COPYING_END - Проверьте сервер через curl:
curl http://localhost:1234IGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_ENDВы должны увидеть Лабораторная работа №7 выполнена!. - Проверьте сервер через браузер: http://<IP-адрес_вашей_ВМ>:1234 также должен показать новый текст.
- Когда закончите работу, можно снова остановить сервисы:
docker-compose downIGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_END
Вы установили и настроили curl, nginx, Docker и Docker Compose. Вы развернули nginx как на хосте, так и в контейнере Docker. Вы создали и запустили многоконтейнерное приложение с помощью Docker Compose, состоящее из Python-сервера и Python-клиента, и убедились в их взаимодействии. Вы изучили основы работы с Docker и Docker Compose.
Требования к отчету (напоминание со стр. 20):
- Титульный лист.
- Цели работы.
- Задание на работу.
- Описание процесса выполнения: Для каждого шага (особенно команд в терминале):
- Краткое описание действия (что вы делаете).
- Вводимая команда (или команды).
- Краткое описание реакции системы (например, вывод curl, сообщение об успешной сборке, скриншот браузера). Не нужно копировать длинные логи или HTML-код целиком, если это не критично. Достаточно показать ключевую часть вывода или описать результат словами/скриншотом.
- Выводы (что вы узнали, какие навыки приобрели).
Надеюсь, это пошаговое руководство поможет вам успешно выполнить лабораторную работу!