Installing Portainer in Docker Swarm: A Step-by-Step Guide
Portainer is an essential tool for managing your Docker environments, offering a simple yet powerful UI for handling containers, images, networks, and more. Integrating Portainer into your Docker Swarm enhances your cluster’s management, making it more efficient and user-friendly. Here’s a concise guide on installing Portainer within a Docker Swarm setup, leveraging the power of NFS for persistent data storage.
Prerequisites
- A Docker Swarm cluster is already initialized.
- NFS server is set up for persistent storage (in this case, at 192.168.0.220).
Step 1: Prepare the NFS Storage
Before proceeding with Portainer installation, ensure you have a dedicated NFS share for Portainer data:
- Create a directory on your NFS server (
192.168.0.220
) that will be used by Portainer:/data/portainer/data
. - Ensure this directory is exported and accessible by your Swarm nodes.
Step 2: Create the Portainer Service
The following Docker Compose file is designed for deployment in a Docker Swarm environment and utilizes NFS for storing Portainer’s data persistently.
version: '3.2'
services:
agent:
image: portainer/agent:latest
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /var/lib/docker/volumes:/var/lib/docker/volumes
networks:
- agent_network
deploy:
mode: global
placement:
constraints: [node.platform.os == linux]
portainer:
image: portainer/portainer-ee:latest
command: -H tcp://tasks.agent:9001 --tlsskipverify
ports:
- "9000:9000"
- "8000:8000"
volumes:
- type: volume
source: portainer_data
target: /data
volume:
nocopy: true
networks:
- agent_network
deploy:
mode: replicated
replicas: 1
placement:
constraints: [node.role == manager]
networks:
agent_network:
driver: overlay
attachable: true
volumes:
portainer_data:
driver: local
driver_opts:
type: nfs
o: addr=192.168.0.220,nolock,soft,rw
device: ":/data/portainer/data"
Step 3: Deploy Portainer
To deploy Portainer, save the above configuration to a file named portainer-agent-stack.yml
. Then, execute the following command on one of your Swarm manager nodes:
docker stack deploy -c portainer-agent-stack.yml portainer
This command deploys the Portainer server and its agent across the Swarm. The agent provides cluster-wide visibility to the Portainer server, enabling management of the entire Swarm from a single Portainer instance.
Step 4: Access Portainer
Once deployed, Portainer is accessible via http://<your-manager-node-ip>:9000
. The initial login requires setting up an admin user and password. After logging in, you can connect Portainer to your Docker Swarm environment by selecting it from the home screen.
Conclusion
Integrating Portainer into your Docker Swarm setup provides a robust, web-based UI for managing your cluster’s resources. By leveraging NFS for persistent storage, you ensure that your Portainer configuration and data remain intact across reboots and redeployments, enhancing the resilience and flexibility of your Docker Swarm environment.