Édo*_*pez 36 shell ignore node-modules docker
阅读完.dockerignore文档后,我想知道是否有办法测试它?
**/node_modules/
Run Code Online (Sandbox Code Playgroud)
如何检查我的dockerfile忽略正确的文件和目录?
BMi*_*tch 58
为了扩展VonC的建议,这里有一个示例/build-context和一组构建/运行命令,您可以使用它们创建一个包含当前文件夹构建上下文的容器(命名.dockerignore为避免与您的项目冲突/build-context):
docker image build -t build-context -f - . <<EOF
FROM busybox
COPY . /build-context
WORKDIR /build-context
CMD find .
EOF
Run Code Online (Sandbox Code Playgroud)
创建后,在命令行中执行以下命令:
# run the default find command
docker container run --rm build-context
# or inspect it from a shell using
docker container run --rm -it build-context /bin/sh
Run Code Online (Sandbox Code Playgroud)
将上述内容复制/粘贴到提示时,该.dockerignore命令将输出复制到Docker主机的/build-context文件未被文件忽略的文件.
Sek*_*nre 46
其他答案没有考虑的一件事是,当您想要做的只是找出需要排除哪些文件以减小图像大小时,这可能会复制许多 GB 的数据并且速度非常慢。
因此,这是在不实际复制数据的情况下测试的方法.dockerignore:
$ rsync -avn . /dev/shm --exclude-from .dockerignore
Run Code Online (Sandbox Code Playgroud)
这样做的目的是尝试将当前目录与内存中的空文件夹/dev/shm详细同步并进行空运行(实际上不复制任何内容)该选项以与和--exclude-from相同的格式读取全局模式.gitignore.dockerignore
您最终将得到复制的文件列表以及最后包含总大小的摘要:
file.bogus
tests/
tests/conftest.py
tests/test_model.py
sent 1,954 bytes received 207 bytes 4,322.00 bytes/sec
total size is 209,916,337 speedup is 97,138.52 (DRY RUN)
Run Code Online (Sandbox Code Playgroud)
将其添加到.dockerignore:
*.bogus
Run Code Online (Sandbox Code Playgroud)
并再次测试:
tests/
tests/conftest.py
tests/test_model.py
sent 1,925 bytes received 204 bytes 4,258.00 bytes/sec
total size is 201,145 speedup is 94.48 (DRY RUN)
Run Code Online (Sandbox Code Playgroud)
这非常快并且不会填满您的磁盘。
编辑:我发现了一个区别。对于 rsync,该模式*.bogus匹配具有该名称的所有文件,无论目录如何。.dockerignore但仅匹配*.bogus当前目录。要获得相同的行为,您需要在模式前添加路径 glob 字符作为前缀,**/*.bogus这仍然适用于 rsync。
Luc*_*cas 24
To expand on BMitch's answer (which implements VonC's answer), you can do it with one simple command:
# no cache to ensure output
# progress plain in case you are using buildkit
docker build --no-cache --progress plain --file - . <<EOF
FROM busybox
COPY . /build-context
WORKDIR /build-context
RUN find .
EOF
Run Code Online (Sandbox Code Playgroud)
Switching from CMD to RUN means you don't have to ever run the container as the build will output the result of the find ..
J.M*_*ney 16
要获得构建上下文的详细分析,可以使用pwaller/docker-show-context.
$ go get -v -u github.com/pwaller/docker-show-context
$ cd ~/path/to/project/using/docker
$ docker-show-context
Run Code Online (Sandbox Code Playgroud)
它输出有关构建的统计信息,例如文件大小和上载时间.
要扩展Lucas 的答案(它扩展了BMitch的答案(实现了VonC的答案)),如果您使用的是 buildx,您还需要通过添加来设置进度输出的类型--progress plain,当然不要忘记--no-cache:
docker build --no-cache --progress plain -f - . <<EOF
FROM busybox
COPY . /build_context
WORKDIR /build_context
RUN find .
EOF
Run Code Online (Sandbox Code Playgroud)
小智 5
为了扩展 Lucas 的答案(实现了 BMitch 和 VonC 的答案),您可以通过以下方式获得更容易理解的树结构:
$ docker build --no-cache --progress plain --file - . <<EOF
FROM debian
RUN apt update && apt install tree -y
COPY . /build-context
RUN tree /build-context
EOF
Run Code Online (Sandbox Code Playgroud)
其输出:
#8 0.342 /build-context
#8 0.342 |-- dirA
#8 0.342 | |-- a
#8 0.342 | |-- b
#8 0.342 | | `-- lib
#8 0.342 | | |-- common
#8 0.342 | | | |-- __init__.py
#8 0.342 | | | |-- other.py
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7398 次 |
| 最近记录: |