How to Deploy application Image using Docker Service

To deploy an application image when Docker Engine is in swarm mode, you create a service. Frequently a service

To deploy an application image when Docker Engine is in swarm mode, you create a service. Frequently a service will be the image for a microservice within the context of some larger application. Examples of services might include an HTTP server, a database, or any other type of executable program that you wish to run in a distributed environment. For more: Docker

docker service Flow
Image Source:

When you create a service, you specify which container image to use and which commands to execute inside running containers. You also define options for the service including:

  • the port where the swarm will make the service available outside the swarm
  • an overlay network for the service to connect to other services in the swarm
  • CPU and memory limits and reservations
  • a rolling update policy
  • the number of replicas of the image to run in the swarm

Starting with a service

Let’s pick a service or a long running container. This could be the sleep 500 command, but we can just as easily make it ping

Have a look at the new docker service command’s help page:

# docker service

docker service

Let’s go one by one docker service command.

docker service create

docker service create is synonymous with docker run, so anything we can do with docker run should work the same.

# docker run busybox ping
PING ( 56 data bytes
64 bytes from seq=0 ttl=46 time=76.507 ms
64 bytes from seq=1 ttl=46 time=76.387 ms
64 bytes from seq=2 ttl=46 time=76.376 ms
64 bytes from seq=3 ttl=46 time=76.325 ms

Here’s the equivalent command with docker service create:

# docker service create --name ping busybox ping

We have create the service with name, which we can refer it easily in future for our reference. This help us to refresh anytime our service and also its generated GUID of assigned a name to the service so that we can reference it easily, but Docker has also generated a GUID of 3uyw3cqsdwizqenk7jcgv1sbq.

docker service ls

Check which services we have running/created type in docker service ls as below:

# docker service ls
3uyw3cqsdwiz  ping  1/1       busybox  ping

docker service scale

Scaling this has never been easier, we just type in the name of the service and how many replicas we want.

# docker service scale ping=4

this command make ping service scaled to 4

We will now see that the docker service ls command gives 4/4 replicas as running and docker ps will show 4 unique containers running, too.

# docker service ls
ID                     NAME  REPLICAS  IMAGE     COMMAND
3uyw3cqsdwiz           ping  4/4       busybox   ping

docker scale remove

Once you have finished your work either scale back to 0 or remove the service with docker service rm ping

# docker service rm ping

Update a Service

You can change almost everything about an existing service using the docker service update command. When you update a service, Docker stops its containers and restarts them with the new configuration.

Since Nginx is a web service, it will work much better if you publish port 80 to clients outside the swarm. You can specify this when you create the service, using the -p or –publish flag. When updating an existing service, the flag is –publish-add. There is also a –publish-rm flag to remove a port that was previously published.

Assuming that the webserver service from the previous section still exists, use the following command to update it to publish port 80.

# docker service update --publish-add 80 webserver

To verify that it worked, use docker service ls:

# docker service ls 
ID            NAME       REPLICAS  IMAGE                COMMAND
0nbjrzb080mf  webserver  1/1       motoskia/apache-php

# docker ps

Remove a Service

To remove a service, use the docker service remove command. You can remove a service by its ID or name, as shown in the output of the docker service ls command. The following command removes the ping service.

# docker service remove ping