minio/docs/orchestration/docker-swarm
2017-06-15 14:20:36 -07:00
..
docker-compose-secrets.yaml Bump docs references to latest Minio release RELEASE.2017-06-13T19-01-01Z (#4546) 2017-06-15 14:20:36 -07:00
docker-compose.yaml Bump docs references to latest Minio release RELEASE.2017-06-13T19-01-01Z (#4546) 2017-06-15 14:20:36 -07:00
README.md Add steps to remove Minio volumes in the swarm (#4536) 2017-06-13 16:10:11 -07:00

Deploy Minio on Docker Swarm Slack Go Report Card Docker Pulls codecov

Docker Engine provides cluster management and orchestration features in Swarm mode. Minio server can be easily deployed in distributed mode on Swarm to create a multi-tenant, highly-available and scalable object store.

As of Docker Engine v1.13.0 (Docker Compose v3.0), Docker Swarm and Compose are cross-compatible. This allows a Compose file to be used as a template to deploy services on Swarm. We have used a Docker Compose file to create distributed Minio setup.

1. Prerequisites

2. Create a Swarm

Create a swarm on the manager node by running

docker swarm init --advertise-addr <MANAGER-IP>

Once the swarm is initialized, you'll see the below response.

docker swarm join \
  --token  SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c \
  192.168.99.100:2377

You can now add worker nodes to the swarm by running the above command. Find detailed steps to create the swarm on Docker documentation site.

3. Create Docker secrets for Minio

echo "AKIAIOSFODNN7EXAMPLE" | docker secret create access_key -
echo "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY" | docker secret create secret_key -

4. Deploy distributed Minio services

Download the Docker Compose file on your Swarm master. Then execute the command

docker stack deploy --compose-file=docker-compose-secrets.yaml minio_stack

This deploys services described in the Compose file as Docker stack minio_stack. Look up the docker stack command reference for more info.

After the stack is successfully deployed, you should be able to access Minio server via Minio Client mc or your browser at http://[Node_Public_IP_Address]:[Expose_Port_on_Host]

4. Remove distributed Minio services

Remove the distributed Minio services and related network by

docker stack rm minio_stack

Swarm doesn't automatically remove host volumes created for services. This may lead to corruption when a new Minio service is created in the swarm. So, we recommend removing all the volumes used by Minio, manually. To do this, go to each node in the swarm and list the volumes by

docker volume ls

Then remove minio_stack volumes by

docker volume rm volume_name 

Notes

  • By default the Docker Compose file uses the Docker image for latest Minio server release. You can change the image tag to pull a specific Minio Docker image.

  • There are 4 minio distributed instances created by default. You can add more Minio services (up to total 16) to your Minio Swarm deployment. To add a service

    • Replicate a service definition and change the name of the new service appropriately.
    • Add a volume in volumes section, and update volume section in the service accordingly.
    • Update the command section in each service. Specifically, add the drive location to be used as storage on the new service.
    • Update the port number to exposed for the new service.

    Read more about distributed Minio here.

  • By default the services use local volume driver. Refer to Docker documentation to explore further options.

  • Minio services in the Docker compose file expose ports 9001 to 9004. This allows multiple services to run on a host. Explore other configuration options in Docker documentation.

  • Docker Swarm uses ingress load balancing by default. You can configure external load balancer based on requirements.

Explore Further