I liked "Algorithms Unlocked" by Cormen (https://mitpress.mit.edu/books/algorithms-unlocked). It's the same author that co-wrote "Introduction to Algorithms" (or CLRS) that's referenced in a few other comments, but this one focuses on the what and why of algorithms and pulls samples from a few areas of interest.
It's not too long (~200 pages), so might be worth checking out before diving into one of the more comprehensive textbooks.
If you're interested in 3D programming, I found "3D Math Primer for Graphics and Game Development" to be the most accessible for the math fundamentals. I just discovered it's now available freely online as well: https://gamemath.com/.
When I first started using scikit-learn, I was overwhelmed with the number of classes and options available. I just chose some basic classifiers I was familiar with and stuck with most of the default settings. The book explains many of the other models and when they would be useful, but also spends a lot of time exploring the datasets (using pandas), preprocessing data and building data pipelines, finding the best hyperparameters, best ways to evaluate a models performance, etc. The library feels less like a big bag of algorithms now and more like a cohesive data pipeline.
An alternative to Docker is Packer (https://packer.io/). It will create and register an AMI for EC2 so you don't have to run any configuration scripts once it is deployed. It's made by the same company that makes Vagrant and uses a similar setup. If you run Ansible to provision the Vagrant VM, I believe you can use the same script to provision the Packer image.
It's not too long (~200 pages), so might be worth checking out before diving into one of the more comprehensive textbooks.
If you're interested in 3D programming, I found "3D Math Primer for Graphics and Game Development" to be the most accessible for the math fundamentals. I just discovered it's now available freely online as well: https://gamemath.com/.