Полезные заметки про docker-compose
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
parent
13f385a1e2
commit
0c10c08403
43
dev/devops/docker/Healthcheck в docker-compose.md
Normal file
43
dev/devops/docker/Healthcheck в docker-compose.md
Normal 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) -->
|
||||||
|
|
@ -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) -->
|
||||||
|
|
55
dev/devops/docker/Ограничение ресурсов в docker-compose.md
Normal file
55
dev/devops/docker/Ограничение ресурсов в docker-compose.md
Normal 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) -->
|
||||||
|
|
@ -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]]
|
||||||
**Родитель**::
|
**Родитель**::
|
||||||
**Источник**::
|
**Источник**::
|
||||||
**Автор**::
|
**Автор**::
|
||||||
|
63
dev/devops/nginx/Балансировка нагрузки в Nginx.md
Normal file
63
dev/devops/nginx/Балансировка нагрузки в Nginx.md
Normal 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) -->
|
||||||
|
|
15
meta/zero/00 Docker Compose.md
Normal file
15
meta/zero/00 Docker Compose.md
Normal 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]]
|
@ -11,7 +11,7 @@ title: Docker
|
|||||||
|
|
||||||
Обычно docker запускается от root пользователя.
|
Обычно docker запускается от root пользователя.
|
||||||
|
|
||||||
- [Установка Docker и DockerCompose](../../../../_inbox/Установка%20Docker%20и%20DockerCompose.md)
|
- [[../../dev/devops/docker/Установка Docker и Docker Compose|Установка Docker и Docker Compose]]
|
||||||
- [Команды Docker](Команды%20Docker.md)
|
- [Команды Docker](Команды%20Docker.md)
|
||||||
- [Dockerfile](../../dev/devops/docker/Dockerfile.md)
|
- [Dockerfile](../../dev/devops/docker/Dockerfile.md)
|
||||||
- [Docker Network](../../dev/devops/docker/Docker%20Network.md)
|
- [Docker Network](../../dev/devops/docker/Docker%20Network.md)
|
||||||
|
@ -29,12 +29,13 @@ ps aux | grep nginx
|
|||||||
- [Оптимизация работы соединений Nginx](Оптимизация%20работы%20соединений%20Nginx.md)
|
- [Оптимизация работы соединений Nginx](Оптимизация%20работы%20соединений%20Nginx.md)
|
||||||
- [Кэширование на стороне Nginx](../../dev/devops/nginx/Кэширование%20на%20стороне%20Nginx.md)
|
- [Кэширование на стороне Nginx](../../dev/devops/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)
|
- [GZIP сжатие в Nginx](../../dev/devops/nginx/GZIP%20сжатие%20в%20Nginx.md)
|
||||||
|
|
||||||
## Дополнительные материалы
|
## Дополнительные материалы
|
||||||
- [Оптимизация NGINX](https://struchkov.dev/blog/ru/nginx-optimization/)
|
- [Оптимизация NGINX](https://struchkov.dev/blog/ru/nginx-optimization/)
|
||||||
- [Масштабируемая конфигурация nginx](https://highload.guide/blog/scalable-configuration-nginx.html)
|
- [Масштабируемая конфигурация nginx](https://highload.guide/blog/scalable-configuration-nginx.html)
|
||||||
|
- [[../../dev/devops/nginx/Балансировка нагрузки в Nginx|Балансировка запросов на Nginx]]
|
||||||
|
|
||||||
## Заметки
|
## Заметки
|
||||||
- Есть какой-то модуль, который позволяет отправлять события в [00 Kafka](00%20Kafka.md)
|
- Есть какой-то модуль, который позволяет отправлять события в [00 Kafka](00%20Kafka.md)
|
Loading…
Reference in New Issue
Block a user