如何在没有 gcc 编译器的情况下在 docker 中打包和发布一个简单的 c 应用程序?

Rak*_*har 3 c docker dockerfile docker-compose

我有一个小型 C 程序应用程序,我想为其构建一个 docker 映像并将其推送到 docker hub 并在任何平台上访问。我想在 50MB 的图像大小内实现这一点。ie 应该能够打包 c 应用程序并在没有 GCC 编译器的情况下运行它。

如果有人能建议一种构建 50MB 大小以内的镜像的方法,那将会是一个很大的帮助。即没有GCC编译器,它是c程序编译的依赖项。

另外,建议哪个是最适合 c 应用程序的基础映像。

注意:为了构建 docker 映像,我使用 Windows 作为 docker 的主机操作系统。注意:这是一个基本的 C 程序,用于添加我想要打包和运输的两个数字。

我已经尝试为 c 应用程序创建一个大小为 307MB 的 docker 映像。我的目标是为 C 应用程序构建一个小于 50MB 的 docker 镜像

我的泊坞窗文件:

FROM busybox

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

WORKDIR /usr/src/app/

CMD ["./myapp"]  
Run Code Online (Sandbox Code Playgroud)

我希望构建一个大小为 50MB 或更小的映像,并希望在任何平台上访问它。

Adi*_*iii 8

您可以使用小于5MB的Alpine,在多阶段构建的情况下,您可以获得同样5MB的奖励

第一阶段:编译源代码以生成可执行二进制文件

第二阶段:运行结果。

# use alpine as base image
FROM alpine as build-env
# install build-base meta package inside build-env container
RUN apk add --no-cache build-base
# change directory to /app
WORKDIR /app
# copy all files from current directory inside the build-env container
COPY . .
# Compile the source code and generate hello binary executable file
RUN gcc -o hello helloworld.c
# use another container to run the program
FROM alpine
# copy binary executable to new container
COPY --from=build-env /app/hello /app/hello
WORKDIR /app
# at last run the program
CMD ["/app/hello"] 
Run Code Online (Sandbox Code Playgroud)

helloworld.c 或替换为您自己的

#include <stdio.h>

int main(){
   printf("Hello World!\n");
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

另一种将编译后的代码复制到图像的方法,大小也只有5MB

FROM alpine:latest
RUN mkdir -p /app
COPY hello /app
WORKDIR /app
CMD ["/app/hello"] 
Run Code Online (Sandbox Code Playgroud)