Если я получаю это правильно, вы хотите создать отдельный двоичный файл, который не может быть выполнен, даже если образ докера не имеет каких-либо зависимостей, тогда вам нужно использовать статическую опцию во время сборки - я неэксперт в этом - возможно, как описано в следующем ответе Компиляция статического исполняемого файла с помощью CMake .
Далее вы можете использовать многоэтапные сборки вDocker, который позволит вам иметь окончательный минимальный образ с вашим исполняемым файлом только без каких-либо зависимостей сборки, только необходимые пакеты для вашей среды выполнения.У меня есть пример не с make
, он был создан с использованием g++
, но с использованием аналогичной концепции, как показано ниже:
FROM gcc:5 as builder
COPY ./hello_world_example.cc /hello_world_example.cc
RUN g++ -o hello_world_binary -static hello_world_example.cc && chmod +x hello_world_binary
FROM debian:jessie
COPY --from=builder /hello_world_binary /hello_world_binary
CMD ["/hello_world_binary"]
И конечный результат при запуске контейнера:
$ docker run --rm -it helloworldimage:latest
Hello from Dockerized image