May 6

10 лаба

Хорошо, давайте пошагово выполним лабораторную работу №7 на русском языке, используя одну из ваших виртуальных машин Ubuntu в VirtualBox. Будем следовать пунктам из раздела "Задание на лабораторную работу" (страница 19).

Предварительные шаги:

  1. Запустите одну из ваших ВМ Ubuntu в VirtualBox.
  2. Откройте окно Терминала (Ctrl+Alt+T или найдите "Терминал" в поиске).
  3. Убедитесь, что ваша ВМ имеет доступ в Интернет (возможно, потребуется настроить сеть в VirtualBox, обычно подходят "Сетевой мост" или "NAT").
  4. Обновите список пакетов: sudo apt update
  5. Установите nano (простой текстовый редактор для терминала), если он еще не установлен: sudo apt install nano -y IGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_END

Начинаем выполнение заданий:

(Шаг 1: Установить curl)

  1. Проверьте, установлен ли curl: curl --version IGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_END
    • Если команда выводит версию, curl уже установлен. Если вы видите curl: command not found (или аналогичное сообщение об ошибке на русском), его нужно установить.
  2. Установите curl (если не установлен): sudo apt install curl -y IGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_END
    • Ключ -y автоматически подтверждает установку.
  3. Проверьте установку еще раз: curl --version IGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_END
    • Теперь вы должны увидеть номер установленной версии.

(Шаг 2: Проверить, что curl возвращает содержимое html-страницы произвольного сайта)

  1. Получите HTML-содержимое сайта: Используем example.com, как в методичке (стр. 2), или любой другой сайт, например, ya.ru. curl http://example.com IGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_END
    • В терминал должен вывестись HTML-код главной страницы example.com. Это подтверждает, что curl работает и может получать данные по HTTP.

(Шаг 3: Установить nginx, запустить, убедиться, что содержимое тестовой страницы отображается в браузере, доступно по запросу curl)

  1. Установите nginx: sudo apt install nginx -y IGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_END
  2. Запустите службу nginx: sudo systemctl start nginx IGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_END
  3. Проверьте статус службы (убедитесь, что она активна/работает): sudo systemctl status nginx IGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_END
    • Вы должны увидеть active (running). Нажмите q, чтобы выйти из просмотра статуса.
  4. (Опционально, но рекомендуется) Разрешите автозапуск nginx при старте системы: sudo systemctl enable nginx IGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_END
  5. Проверка через браузер:
    • Узнайте IP-адрес вашей виртуальной машины. В терминале введите: ip addr show IGNORE_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!").
  6. Проверка через curl (в терминале ВМ): curl http://localhost IGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_END curl http://<IP-адрес_вашей_ВМ> IGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_END
    • Или используя IP-адрес:
    • Вы должны увидеть HTML-код стартовой страницы nginx.

(Шаг 4: Заменить страницу, которую отдает nginx по умолчанию или добавить новую на отдельный виртуальный хост...)

  • Следуем примеру из методички (стр. 4-5) по созданию нового виртуального хоста на порту 81.
  1. Создайте директорию для нового сайта: sudo mkdir -p /var/www/tutorial IGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_END
  2. Создайте HTML-файл для нового сайта: sudo nano /var/www/tutorial/index.html IGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_END
  3. Вставьте в редактор 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
  4. Сохраните файл и выйдите из nano: Нажмите Ctrl+O, затем Enter для сохранения, затем Ctrl+X для выхода.
  5. Создайте файл конфигурации для нового виртуального хоста: sudo nano /etc/nginx/sites-available/tutorial IGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_END
  6. Вставьте в редактор 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
  7. Сохраните файл и выйдите из nano (Ctrl+O, Enter, Ctrl+X).
  8. Создайте символическую ссылку, чтобы включить сайт: 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
  9. (Опционально, но рекомендуется для чистоты) Удалите ссылку на дефолтный сайт, если он мешает: sudo rm /etc/nginx/sites-enabled/default IGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_END
  10. Проверьте конфигурацию nginx на ошибки: sudo nginx -t IGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_END
    • Вы должны увидеть syntax is ok и test is successful.
  11. Перезапустите nginx, чтобы применить изменения: sudo systemctl restart nginx IGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_END
  12. Проверка:
    • Через браузер (на хосте): Откройте http://<IP-адрес_вашей_ВМ>:81 (например, http://192.168.1.105:81). Вы должны увидеть вашу новую страницу "Hello, Nginx!".
    • Через curl (в терминале ВМ): curl http://localhost:81 IGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_ENDВы должны увидеть HTML-код вашей новой страницы.

