We have now encapsulated our application’s component services into portable, self-contained Docker images, which can be run as containers. In doing so, we have improved our deployment process by making it:
- Portable: The Docker images can be distributed just like any other file. They can also be run in any environment.
- Predictable/Consistent: The image is self-contained and pre-built, which means it will run in the same way wherever it is deployed.
- Automated: All instructions are specified inside a Dockerfile, meaning our computer can run them like code.
However, despite containerizing our application, we are still manually running the docker run commands. Furthermore, we are running single instances of these containers on a single server. If the server fails, our application will go down. Moreover, if we have to make an update to our application, there'll...