小编shu*_*gui的帖子

Dockerfile 构建从最终映像中删除源代码

我是 Docker 的新手。我想通过使用 make 命令构建一个 C++ 库来构建一个 docker 镜像。我在 Dockerfile 中这样做的方式是

  • 从主机复制源代码
  • 安装所需的包
  • 运行 make
  • 将库 (.so) 复制到图像内的不同文件夹中
  • 删除源代码

Dockerfile 代码写在下面。

我面临的问题是,即使删除了源代码,最终的图像尺寸还是很大。

由于 Dockerfile 的每一行都创建了不同的层,因此有一种方法可以使用 curl 或 wget 下载源代码,然后删除同一层中的源代码。但我不喜欢这个解决方案。

FROM alpine

RUN apk update && apk add <required_packages>

COPY source_code /tmp/source_code

RUN make -C /tmp/source_code && \
        mkdir /libraries/
        cp /tmp/lib/* /libraries/
        rm -rf /tmp/*
Run Code Online (Sandbox Code Playgroud)

我只想最小化最终图像的大小。这是我这样做的正确方法还是有更好的方法?请帮忙。

makefile docker dockerfile alpine-linux

5
推荐指数
2
解决办法
2736
查看次数

C++函数什么时候删除返回值?

我有以下 C++ 代码。

string getName()
{
    return "C++";
}

void printName(const char* name)
{
    cout << name << endl;
}

int main()
{
    printName(getName().c_str());
}
Run Code Online (Sandbox Code Playgroud)

该函数getName返回一个string. 我将函数c_str的指针传递给函数。我想知道在调用函数之前返回的内容是否会被删除。如果不是那么什么时候删除返回值。stringprintNamestringprintName()

c++ string temporary return-value lifetime

2
推荐指数
1
解决办法
1055
查看次数