Docker Best Practices: How to Use Caching to Optimize Your Images