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

标签 c docker docker-compose dockerfile

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

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

此外,建议哪个是最适合 C 应用程序的基础镜像。

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

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

我的dockerfile:

FROM busybox

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

WORKDIR /usr/src/app/

CMD ["./myapp"]  

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

最佳答案

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

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"] 

关于c - 如何在没有 gcc 编译器的情况下在 docker 中打包和发布一个简单的 c 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58129302/

相关文章:

docker cp 在运行实例上抛出 "No such container:path"

docker - 初始化Kubernetes集群

ruby-on-rails - Docker无法在Rails捆绑软件上构建安装rake

nginx - Azure Web 应用服务 + Docker Compose + NGINX 反向代理 - 部署中出现 502 错误

c - 在不知道长度的情况下释放指针

c - 在不同函数中分配的 Realloc 指针

mongodb - Informix Docker 容器的创建卡住

laravel - 在Docker容器中运行Laravel应用,但autoload.php文件不存在

c - 当 fd 之前未关闭时解压文件失败

c++ - 在 C 中更改 Windows 目录中的文件顺序