(Шаг 5: Установить Docker с помощью curl, настроить его и проверить работу с помощью тестового образа)

  1. Скачайте скрипт установки Docker (как на стр. 9): curl -fsSL https://get.docker.com -o get-docker.sh IGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_END
  2. Запустите скрипт установки: sudo sh get-docker.sh IGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_END
  3. Добавьте вашего текущего пользователя в группу docker, чтобы выполнять команды Docker без sudo (как на стр. 9): sudo usermod -aG docker $USER IGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_END
  4. ВАЖНО: Чтобы изменения группы вступили в силу, вам нужно выйти из системы и войти снова, либо выполнить команду newgrp docker в текущем терминале (но это изменение будет действовать только для этого терминала). Проще всего перезайти в систему или перезагрузить ВМ.
  5. После перезахода/перезагрузки, проверьте работу Docker с тестовым образом hello-world: docker run hello-world IGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_END
    • Docker скачает образ (если его нет локально) и запустит контейнер. Вы должны увидеть сообщение, начинающееся с "Hello from Docker!". Это означает, что Docker установлен и работает правильно.
  6. (Опционально, если docker run hello-world не сработал без sudo даже после перезахода): Иногда требуется изменить права на сокет Docker (как упомянуто на стр. 9). Используйте с осторожностью: sudo chmod 666 /var/run/docker.sock IGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_END
    • Попробуйте docker run hello-world еще раз.

(Шаг 6: Запустить nginx в контейнере, проверить его работу...)

  1. Запустите контейнер с официальным образом nginx: docker run --name my-nginx-container -d -p 8888:80 --rm nginx:latest IGNORE_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.
  2. Проверка:
    • Через браузер (на хосте): Откройте http://<IP-адрес_вашей_ВМ>:8888 (например, http://192.168.1.105:8888). Вы должны увидеть стандартную страницу "Welcome to nginx!", но на этот раз она отдается из Docker-контейнера.
    • Через curl (в терминале ВМ): curl http://localhost:8888 IGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_ENDВы должны увидеть HTML-код стандартной страницы nginx.
  3. (Для информации) Чтобы остановить и удалить контейнер (если не использовали --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, заменив в нем страницу... запустить контейнер с этим образом и проверить его работу...)

  • Следуем примеру со стр. 10.
  1. Создайте директорию для сборки вашего образа: mkdir ~/my-custom-nginx cd ~/my-custom-nginx IGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_END
  2. Создайте свой файл index.html: nano index.html IGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_END
  3. Вставьте в 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
  4. Сохраните и выйдите (Ctrl+O, Enter, Ctrl+X).
  5. Создайте файл Dockerfile: nano Dockerfile IGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_END
  6. Вставьте в nano следующие инструкции (из методички, стр. 10): # Используем базовый образ nginx FROM nginx:latest # Копируем наш index.html в директорию веб-сервера внутри контейнера COPY ./index.html /usr/share/nginx/html/index.html IGNORE_WHEN_COPYING_START content_copy download Use code with caution. DockerfileIGNORE_WHEN_COPYING_END
  7. Сохраните и выйдите (Ctrl+O, Enter, Ctrl+X).
  8. Соберите 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).
  9. Запустите контейнер из вашего нового образа: docker run --name my-custom-web -d -p 8080:80 --rm webserver IGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_END
    • Используем порт 8080 на хосте (ВМ) и имя my-custom-web. Обратите внимание, что мы запускаем образ webserver, который только что собрали.
  10. Проверка:
    • Через браузер (на хосте): Откройте http://<IP-адрес_вашей_ВМ>:8080. Вы должны увидеть вашу кастомную страницу "Hello from Nginx container".
    • Через curl (в терминале ВМ): curl http://localhost:8080 IGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_ENDВы должны увидеть HTML-код вашей кастомной страницы.
  11. Остановите контейнер: docker stop my-custom-web IGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_END

