我是Docker新用户。我需要执行以下操作:
我正在Amazon AWS Linux微型实例上运行docker。我做了以下事情:
自定义并构建了一个名为sandbox的Ubuntu映像,其中包含我需要的所有软件包(g ++,valgrind,make等)
在另一个包含我的先决条件文件的目录中,我复制了用户的文件。然后,我从此目录构建一个新的docker映像,该映像使用沙箱基本映像进行构建。我的Docker文件说:
FROM sandbox
COPY . /sandbox
RUN make
然后我从本地环境运行Docker build命令,如下所示:
307 {aws-028}testcpp: docker build --tag=test .
Sending build context to Docker daemon 35.33kB
Step 1/5 : FROM sandbox
---> 42fdf2be6912
Step 2/5 : MAINTAINER AVFILT
---> Running in d5531528333c
Removing intermediate container d5531528333c
---> 561070a04095
Step 3/5 : WORKDIR /sandbox
---> Running in 7d1afb32f3ef
Removing intermediate container 7d1afb32f3ef
---> e416508e5180
Step 4/5 : COPY . /sandbox
---> 8392a378a6a2
Step 5/5 : RUN make
---> Running in bf041f3a5353
g++ -Wall -O0 -std=c++0x *.cpp
valgrind ./a.out # >a.log 2>&1
==22== Memcheck, a memory error detector
==22== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al.
==22== Using Valgrind-3.11.0 and LibVEX; rerun with -h for copyright info
==22== Command: ./a.out
==22==
Success. All tests passed. Congratulations.
==22==
==22== HEAP SUMMARY:
==22== in use at exit: 72,704 bytes in 1 blocks
==22== total heap usage: 3,881 allocs, 3,880 frees, 524,711 bytes allocated
==22==
==22== LEAK SUMMARY:
==22== definitely lost: 0 bytes in 0 blocks
==22== indirectly lost: 0 bytes in 0 blocks
==22== possibly lost: 0 bytes in 0 blocks
==22== still reachable: 72,704 bytes in 1 blocks
==22== suppressed: 0 bytes in 0 blocks
==22== Rerun with --leak-check=full to see details of leaked memory
==22==
==22== For counts of detected and suppressed errors, rerun with: -v
==22== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
Removing intermediate container bf041f3a5353
---> 9cf23028b470
Successfully built 9cf23028b470
Successfully tagged test:latest
我将上述输出捕获到本地文件中,然后使用脚本对其进行处理。
我的问题:这是完成我想要的东西(本质上是make和valgrind的输出)的最好方法吗?
如果我多次重复执行此操作,是否可以假定每次运行都不会留下待清理的悬空数据(最终耗尽磁盘空间)?
非常感谢您,
&
答案 0 :(得分:0)
如果我多次重复执行此操作,是否可以假定每次运行都不会留下待清理的悬空数据(最终耗尽磁盘空间)?
您可以确保每次运行 都会留下待清理的数据:每次docker build
运行都会创建一个新映像,并且这些映像会一直保留直到被明确删除。其中包括完整的valgrind日志文件,以及Makefile
构建和生成的所有文件。
相反,您可能会考虑是否可以直接使用sandbox
图像,并使用docker run -v
选项注入您要构建的代码(而docker run --rm
选项则自动注入退出时清理容器)。