> For the complete documentation index, see [llms.txt](https://a7246c5516ab4c80cdfe21ca2be3e40c.gitbook.io/docker-basics/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://a7246c5516ab4c80cdfe21ca2be3e40c.gitbook.io/docker-basics/swarm.md).

# swarm

Docker Swarm is a native clustering and orchestration solution for Docker. It allows you to create and manage a swarm of Docker nodes, turning them into a single virtual Docker host. Here's a guide on how to use Docker Swarm:

#### Initializing a Docker Swarm:

**1. Initialize a Swarm on a Manager Node:**

* Choose a node to be the manager and run the following command:

```bash
docker swarm init --advertise-addr <manager-ip>
```

Replace `<manager-ip>` with the IP address of the manager node. This command generates a token that you can use to join worker nodes to the swarm.

**2. Join Worker Nodes:**

* On each worker node, run the command provided by the `docker swarm init` output on the manager.

```bash
docker swarm join --token <token> <manager-ip>:<manager-port>
```

Replace `<token>`, `<manager-ip>`, and `<manager-port>` with the values from the manager node.

**3. View Swarm Nodes:**

* On the manager node, run the following command to view the nodes in the swarm:

```bash
docker node ls
```

This should show the manager and worker nodes.

#### Deploying Services in a Swarm:

**1. Deploy a Service:**

* Deploy a service using the `docker service create` command. For example, deploying a simple web service:

```bash
docker service create --name web --publish 80:80 --replicas 3 nginx:latest
```

This command creates a service named "web" running three replicas of the Nginx image.

**2. View Running Services:**

* List the running services in the swarm:

```bash
docker service ls
```

**3. Scale a Service:**

* Scale a service to increase or decrease the number of replicas:

```bash
docker service scale web=5
```

This scales the "web" service to have five replicas.

**4. Inspect a Service:**

* Inspect details about a specific service:

```bash
docker service inspect web
```

**5. Update a Service:**

* Update the configuration of a service:

```bash
docker service update --image new-image:tag web
```

This updates the image version of the "web" service.

**6. Remove a Service:**

* Remove a running service:

```bash
docker service rm web
```

#### Swarm Networking:

**1. Overlay Networks:**

* Create overlay networks to enable communication between services across nodes:

```bash
docker network create --driver overlay my-overlay-network
```

**2. Attach Services to Networks:**

* When deploying a service, specify the network to which it should be attached:

```bash
docker service create --name my-service --network my-overlay-network my-image:tag
```

**3. Inspect Networks:**

* Inspect details about a network:

```bash
docker network inspect my-overlay-network
```

#### Rolling Updates and Rollbacks:

**1. Rolling Updates:**

* Perform rolling updates to update services without downtime:

```bash
docker service update --image new-image:tag --update-delay 10s web
```

This updates the "web" service with a new image, waiting 10 seconds between updating each replica.

**2. Rollback a Service Update:**

* Roll back a service update to a previous version:

```bash
docker service rollback web
```

#### Cleanup:

**1. Leave the Swarm:**

* To leave a node from the swarm, run the following command on the node:

```bash
docker swarm leave
```

**2. Shutdown the Swarm:**

* On the manager node, run:

```bash
docker swarm leave --force
```

This shuts down the swarm.

#### Additional Tips:

* Docker Swarm uses the concept of services for long-running tasks and containers for short-lived tasks.
* The manager node is responsible for orchestrating the swarm, while worker nodes run the tasks.
* Consider using tools like Docker Compose to define and deploy multi-container applications in a Docker Swarm.

Docker Swarm provides a simple yet powerful way to orchestrate and manage Docker containers in a distributed environment. This guide covers the basics, and you can explore additional features and options in the Docker Swarm documentation.