(Шаг 8: Создать новый проект docker-compose... собрать проект, убедиться, что сборка проходит корректно)

  • Следуем примеру клиент-серверного приложения на Python из методички (стр. 12-16).
  1. Установите Docker Compose (если еще не установлен): sudo apt install docker-compose -y IGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_END
    • Примечание: apt может установить не самую свежую версию. Для более новых версий см. официальную документацию Docker. Но для этой ЛР версии из apt должно хватить.
  2. Проверьте установку: docker-compose --version IGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_END
  3. Создайте директорию для проекта и перейдите в нее: mkdir ~/my-compose-app cd ~/my-compose-app IGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_END
  4. Создайте поддиректории для клиента и сервера: mkdir server client IGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_END
  5. Создайте файлы для серверной части:
    • 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Сохраните и выйдите.
  6. Создайте файлы для клиентской части:
    • 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Сохраните и выйдите.
  7. Создайте главный файл 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: - server IGNORE_WHEN_COPYING_START content_copy download Use code with caution. YamlIGNORE_WHEN_COPYING_ENDСохраните и выйдите.
  8. Соберите образы для всех сервисов в проекте: docker-compose build IGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_END
    • Убедитесь, что в выводе нет сообщений об ошибках и что сборка для server и client завершилась успешно (Successfully built ...).

(Шаг 9: Запустить проект docker-compose, убедиться, что в результате клиент получает от сервера html-файл. Проверить, что сервер также доступен через браузер)

  1. Запустите сервисы (в фоновом режиме): docker-compose up -d IGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_END
    • -d (detached) запускает контейнеры в фоне. Если запустить без -d, логи будут выводиться прямо в терминал, и терминал будет занят.
  2. Проверка клиента:
    • Посмотрите логи клиентского контейнера. Имя контейнера обычно формируется как <папка_проекта>_<имя_сервиса>_1, например my-compose-app_client_1. Узнать точное имя можно командой docker ps.
    • Просмотр логов: docker-compose logs client IGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_END docker-compose logs -f client IGNORE_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
  3. Проверка сервера:
    • Через браузер (на хосте): Откройте http://<IP-адрес_вашей_ВМ>:1234. Вы должны увидеть текст Docker-Compose is magic!.
    • Через curl (в терминале ВМ): curl http://localhost:1234 IGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_ENDВы должны увидеть текст Docker-Compose is magic!.

(Шаг 10: Остановить сервер, заменить содержимое html-страницы на свое, собрать и запустить проект заново, убедиться, что по клиенту доступна новая страница)

  1. Остановите и удалите контейнеры, созданные docker-compose: docker-compose down IGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_END
  2. Измените содержимое файла index.html на сервере: nano server/index.html IGNORE_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).
  3. Соберите проект заново (Docker заметит изменения и пересоздаст образ сервера) и запустите: docker-compose up -d --build IGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_END
    • Флаг --build заставляет Docker Compose пересобрать образы перед запуском.
  4. Проверка:
    • Проверьте логи клиента: docker-compose logs client IGNORE_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:1234 IGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_ENDВы должны увидеть Лабораторная работа №7 выполнена!.
    • Проверьте сервер через браузер: http://<IP-адрес_вашей_ВМ>:1234 также должен показать новый текст.

Завершение:

  • Когда закончите работу, можно снова остановить сервисы: docker-compose down IGNORE_WHEN_COPYING_START content_copy download Use code with caution. BashIGNORE_WHEN_COPYING_END

Результат (согласно стр. 20):

Вы установили и настроили curl, nginx, Docker и Docker Compose. Вы развернули nginx как на хосте, так и в контейнере Docker. Вы создали и запустили многоконтейнерное приложение с помощью Docker Compose, состоящее из Python-сервера и Python-клиента, и убедились в их взаимодействии. Вы изучили основы работы с Docker и Docker Compose.

Требования к отчету (напоминание со стр. 20):

Не забудьте включить в отчет:

  1. Титульный лист.
  2. Цели работы.
  3. Задание на работу.
  4. Описание процесса выполнения: Для каждого шага (особенно команд в терминале):
    • Краткое описание действия (что вы делаете).
    • Вводимая команда (или команды).
    • Краткое описание реакции системы (например, вывод curl, сообщение об успешной сборке, скриншот браузера). Не нужно копировать длинные логи или HTML-код целиком, если это не критично. Достаточно показать ключевую часть вывода или описать результат словами/скриншотом.
  5. Выводы (что вы узнали, какие навыки приобрели).

Надеюсь, это пошаговое руководство поможет вам успешно выполнить лабораторную работу!