Полезные заметки про docker-compose
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
Struchkov Mark 2024-10-30 16:53:48 +03:00
parent 13f385a1e2
commit 0c10c08403
No known key found for this signature in database
GPG Key ID: A3F0AC3F0FA52F3C
8 changed files with 214 additions and 3 deletions

View File

@ -0,0 +1,43 @@
---
aliases:
tags:
- maturity/🌱
date: 2024-10-30
---
Для проверки работоспособности запущенного контейнера можно задать команду `healthcheck`. Контейнер не будет считаться полностью запущенным, пока не выполнится проверка работоспособности. Это особенно полезно при запуске нескольких контейнеров, которые зависят друг от друга. Например, если один контейнер должен быть готов до того, как будет запущен другой.
Пример конфигурации:
```yaml
services:
database:
image: postgres:latest
container_name: database
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 10s
timeout: 5s
retries: 3
webapp:
image: my-webapp:latest
container_name: webapp
depends_on:
database:
condition: service_healthy
...
```
В этом примере контейнер с веб-приложением (`webapp`) зависит от контейнера с базой данных (`database`). Команда healthcheck для базы данных проверяет, готова ли PostgreSQL принимать подключения (`pg_isready`), и контейнер будет считаться здоровым только после успешного выполнения этой проверки.
***
## Мета информация
**Область**:: [[../../../meta/zero/00 Docker Compose|00 Docker Compose]]
**Родитель**::
**Источник**::
**Создана**:: [[2024-10-30]]
**Автор**::
### Дополнительные материалы
-
### Дочерние заметки
<!-- QueryToSerialize: LIST FROM [[]] WHERE contains(Родитель, this.file.link) or contains(parents, this.file.link) -->

View File

@ -0,0 +1,34 @@
---
aliases:
tags:
- maturity/🌱
date: 2024-10-30
---
Добавив всего пару строк в конфигурацию, вы можете запустить несколько экземпляров вашего приложения ([[../../architecture/highload/Горизонтальное масштабирование|Горизонтальное масштабирование]]).
```
services:
my-service:
...
ports:
- 8080-8082:8080
deploy:
replicas: 3
```
> [!Note] Балансировка нагрузки
> Docker не выполняет автоматическое распределение нагрузки между репликами, поэтому важно настроить балансировку с помощью внешних инструментов, таких как nginx ([[../nginx/Балансировка нагрузки в Nginx|Балансировка запросов на Nginx]]). Это необходимо для того, чтобы равномерно распределять запросы между репликами и обеспечить более стабильную работу приложения.
***
## Мета информация
**Область**:: [[../../../meta/zero/00 Docker Compose|00 Docker Compose]]
**Родитель**::
**Источник**::
**Создана**:: [[2024-10-30]]
**Автор**::
### Дополнительные материалы
-
### Дочерние заметки
<!-- QueryToSerialize: LIST FROM [[]] WHERE contains(Родитель, this.file.link) or contains(parents, this.file.link) -->

View File

@ -0,0 +1,55 @@
---
aliases:
tags:
- maturity/🌱
date: 2024-10-30
---
Используя ограничения на CPU и RAM, вы можете проводить локальное нагрузочное тестирование и наблюдать, как сервис будет работать в условиях, близких к реальным.
Синтаксис ограничения ресурсов в файле docker-compose.yml может отличаться в зависимости от версии файла, указанной в первой строке. Вот пример для версии 3.7:
```yaml
version: 3.7
services:
my-service:
...
deploy:
resources:
limits:
cpus: '2'
memory: '256M'
```
Важно помнить, что ограничение памяти контейнера не означает автоматического ограничения памяти для JVM. По умолчанию JVM использует не более 1/4 от доступной памяти системы, но не менее 128 MB. Таким образом, если контейнеру выделено 512 MB памяти, Java будет использовать только 128 MB, что приведет к неэффективному использованию оставшихся ресурсов. Чтобы этого избежать, следует явно задавать объем доступной памяти для JVM.
Кроме того, в Docker можно использовать не только `limits` для задания максимального количества ресурсов, но и `reservations` для задания минимальных гарантированных ресурсов, которые будут выделены для контейнера. Например:
```yaml
services:
my-service:
...
deploy:
resources:
limits:
cpus: '2'
memory: '256M'
reservations:
cpus: '1'
memory: '128M'
```
Параметры `reservations` позволяют гарантировать минимально необходимое количество ресурсов для стабильной работы приложения, что особенно полезно при работе в условиях ограниченных вычислительных мощностей.
***
## Мета информация
**Область**:: [[../../../meta/zero/00 Docker Compose|00 Docker Compose]]
**Родитель**::
**Источник**::
**Создана**:: [[2024-10-30]]
**Автор**::
### Дополнительные материалы
-
### Дочерние заметки
<!-- QueryToSerialize: LIST FROM [[]] WHERE contains(Родитель, this.file.link) or contains(parents, this.file.link) -->

