Файл: Отчет по практической работе 9 Межконтейнерное взаимодействие dockerконтейнеров через localhost.docx
Добавлен: 07.11.2023
Просмотров: 85
Скачиваний: 3
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
| | | |
| МИНОБРНАУКИ РОССИИ | ||
| Федеральное государственное бюджетное образовательное учреждение высшего образования «МИРЭА – Российский технологический университет» РТУ МИРЭА | ||
| ОТЧЕТ ПО ПРАКТИЧЕСКОЙ РАБОТЕ № 9 «Межконтейнерное взаимодействие docker-контейнеров через localhost» | |
| по дисциплине | |
| «Настройка и администрирование сервисного программного обеспечения» | |
| | |
| Выполнил студент группы ИКБО-30-21 | Смирнов А.Е. |
| Принял преподаватель | Благирев М.М |
| Практическая работа выполнена | «__»_______2023 г. | (подпись студента) |
| | | |
| «Зачтено» | «__»_______2023 г. | (подпись руководителя) |
При этом не нужно устанавливать параметр --net если не нужно создавать определенную сеть для использования определенных контейнеров.По умолчанию в Docker включено межконтейнерное взаимодействие, это означает, что все контейнеры могут взаимодействовать между собой (используя сеть docker0). Эта возможность может быть отключена путём запуска Docker сервиса с флагом --icc=false.Для сетевого взаимодействия контейнеров можно сделать следующее:1) создать новую сеть $ docker network create
2) Подключить контейнеры к сети
$ docker run --net=
или
$ docker network connect
3) пинг контейнер по имени
docker exec -ti
Задание на практическую работу
Создать два докер-контейнера, которые будут одновременно "слушать" localhost на разных портах. Пользователь делает запрос к контейнеру №1. Далее контейнер №1 делает запрос к контейнеру №2. Контейнер №2 обработает запрос, передаст результат контейнеру №1. Контейнер №1 передаст результат пользователю. API может быть реализовано на любой технологии. В итоге необходимо настроить систему из нескольких контейнеров, связанных друг с другом.
Листинг 1 - Файл docker-compose.yml
| version: '3' services: container1: build: ./container1 ports: - "8000:8000" container2: build: ./container2 ports: - "5000:5000" |
Листинг 2 - Файл app.py директории container1
| from flask import Flask import requests app = Flask(__name__) @app.route('/') def index(): response = requests.get('http://container2:5000') return response.text if __name__ == '__main__': app.run(host='0.0.0.0', port=8000) |
Листинг 3 - Файл Dockerfile директории container1
| FROM python:3.9 WORKDIR /app COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt COPY . . EXPOSE 8000 CMD ["python", "app.py"] |
Листинг 4 - Файл requirements.txt директории container1
| flask==2.0.1 requests==2.26.0 |
Листинг 5 - Файл app.js директории container2
| const express = require('express'); const app = express(); app.get('/', (req,res) => { res.end('Hello from Container 2!') }); app.listen(5000, () => { console.log('Server running on port 5000'); }); |
Листинг 6- Файл Dockerfile директории container2
| FROM node:14 WORKDIR /app RUN npm install COPY . . EXPOSE 5000 CMD ["node", "app.js"] |
Листинг 7- Файл package.json директории container2
| { "dependencies": { "express": "^4.17.1", "axios": "^0.21.1" } } |
Рисунок 1 – Результат выполнения команды docker-compose up
Рисунок 2 – Подтверждение выполненного GET-запроса
Вывод:
В ходе выполнения данной практической работы были получены навыки создания сетевого соединения и передачи данных между docker-контейнерами посредством locallhost.
Список литературы
1. Соединение контейнеров опцией --link. – URL: https://docs.docker.com/network/links/ (дата обращения: 03.05.2023).
2. Обзор сетевых возможностей Docker. – URL: https://docs.docker.com/network/ (дата обращения: 03.05.2023).
3. Сейерс, Э. Х. Docker на практике / Э. Х. Сейерс, А. Милл ; перевод с английского Д. А. Беликов. — Москва: ДМК Пресс, 2020. — 516 с. — ISBN 978-5-97060-772-5. — Текст : электронный // Лань : электроннобиблиотечная система. — URL: https://e.lanbook.com/book/131719 (дата обращения: 03.05.2023). — Режим доступа: для авториз. пользователей.