c - 如何在没有 gcc 编译器的情况下在 docker 中打包和发布一个简单的 c 应用程序?
问题描述
我有一个小型 c 程序应用程序,我想为此构建一个 docker 映像并将其推送到 docker hub 并在任何平台上访问。我想在 50MB 的图像大小内实现这一点。即应该能够打包 c 应用程序并在没有 GCC 编译器的情况下运行它。
拜托,如果有人能提出一种构建 50MB 大小的图像的方法,那将是一个很大的帮助。即没有GCC编译器,它是c程序编译的依赖项。
此外,建议哪个是最适合 c 应用程序的基本映像。
注意:要构建 docker 映像,我使用 windows 作为 docker 的主机操作系统。注意:这是一个基本的 c 程序,用于添加我要打包和运送的两个号码。
我已经尝试为大小为 307MB 的 c 应用程序创建一个 docker 映像。我的目标是在不到 50MB 的时间内为 c 应用程序构建一个 docker 映像
我的码头文件:
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"]
推荐阅读
- scala - 如何在 Akka Actor 中模拟 HTTP 服务
- python - 如何使用 .between 函数将对象分配给列
- python - 列表拒绝追加
- javascript - Firebase Firestorage 上传过程从 0 跳转到 100
- vue.js - VueJS 和 antdesign vue - 错误:找不到模块 'babel-plugin-import' from
- php - phpspreadsheet:如何在单元格和图像之间添加一些边距?
- python - 如何使用 winsock2 库在 C 中发送程序当前工作目录?
- azure - Azure CDN 通常是否应该用于提供图像(静态布局元素除外)?
- javascript - 为使用相同处理程序动态创建的每个组件创建单独的状态
- c++ - 为什么我们不能将 char 指针静态转换为 int 指针?