etc) ◦ External libraries in your OS (libssl, libc etc.) ◦ Libraries at specific versions ( django 2.1) ◦ Source code at specifc commit ( user service on commit 1 of master branch) • Traditionally this is done by some step by step operation (manual installation, bash script, ansible) ◦ Pretty fragile ◦ Difficult to ensure it runs the same on two machines ( development machine is macOS, production is Ubuntu) • Package all this so that its the same every run ( images)