Skip to main content

Step-by-step example to scale an ASP.NET dotnet core app with Docker Swarm.

---
title: "Step-by-step: Scale ASP.NET Core with Docker Swarm"
subtitle: 
author: Carlos Mendible
date: October 30, 2016
source: https://carlos.mendible.com/2016/10/30/step-by-step-scale-asp-net-core-with-docker-swarm/
---

A few weeks ago I posted [Step by step: ASP.NET Core on Docker](https://carlos.mendible.com/2016/09/26/step-by-step-asp-net-core-on-docker/)
were I showed how to build and run a [Docker](https://www.docker.com/) image
with an ASP.NET Core application.

Today I bring you: **Step by step: Scale ASP.NET Core with Docker Swarm** so
you can scale out or in the same [application](https://github.com/cmendible/dotnetcore.samples/tree/master/docker.helloworld).

Assuming you have [Docker 1.12 or later](https://www.docker.com/)
installed and running, follow this steps:

## 1. Create the Dockerfile

On your Docker box create a `Dockerfile` with the following contents:

```bash
# We use the microsoft/dotnet image as a starting point.
FROM microsoft/dotnet

# Install git
RUN apt-get install git -y

# Create a folder to clone our source code
RUN mkdir repositories

# Set our working folder
WORKDIR repositories

# Clone the source code
RUN git clone https://github.com/cmendible/aspnet-core-helloworld.git

# Set our working folder
WORKDIR aspnet-core-helloworld/src/dotnetstarter

# Expose port 5000 for the application.
EXPOSE 5000

# Restore nuget packages
RUN dotnet restore

# Start the application using dotnet!!!
ENTRYPOINT dotnet run
```

## 2. Create a Docker image

With the `Dockerfile` in place run the following command:

```bash
sudo docker build -t hello_world .
```

Now you have an image named `hello_world` with all the dependencies and code
needed to run the sample.

## 3. Initialize a Swarm

Initialize [Docker Swarm](https://docs.docker.com/swarm/):

```bash
docker swarm init
```

## 4. Create a Docker Service

Now that you have setup everything use the following command to create a service
named `hello_service` based on the `hello_world` image and start it:

```bash
docker service create --name hello_service --publish 5000:5000 hello_world
```

Wait a few seconds and navigate to <http://localhost:5000> and you should be
able to reach the web application.

If you want to learn more about Docker services, start here: [Service Create/](https://docs.docker.com/engine/reference/commandline/service_create/)

## 5. Scale up your application

Let's scale your service up to 3 instances with the following command:

```bash
docker service scale hello_service=3
```

If you want to see how many replicas your service is running issue the
following command:

```bash
docker service ls
```

> Note that it takes some seconds before all new replicas start.

## 6. Scale down your application

------------------------------------------------------------------------

Let's scale your service down to 1 instance with the following command:

```bash
docker service scale hello_service=1
```

## 7. Optional: Remove the service

If you are don't want the service anymore, remove it from the Swarm with
the following command:

```bash
docker service rm hello_service
```

You can get a copy of the [docker file here](https://github.com/cmendible/dotnetcore.samples/tree/master/docker.helloworld).

Hope it helps!