diff --git a/apps/docs/content/docs/core/applications/advanced.mdx b/apps/docs/content/docs/core/applications/advanced.mdx index 619c22a..2b8b20d 100644 --- a/apps/docs/content/docs/core/applications/advanced.mdx +++ b/apps/docs/content/docs/core/applications/advanced.mdx @@ -101,12 +101,131 @@ Modifying Swarm Settings requires careful consideration as incorrect configurati ## Resources -Manage the memory and CPU resources allocated to your applications or databases. +Manage the memory and CPU resources allocated to your applications or databases. These settings help control resource consumption and ensure fair distribution across your containers. -- **Memory Reservation**: The minimum amount of memory guaranteed to the application. -- **Memory Limit**: The maximum amount of memory the application can use. -- **CPU Limit**: The maximum number of CPU units that the application can utilize. -- **CPU Reservation**: The minimum number of CPU units reserved for the application. + + Remember to click **Redeploy** after modifying the resources to apply the changes. + + +### Memory Resources + +Docker API expects memory values in **bytes**. Dokploy provides a user-friendly interface that accepts values with units and converts them automatically. + +#### Memory Limit + +The maximum amount of memory the container can use. If the container tries to use more memory than this limit, it will be killed by the Docker daemon. + +**Format**: Enter a number followed by the unit (B, KB, MB, GB) + +**Docker API Value**: The value is converted to bytes internally +- `1073741824` bytes = 1GB +- `268435456` bytes = 256MB +- `536870912` bytes = 512MB + +**Examples**: +- `256MB` → Limits container to 256 megabytes +- `1GB` → Limits container to 1 gigabyte +- `2GB` → Limits container to 2 gigabytes + +#### Memory Reservation + +The minimum amount of memory guaranteed to the container. Docker will try to ensure this amount is always available, but the container can use more if available. + +**Format**: Enter a number followed by the unit (B, KB, MB, GB) + +**Docker API Value**: The value is converted to bytes internally +- `268435456` bytes = 256MB +- `536870912` bytes = 512MB + +**Examples**: +- `128MB` → Reserves at least 128 megabytes +- `256MB` → Reserves at least 256 megabytes +- `512MB` → Reserves at least 512 megabytes + + + Memory Reservation should always be **less than or equal to** Memory Limit. If you set a reservation higher than the limit, Docker will use the limit value. + + +### CPU Resources + +Docker API expects CPU values in **nanoseconds** (for periods) or as a decimal fraction of available CPU cores. Dokploy displays this in a user-friendly format. + +#### CPU Limit + +The maximum number of CPU cores the container can use. This is a hard limit enforced by the Docker daemon. + +**Format**: Enter as a decimal number representing CPU cores +- `2000000000` nanoseconds = 2 CPUs (2 full cores) +- `1000000000` nanoseconds = 1 CPU (1 full core) +- `500000000` nanoseconds = 0.5 CPU (half a core) + +**Docker API Value**: Internally represented as `NanoCPUs` + +**Examples**: +- `1 CPU` → Limits to 1 full CPU core (1000000000 nanoseconds) +- `2 CPUs` → Limits to 2 full CPU cores (2000000000 nanoseconds) +- `0.5 CPU` → Limits to half a CPU core (500000000 nanoseconds) +- `4 CPUs` → Limits to 4 full CPU cores (4000000000 nanoseconds) + +#### CPU Reservation + +The minimum number of CPU cores reserved for the container. Docker will try to ensure this amount is always available. + +**Format**: Enter as a decimal number representing CPU cores +- `1000000000` nanoseconds = 1 CPU +- `500000000` nanoseconds = 0.5 CPU + +**Docker API Value**: Internally represented as `NanoCPUs` + +**Examples**: +- `0.5 CPU` → Reserves half a CPU core (500000000 nanoseconds) +- `1 CPU` → Reserves 1 full CPU core (1000000000 nanoseconds) +- `0.25 CPU` → Reserves a quarter CPU core (250000000 nanoseconds) + + + CPU Reservation should always be **less than or equal to** CPU Limit. Setting it too high may prevent the container from starting if resources aren't available. + + + + +#### Docker API Reference + +When Dokploy communicates with Docker API, these values are sent in the service specification: + +```json +{ + "TaskTemplate": { + "Resources": { + "Limits": { + "NanoCPUs": 2000000000, + "MemoryBytes": 1073741824 + }, + "Reservations": { + "NanoCPUs": 1000000000, + "MemoryBytes": 536870912 + } + } + } +} +``` + +This JSON represents: +- **CPU Limit**: 2 CPUs (2000000000 nanoseconds) +- **Memory Limit**: 1GB (1073741824 bytes) +- **CPU Reservation**: 1 CPU (1000000000 nanoseconds) +- **Memory Reservation**: 512MB (536870912 bytes) + +#### Learn More + +For detailed information about Docker API resource specifications and service creation, refer to the official Docker Engine API documentation: + +[Docker Engine API - Service Create](https://docs.docker.com/reference/api/engine/version/v1.51/#tag/Service/operation/ServiceCreate) + +This documentation includes: +- Complete resource specification schema +- Advanced configuration options +- API request/response examples +- Additional parameters and constraints ### Volumes/Mounts @@ -127,7 +246,7 @@ Configure persistent storage for your application to ensure data remains intact 2. **File Path**: The name of the file. 3. **Mount Path**: Path in the container where the file is placed. **The path must also contain the filename.** -File mounts are a dokploy features, this create a file in a folder called `files` inside your project, so it recreates every single time you deploy your project. +File mounts are a Dokploy feature. When you create a file mount, Dokploy stores the file in a folder called `files` inside your project directory. This file is created once when you set up the file mount and persists across deployments.