Reproducible computational environments using containers