diff --git a/dockertest/README.md b/dockertest/README.md
new file mode 100644
index 0000000..72c6c79
--- /dev/null
+++ b/dockertest/README.md
@@ -0,0 +1,100 @@
+## dockertest
+
+### Что нужно сделать?
+
+Установить docker и добиться успешного запуска команды
+```
+docker compose up
+```
+
+### С чего начать?
+
+
+ Дополнительные шаги для Windows 10
+
+
+
+1. Установить WSL2 по [инструкции от Microsoft](https://docs.microsoft.com/en-us/windows/wsl/install-win10).
+**Важно:** нужна именно вторая версия **WSL2**, проверьте, что она совместима с вашей системой.
+Если шаг 5 не работает, включите опцию `Windows Hypervisor Platform` (Settings -> Apps -> Apps & features -> Optional features -> More Windows Features -> включить чекбокс Windows Hypervisor Platform).
+
+2. Установите Docker Desktop по [инструкции](https://docs.docker.com/docker-for-windows/wsl/#download). Вероятно, выполнять шаги по активации поддержки WSL не потребуется, все подключится автоматически.
+
+3. Запустите Docker Desktop (никакие контейнеры запускать не надо, только если хотите убедиться в том, что все работает).
+Запустите установленную в п.1 Linux OS через WSL2.
+Далее используйте этот Linux для выполнения дальнейших шагов этого README.
+
+_Замечание_: запущенный, но уже не использующийся Docker Desktop с бекэндом WSL занимает впустую много оперативной памяти, см [issue](https://github.com/microsoft/WSL/issues/4166) - можно ограничить максимальный доступный ему объем (см. [workaround](https://github.com/microsoft/WSL/issues/4166#issuecomment-526725261)), либо отключить автозапуск Docker Desktop и останавливать сервис, когда вы его не используете.
+
+
+
+#### Установить docker
+
+https://docs.docker.com/engine/install/
+
+После стандартной процедуры установки на Linux будет создана группа `docker`.
+Чтобы использовать docker cli без sudo, нужно добавить себя в эту группу:
+```
+sudo groupadd docker
+sudo usermod -aG docker $USER
+```
+После этого разлогиньтесь из os и залогиньтесь заново (или перезапустите систему).
+
+Для проверки можно запустить
+```
+docker run hello-world
+```
+
+#### Запустить контейнеры не через тесты
+
+В директории `dockertest` выполнить
+```
+docker compose up
+```
+
+### Что делать, если сразу не заработало?
+
+Поискать решение проблемы в интернете.
+
+Если решение найдено и проблема выглядит общей, сделать merge request с улучшением README.
+
+Если интернет не помог, спросить в чате.
+
+### docker-compose cheat sheet
+
+Запустить все контейнеры в daemon режиме пересобрав образы:
+```
+docker compose up -d --build
+```
+
+Остановить все контейнеры:
+```
+docker compose down
+```
+
+### Docker cheat sheet
+
+Получить список образов:
+```
+docker images
+```
+
+Список всех контейнеров:
+```
+docker ps -a
+```
+
+Остановить контейнер:
+```
+docker stop
+```
+
+Удалить контейнер:
+```
+docker rm
+```
+
+Удалить образ:
+```
+docker rmi
+```
diff --git a/dockertest/docker-compose.yaml b/dockertest/docker-compose.yaml
new file mode 100644
index 0000000..b84dede
--- /dev/null
+++ b/dockertest/docker-compose.yaml
@@ -0,0 +1,30 @@
+version: '3'
+services:
+ pg:
+ build: ./postgres/
+ environment:
+ POSTGRES_DB: test
+ POSTGRES_USER: gopher
+ POSTGRES_PASSWORD: pass
+ ports:
+ - 5432:5432
+
+ redis:
+ image: "redis:alpine"
+ hostname: redis
+ ports:
+ - "6379:6379"
+
+ prometheus:
+ image: prom/prometheus:latest
+ ports:
+ - 9090:9090
+
+ grafana:
+ image: grafana/grafana:latest
+ environment:
+ - GF_SECURITY_ADMIN_USER=gopher
+ - GF_SECURITY_ADMIN_PASSWORD=pass
+ - GF_USERS_ALLOW_SIGN_UP=false
+ ports:
+ - 3000:3000
diff --git a/dockertest/postgres/Dockerfile b/dockertest/postgres/Dockerfile
new file mode 100644
index 0000000..8566692
--- /dev/null
+++ b/dockertest/postgres/Dockerfile
@@ -0,0 +1,3 @@
+FROM postgres:latest
+
+COPY init.sql /docker-entrypoint-initdb.d/10-init.sql
diff --git a/dockertest/postgres/init.sql b/dockertest/postgres/init.sql
new file mode 100644
index 0000000..459cdb3
--- /dev/null
+++ b/dockertest/postgres/init.sql
@@ -0,0 +1,7 @@
+create table Role(
+ RoleID SERIAL PRIMARY KEY,
+ RoleName varchar(50)
+);
+
+insert into Role(RoleName)
+values ('Admin'),('User');