Это началось как комментарий, но стало слишком длинным. Скорее всего, он не будет исчерпывающим ответом, но может содержать полезную информацию независимо от того.
Часто Dockerfile образует часть более крупного процесса сборки, при этом выходные файлы с предыдущих этапов копируются в окончательный образ. Если вы хотите разместить Dockerfile вместо окончательного образа, вам также потребуется разместить (обычно временные) обработанные файлы или весь исходный сценарий репо и сборки.
Последнее часто делается для проектов с открытым исходным кодом, но для удобства также часто доступны предварительно созданные образы Docker.
Одним из простых решений этой проблемы является запись всего процесса сборки в Dockerfile с использованием многоступенчатых сборок (введено в Docker CE 17.05 & EE 17.06). Но даже с полным процессом сборки, описанным независимо от платформы в одном Dockerfile, полный исходный репозиторий все равно должен быть предоставлен.
TL, DR: Думайте об изображении Docker как о обычном двоичном файле. Это удобно для загрузки и установки без возни с исходными файлами. Вы могли бы загрузить исходный код приложения C и собрать его, используя предоставленный Makefile, но зачем вам, если бинарный файл был доступен для вашей системы?