View File

@ -45,7 +45,7 @@ Docker Compose 2.2.3
***
## Мета информация
**Область**:: [[../../../meta/zero/00 Docker|00 Docker]]
**Область**:: [[../../../meta/zero/00 Docker|00 Docker]], [[../../../meta/zero/00 Docker Compose|00 Docker Compose]]
**Родитель**::
**Источник**::
**Автор**::

View File

@ -0,0 +1,63 @@
---
aliases:
- Балансировка запросов на Nginx
tags:
- maturity/🌱
date: 2024-10-30
---
Блок `upstream` используется для указания списка серверов, между которыми nginx будет распределять входящие запросы, тем самым обеспечивая [[../../../../../_inbox/Балансировка нагрузки|балансировку нагрузки]]. В блоке `upstream` перечисляются серверы, между которыми будет распределяться нагрузка.
```nginx
upstream myapp {
server server1.example.com;
server server2.example.com;
server server3.example.com;
}
```
Затем настройте блок `server`, чтобы перенаправлять запросы к вашему блоку `upstream`. В блоке `server` используйте директиву `proxy_pass` внутри `location`, как показано ниже:
```nginx
server {
listen 80;
location / {
proxy_pass http://myapp;
}
}
```
## Метод балансировки
Nginx поддерживает несколько методов балансировки нагрузки, включая round-robin (по умолчанию), least-connected и ip-hash. Вы можете выбрать нужный метод, добавив соответствующую директиву в блок `upstream`.
```nginx
upstream myapp {
least_conn;
server server1.example.com;
server server2.example.com;
server server3.example.com;
}
```
## Резервные сервера
Чтобы повысить отказоустойчивость, можно добавить резервные серверы, к которым будут перенаправляться запросы, если основные серверы недоступны:
```nginx
upstream myapp {
server server1.example.com;
server server2.example.com;
server server3.example.com;
server backup.example.com backup;
}
```
***
## Мета информация
**Область**:: [[../../../meta/zero/00 Nginx|00 Nginx]]
**Родитель**::
**Источник**::
**Создана**:: [[2024-10-30]]
**Автор**::
### Дополнительные материалы
-
### Дочерние заметки
<!-- QueryToSerialize: LIST FROM [[]] WHERE contains(Родитель, this.file.link) or contains(parents, this.file.link) -->

View File

@ -0,0 +1,15 @@
---
aliases:
- Docker Compose
date: 2024-10-30
parents:
- "[[00 Docker|00 Docker]]"
tags:
- type/zero-link
---
- [[../../dev/devops/docker/Установка Docker и Docker Compose|Установка Docker и Docker Compose]]
## Полезное
- [[../../dev/devops/docker/Ограничение ресурсов в docker-compose|Ограничение ресурсов в docker-compose]]
- [[../../dev/devops/docker/Запуск нескольких реплик в docker-compose|Запуск нескольких реплик в docker-compose]]
- [[../../dev/devops/docker/Healthcheck в docker-compose|Healthcheck в docker-compose]]

View File

@ -11,7 +11,7 @@ title: Docker
Обычно docker запускается от root пользователя.
- [Установка Docker и DockerCompose](../../../../_inbox/Установка%20Docker%20и%20DockerCompose.md)
- [[../../dev/devops/docker/Установка Docker и Docker Compose|Установка Docker и Docker Compose]]
- [Команды Docker](Команды%20Docker.md)
- [Dockerfile](../../dev/devops/docker/Dockerfile.md)
- [Docker Network](../../dev/devops/docker/Docker%20Network.md)

View File

@ -29,12 +29,13 @@ ps aux | grep nginx
- [Оптимизация работы соединений Nginx](Оптимизация%20работы%20соединений%20Nginx.md)
- [Кэширование на стороне Nginx](../../dev/devops/nginx/Кэширование%20на%20стороне%20Nginx.md)
- [Кэширование статики в Nginx](../../dev/devops/nginx/Кэширование%20статики%20в%20Nginx.md)
- [Балансировка запросов на Nginx](Балансировка%20запросов%20на%20Nginx.md)
- [Балансировка нагрузки в Nginx](../../dev/devops/nginx/Балансировка%20нагрузки%20в%20Nginx.md)
- [GZIP сжатие в Nginx](../../dev/devops/nginx/GZIP%20сжатие%20в%20Nginx.md)
## Дополнительные материалы
- [Оптимизация NGINX](https://struchkov.dev/blog/ru/nginx-optimization/)
- [Масштабируемая конфигурация nginx](https://highload.guide/blog/scalable-configuration-nginx.html)
- [[../../dev/devops/nginx/Балансировка нагрузки в Nginx|Балансировка запросов на Nginx]]
## Заметки
- Есть какой-то модуль, который позволяет отправлять события в [00 Kafka](00%20Kafka.md)