There are several reasons why the database is not suitable for docker and containerization:
1. Data is not safe
Even if you want to put Docker data on the host To store, it still cannot guarantee that data will not be lost. Docker volumes are designed around the Union FS image layer to provide persistent storage, but it still lacks guarantees.
With the current storage driver, Docker is still at risk of being unreliable. If the container crashes and the database is not shut down properly, data may be corrupted.
2. Environmental requirements for running the database
It is common to see DBMS containers and other services running on the same host. However, the hardware requirements for these services are very different.
Databases (especially relational databases) have higher IO requirements. Typically database engines use dedicated environments to avoid contention for concurrent resources. If you put your database in a container, you will waste your project's resources. Because you need to configure a lot of additional resources for this instance. In the public cloud, when you need 34G of memory, the instance you start must have 64G of memory. In practice, these resources are not fully used.
How to deal with it? You can design in layers and use fixed resources to launch multiple instances at different tiers. Scaling horizontally is always better than scaling vertically.
3. Network issues
To understand the Docker network, you must have an in-depth understanding of network virtualization. You must also be prepared to deal with the unexpected. You may need to perform bug fixes without support or additional tools.
4. State
It’s cool to package stateless services in Docker, which can orchestrate containers and solve single points of failure. But what about the database? By placing the database in the same environment, it will be stateful and make the scope for system failure greater. The next time your application instance or application crashes, it may affect the database.
5. Additional isolation is detrimental to the database
In fact, I mentioned this in the second and third reasons. But I list this as a separate reason because I want to emphasize this fact again. The more isolation levels we have, the more resource overhead we get. Easily scaling horizontally allows us to gain more benefits than a dedicated environment. However, horizontal scaling in Docker can only be used for stateless computing services, not databases.
We don’t see any isolation functionality for the database, so why should we put it in a container?
Recommended tutorial: docker tutorial
The above is the detailed content of Reasons why the database is not suitable for docker and containerization. For more information, please follow other related articles on the PHP Chinese website!