Научиться основам работы с Docker Compose.
docker).Docker позволяет запускать приложения в чётко описанной программистом среде — контейнере.
Docker Compose позволяет запустить систему из нескольких взаимодействующих контейнеров.
Файлы Dockerfile описывают процесс создания образа и используют императивный стиль: Docker последовательно выполняет команды.
Файлы docker-compose.yaml описывают желаемое состояние разворачиваемой системы и используют декларативный стиль: Docker Compose должен привести состояние системы к описанию в файле.
Формат файлов *.yaml (*.yml) являются аналогом формата *.json и позволяет создавать структурированные человеко-понятные конфигурационные файлы. Важным элементом синтаксиса в этом формате являются отступы (аналогично отступам в синтаксисе в языке Python).
Сервисом (service) в терминах Docker Compose считается набор из одного или более однотипных контейнеров.
Откройте описание корневого элемента service и законспектируйте в отчет назначение следующих элементов:
imagebuildportsvolumescommanddepends_ondeployenv_fileenvironmentnetworksrestartВыполните команду docker compose up --help и законспектируйте в отчет:
up--build--detach--scaleВыполните команду docker compose --help и законспектируйте в отчет назначение команд:
pslogsdownexeckillcpcreatebuildstartstoprmСоздайте на сервере каталог wordpress и перейдите в него
Изучите описание образа WordPress и создайте docker-compose.yaml по приведенному образцу
Запустите систему в работу командой docker compose up -d
Проверьте работу контейнеров с помощью команды docker compose ps и добавьте в отчёт скриншот с результатом её работы
Проверьте работу системы в браузере и добавьте добавьте в отчёт скриншот
Остановите работу системы командой docker compose down
Вернитесь в домашний каталог пользователя, создайте в нем новый каталог custom и перейдите в него
Создайте новый файл app.py со следующим содержанием:
import time
import redis
from flask import Flask
app = Flask(__name__)
cache = redis.Redis(host='redis', port=6379)
def get_hit_count():
retries = 5
while True:
try:
return cache.incr('hits')
except redis.exceptions.ConnectionError as exc:
if retries == 0:
raise exc
retries -= 1
time.sleep(0.5)
@app.route('/')
def hello():
count = get_hit_count()
return 'Hello World! I have been seen {} times.\n'.format(count)
Создайте новый файл Dockerfile со следующим содержанием:
FROM python:3.11-alpine
WORKDIR /code
ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
RUN pip install flask redis
EXPOSE 5000
COPY . .
CMD ["flask", "run", "-h", "0.0.0.0"]
Создайте подкаталог data и новый файл docker-compose.yaml со следующими сервисами:
web должен собираться с помощью Dockerfile из п.12 и отображать порт 5000 в порт 80 на хостеredis должен использовать готовый образ redis:alpine и отображать подкаталог data в каталог /data в контейнереЗапустите систему в работу со сборкой образа
Добавьте в отчёт скриншот с результатом работы docker compose ps
Проверьте работу системы в браузере и добавьте добавьте в отчёт скриншот