使用docker编译部署开源c/c++程序(一)

用docker部署c/c++程序,首先需要一个Linux的基础镜像,可以是ubuntu、centos等。但最近docker都流行用alpine作为基础镜像,因为alpine最大的优点是体积小。先下载一个alpine的镜像玩玩
docker pull alpine

查看一下镜像的大小
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
alpine latest 3f53bb00af94 2 weeks ago 4.41MB

只有4M多,作为基础镜像确实很理想。相比之下,debian要去到80几M,ubuntu 180几M,这么大的体积也不利于部署。

下载完镜像,可以把这个迷你的linux启动起来,进去玩玩
docker run -it alpine /bin/sh

进去玩完以后,按exit命令退出来。然后用docker ps -a查看所有容器,会看到
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
75c17acca2e9 alpine "/bin/sh" 43 seconds ago Exited (0) 13 seconds ago stoic_wozniak

随着我们退出,容器的状态也变成Exited。如果希望这个容器继续运行,可以输入
docker start container_id

其中的container_id是docker ps -a中查看到的。要进入这个容器,输入
docker exec -it container_id /bin/sh

回到正题,要在这个alpine容器中编译c/c++程序。先在容器里面编写一个最简单的hello world

#include <stdio.h>
int main()
{
  printf("Hello world\n");
}

PS:这个alpine之中各种命令都是使用busybox的,vi之类的用起来会有点怪

c程序有了,我们还缺gcc编译器。alpine的包管理命令是apk,安装gcc
apk add gcc

不过alpine默认的安装源慢得要命,装个gcc都要好久。可以手动修改repositories,改为国内源
echo "https://mirror.tuna.tsinghua.edu.cn/alpine/v3.8/main" > /etc/apk/repositories
echo "https://mirror.tuna.tsinghua.edu.cn/alpine/v3.8/community" >> /etc/apk/repositories

不过一编译就报错了,很无语

1.c:1:19: fatal error: stdio.h: No such file or directory

在alpine之中,libc是要单独安装的
apk add libc-dev

安装完libc后,gcc终于可以顺利编译,hello world也顺利出现了

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容