Reading time: ~10 minutes
Audience: Docker users who prefer GUIs over terminal commands
Last tested: Portainer CE 2.25, June 2026
What Is Portainer?
Overview
Portainer Community Edition (CE) is a lightweight web-based management interface for Docker, Docker Swarm, and Kubernetes. It translates every Docker operation — starting containers, inspecting logs, managing volumes, editing Compose files — into clickable buttons and forms.
For homelab users, Portainer eliminates the need to SSH into your server every time you want to check a container log or update an image. It also provides a built-in stack editor with Git integration, making it ideal for managing 10–50 self-hosted applications.
Key Benefits
| Feature | Portainer | Docker CLI |
|---|---|---|
| Start/stop containers | One click | docker start/stop |
| View logs | Real-time web stream | docker logs -f |
| Edit Compose stacks | In-browser YAML editor + redeploy | Edit file + CLI commands |
| Browse container files | Web file manager | docker exec -it ... bash |
| Multi-host management | Single UI for multiple nodes | SSH to each host |
| App templates | 50+ one-click app templates | Manual docker compose up |
Portainer CE vs Portainer Business (BE)
| Capability | CE (Free) | BE (Paid) |
|---|---|---|
| Container management | ✅ | ✅ |
| Stack editing | ✅ | ✅ |
| Multi-environment | 1 | Unlimited |
| RBAC / Teams | ❌ | ✅ |
| Registry management | ✅ | ✅ |
For single-user homelabs, CE provides everything you need.
Prerequisites
Hardware Requirements
| Component | Minimum | Recommended |
|---|---|---|
| CPU | Any x86_64 or ARM64 | 2 cores |
| RAM | 512 MB for Portainer itself | 2 GB total for host |
| Storage | 10 MB for Portainer image | 20 GB SSD for host |
| Network | Same subnet as your client | Static IP preferred |
Software Requirements
- Docker Engine 24.0+ with Docker Compose plugin
- A Linux host (Ubuntu, Debian, Proxmox LXC, Raspberry Pi OS)
- The host must have internet access to pull images
Step 1: Create the Portainer Data Volume
Objective
Prepare persistent storage so Portainer settings survive updates.
Step-by-Step Instructions
-
SSH into your Docker host.
-
Create a dedicated Docker volume:
docker volume create portainer_data
- Verify it exists:
docker volume ls
Why a named volume? Portainer stores user accounts, endpoint configurations, and stack definitions in
/data. A named volume persists this across image updates. Bind mounts work too, but named volumes are cleaner for single-file databases.
Step 2: Deploy Portainer via Docker Compose
Objective
Launch Portainer CE with a simple, maintainable Compose file.
Step-by-Step Instructions
- Create a directory for Portainer:
mkdir -p ~/portainer && cd ~/portainer
- Create
docker-compose.yml:
version: "3.8"
services:
portainer:
image: portainer/portainer-ce:2.25-alpine
container_name: portainer
restart: unless-stopped
security_opt:
- no-new-privileges:true
volumes:
- /etc/localtime:/etc/localtime:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
- portainer_data:/data
ports:
- "9000:9000"
- "8000:8000" # Only needed for Edge Agent setups
volumes:
portainer_data:
- Start the container:
docker compose up -d
- Check that it is running:
docker compose ps
docker compose logs -f
You should see portainer in an Up state.
Security Note: Mounting
/var/run/docker.sockgives Portainer full control over Docker on the host. This is necessary for its functionality but means you should not expose Portainer to the public internet without HTTPS + strong authentication.
Step 3: Initial Configuration and Connecting the Environment
Objective
Complete the first-run wizard and connect Portainer to your local Docker socket.
Step-by-Step Instructions
- Open your browser and navigate to:
http://your-server-ip:9000
- You will see the “Create the first administrator user” screen.
- Username: Choose something memorable (e.g.,
admin) - Password: Use a strong, unique password (16+ characters)
-
Confirm password: Re-enter it
-
Click “Create user”.
-
On the “Environment Wizard” screen, select “Get Started”.
-
Choose “Docker” as the environment type, then “Start Wizard”.
-
Select “Docker environment” and click “Connect”.
Portainer will detect the local Docker socket and import all existing containers, volumes, networks, and images.
Step 4: Exploring the Portainer Interface
Objective
Learn the main sections and where to find critical functions.
Step-by-Step Instructions
Left sidebar navigation:
| Menu Item | Purpose |
|---|---|
| Dashboard | Overview of running/stopped containers, CPU, RAM, and network usage |
| App Templates | One-click installers for common apps (NGINX, MySQL, WordPress, etc.) |
| Stacks | View and edit Docker Compose stacks |
| Containers | Start, stop, kill, pause, resume, inspect, view logs, access console |
| Images | Pull, build, remove, and inspect Docker images |
| Networks | Manage bridge, overlay, and custom networks |
| Volumes | Create, inspect, and delete named volumes |
| Events | Real-time Docker daemon event stream |
| Host | View disk usage, running processes, and system info |
Key actions to try:
- View logs: Click any container → Logs tab. Use the search box to filter.
- Access console: Click any container → Console tab → Choose
/bin/bashor/bin/sh→ Connect. - Inspect a container: Click any container → Inspect tab to see the raw JSON Docker config.
- Edit a running container: You cannot directly edit a running container’s config, but you can Duplicate/Edit to clone it with changes.
Step 5: Deploying a Stack from the Web Editor
Objective
Use Portainer’s built-in editor to deploy a multi-container application without touching the terminal.
Step-by-Step Instructions
- In Portainer, click Stacks → Add stack.
- Name the stack:
whoami-demo - In the Web editor, paste:
version: "3.8"
services:
whoami:
image: traefik/whoami
container_name: whoami-web
ports:
- "8080:80"
restart: unless-stopped
- Click Deploy the stack.
- Navigate to Containers. You will see
whoami-webrunning. - Visit
http://your-server-ip:8080to confirm it responds.
To update a stack: 1. Go to Stacks → whoami-demo → Editor. 2. Make changes (e.g., change the image tag). 3. Click Update the stack → Pull latest images.
Pro Tips
Tip 1: Use Portainer with a Reverse Proxy
Do not expose Portainer on port 9000 directly to the internet. Put it behind NGINX Proxy Manager or Traefik:
# In your reverse proxy stack
services:
nginx-proxy-manager:
image: jc21/nginx-proxy-manager:latest
ports:
- "80:80"
- "443:443"
- "81:81"
# Add a Proxy Host in the NPM UI:
# Domain: portainer.yourdomain.com
# Forward Host: portainer
# Forward Port: 9000
Tip 2: Back Up Portainer Data
The entire Portainer state lives in the portainer_data volume. Back it up with:
docker run --rm -v portainer_data:/data -v $(pwd):/backup alpine \
tar czf /backup/portainer-backup.tar.gz -C /data .
Tip 3: Enable Dark Mode
Go to My account → Theme → Dark. Portainer’s light theme is blinding at 2 AM during a homelab debug session.
Tip 4: Use Git Repositories for Stacks
Instead of editing in the browser, connect Portainer to a Git repo: 1. Stacks → Add stack → Repository 2. Enter your Git URL, branch, and Compose file path 3. Enable Authentication if the repo is private 4. Enable Automatic updates to poll for changes every X minutes
This turns Portainer into a lightweight GitOps controller for your homelab.
Troubleshooting Common Issues
“Cannot connect to the Docker daemon”
- Verify the Docker service is running:
sudo systemctl status docker - Ensure
/var/run/docker.sockexists on the host - If running in LXC, ensure the container is privileged or has
nesting=1andkeyctl=1
Forgotten Admin Password
If you locked yourself out, reset via CLI:
docker stop portainer
docker run --rm -v portainer_data:/data portainer/portainer-ce:2.25-alpine \
--admin-reset-password
# Follow prompts, then restart Portainer
docker start portainer
High Memory Usage
Portainer itself uses ~50–100 MB RAM. If memory spikes, it is likely due to a large number of images or containers. Prune unused images in Images → Prune.
Conclusion
Summary
You now have Portainer CE running as a web UI for your Docker host. You can inspect logs, manage containers, deploy stacks from a browser, and even connect Git repositories for automatic deployments.
Next Steps
- Deploy Nextcloud via Portainer Stack Editor
- Compare Portainer vs Cockpit for full-system management
- Set up NGINX Proxy Manager for clean local domains
- Monitor your containers with Grafana and Prometheus
Affiliate Opportunities
- Mini PCs: Compact Docker hosts (Intel N100, Beelink SER5)
- Monitors: A small touchscreen display mounted near your server rack for quick Portainer checks
- UPS: Keep Portainer accessible during power flickers
Internal Linking Strategy
what-is→/docker-compose-for-beginnersfor readers new to Dockerstack-editor→/nextcloud-docker-composefor a real-world Compose exampleconclusion→/portainer-vs-cockpitto compare container vs system management tools
CTA
What apps are you managing with Portainer? Share your stack in the comments!
Subscribe to the WordForge newsletter for weekly self-hosting guides and Docker tips.