Technical note · Deployment
Docker or native ERPNext installation?
A practical decision framework for choosing between Docker and native Bench deployment in the ERPNext Developer Toolkit.
The short answer
Choose Docker when you want repeatable containers, clearer dependency isolation, and an environment that is easier to reproduce. Choose a native Bench installation when you need direct access to the Frappe development workflow and are prepared to maintain the operating-system dependencies yourself.
Neither method removes the need for backups, HTTPS, security controls, monitoring, updates, and tested recovery.
Native architecture
A native installation places Bench, Python environments, Node tooling, database services, Redis services, workers, and application files directly on the Linux host. This makes the development model transparent and familiar to Frappe developers, but it also means the host carries more dependency state.
Native advantages
- Direct access to Bench commands and application files.
- Familiar workflow for Frappe application development.
- Fewer container abstractions during troubleshooting.
- Straightforward integration with host services.
Native trade-offs
- More operating-system dependencies to coordinate.
- Host upgrades can affect the application stack.
- Reproducing an identical environment requires discipline.
- Isolation between unrelated workloads is weaker.
Docker architecture
A Docker deployment describes the application services as containers connected through networks and persistent volumes. The container image carries much of the dependency state, while the host mainly provides Docker, storage, networking, and security boundaries.
Docker advantages
- Repeatable service definitions.
- Dependency isolation from the host.
- Clearer separation between application services.
- Easier clean-environment testing.
Docker trade-offs
- Operators must understand containers, volumes, networks, and Compose.
- Data durability depends on correct persistent-volume design.
- Changes made only inside a running container can disappear when it is replaced.
- Production customization should be built into an image rather than patched manually.
Decision questions
- Is this primarily an application-development environment or an operations environment?
- Does the team understand Docker storage and networking?
- Will custom applications be built into a durable image?
- Can the environment be restored from documented backups?
- Which deployment model can the actual operator troubleshoot confidently?
The best choice is the one your team can operate, verify, update, and recover—not simply the one with the shortest installation command.