Как упаковать и отправить простое c-приложение в Docker без компилятора gcc? - PullRequest
0 голосов
/ 27 сентября 2019

У меня есть небольшое c-приложение, я хочу создать для этого образ докера и перенести его в концентратор док-станции и получить доступ на любой платформе.Я хочу достичь этого в пределах 50 МБ от размера изображения.т.е. должен иметь возможность упаковать приложение c и запустить его без компилятора GCC.

Пожалуйста, будет очень полезно, если кто-то может предложить способ создания изображения размером до 50 МБ.т.е. без компилятора GCC, который является зависимостью для компиляции программы c.

Кроме того, предложите, какой образ базы данных лучше всего подходит для приложения c.

ПРИМЕЧАНИЕ. Для создания образа докера, который я используюWindows в качестве хоста ОС для докера.ПРИМЕЧАНИЕ: это базовая программа на c для добавления двух чисел, которые я хочу упаковать и отправить.

Я уже пытался создать образ докера для приложения c размером 307 МБ.Моя цель - создать образ докера для приложения c размером менее 50 МБ

МОЙ dockerfile:

FROM busybox

COPY --from=rakeshchahar/rc-docker:my-image /usr/src/myapp usr/src/app/

WORKDIR /usr/src/app/

CMD ["./myapp"]  

Я рассчитываю создать образ размером 50 МБ или меньше и хочу получить к нему доступлюбая платформа.

Ответы [ 2 ]

1 голос
/ 27 сентября 2019

Вы можете использовать Alpine размером менее 5 МБ. В случае многоэтапной сборки вы можете получить такой же бонус в 5 МБ

FROM alpine as build-env
RUN apk add --no-cache build-base
WORKDIR /app
COPY . .
# Compile the binaries
RUN gcc -o hello helloworld.c
FROM alpine
COPY --from=build-env /app/hello /app/hello
WORKDIR /app
CMD ["/app/hello"] 

helloworld.c или заменитьс вашим собственным

# include <stdio.h>
  int main(){
   printf("Hello World!");
   return 0;
}

Еще один способ скопировать скомпилированный код в ваше изображение, которое также всего за 5MB ,

FROM alpine:latest
RUN mkdir -p /app
COPY hello /app
WORKDIR /app
CMD ["/app/hello"] 
0 голосов
/ 27 сентября 2019

Вы можете использовать многоэтапную сборку.Там вы используете более крупный образ сборки с компилятором gcc и всеми необходимыми инструментами для сборки приложения, а на втором этапе вы используете полученный двоичный файл в облегченном контейнере для выполнения.Это объясняется для .net в документации докера (https://docs.docker.com/engine/examples/dotnetcore/),, но принцип будет таким же.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...