迈向基于 docker 的 C/C++ 应用程序构建

***注意:***基于此文章,我已在 GitHub 上发布 buildock

许多 C/C++ 程序员和项目经理都知道为所有开发者创建可重现构建环境的痛苦:Works for me 是一个常见的梗,并非没有原因。

我的方法是不一定将应用程序本身 docker 化,而是将构建系统 docker 化,将特定编译器版本及其周围的系统以及所有必需的系统级库封装在 Docker 镜像中。

以 C++ 中必做的 Hello World 为例:

main.cpp
// main.cpp
#include <iostream>
using namespace std;

int main() {
    cout << "Hello, World!" << endl;
    return 0;
}

以及对应的 Makefile

Makefile
all:
    g++ -o helloworld main.cpp

我们如何在不安装编译器GNU make的情况下在本地计算机上编译这个简单项目(不允许使用构建服务器作弊)?

实际上这相当简单:

docker-run.sh
docker run --user $(id -u):$(id -g) -v $PWD:/app -it ulikoehler/ubuntu-gcc-make make

分解说明:

这是用于生成 ulikoehler/ubuntu-gcc-make 的完整 Dockerfile

Dockerfile
FROM ubuntu:18.04
RUN apt update && apt -y install build-essential make && rm -rf /var/lib/apt/lists/*
WORKDIR /app
CMD [ "/usr/bin/make" ]

Check out similar posts by category: Build Systems, C/C++, Container, Docker