You will no doubt point me to some script you wrote as a sysadmin. I wrote similar scripts as a sysadmin. They are unusable to anyone outside your immediate team of sysadmins - you can't use my scripts, and I can't use yours. That's because they're ambiguous. They assume that other things are already present on the system, and don't specify how to make sure that's true. There's a README next to them explaining what they require, how to bootstrap a build and so on.
Dockerfiles don't require a readme. They are not ambiguous. That's why they're useful. They also specify where to drop source files in a container, which allows you to get rid of your custom scp + flip-a-symlink ghetto deployment script.