Docker中忽略文件的实现
作者:极客
简介
在这篇文章中,我们将学习docker中的忽略文件。如何创建一个忽略文件,以及如何用各种方法将文件和文件夹添加到忽略文件中。所有先决条件的知识都以逐步的方式提到。在不了解代码行业对ignore文件的要求的情况下,不要直接跳到实现。
什么是被忽略的文件
忽略在不同系统中创建的文件,比如在Git仓库和Dockerifle中。这些文件有助于排除一些文件和目录在输出中被使用或复制。dockerfile的输出是图像,而git的输出可能是提交。DevOps中最常用的一些忽略文件的例子是 “gitignore “和 “dockerignore”。
要忽略的文件类型
主要任务是忽视事物。这些东西可以是不同类型的。比如它可以是python中的程序文件,也可以是ReactJS应用目录中的子目录。所有这些文件都在下面的列表中提到。
- Directory
- 文件 – 文本或程序文件
- 子目录
- .dockerignore本身
忽略这些文件的必要性是因为我们在最终产品中不再需要这些文件。这些文件只需要在主机上。
方法
在本节中,我们将学习如何通过将不同类型的文件添加到dockerignore文件中来排除它们。
所有要在dockerignore中出现的文件都应该提到docker context目录。Docker上下文是指所有需要添加到镜像中的有用文件所在的目录路径。大多数情况下,我们在构建镜像时使用.(点)作为docker context。
创建一个”.dockerignore “文件
.dockerignore “应该在你的Dockerfile存在的地方创建,否则它将无法工作。使用下面的命令来创建和排除各种类型的文件。
$touch .dockerignore
我们已经创建了一个目录结构,用于解释所有这些方法。
$tree -la
输出
.
├── dir1
├── dir2
├── dir3
│ ├── dir3_1
│ │ └── file_dir3_1.txt
│ ├── dir3_2
│ ├── file1_dir3.txt
│ └── file2_dir3.py
├── Dockerfile
├── .dockerignore
├── file1.txt
├── file2.sh
├── file3.py
├── no_ex1
└── No_ex25 directories, 10 files
打开ignore文件,从上面的目录结构中添加各种文件。
$nano .dockerignore
有一些规则可以在docker ignore文件中添加不同种类的文件、目录和注释。
在dockerignore文件中添加一个注释
在开始注释的时候使用#,会将该行视为一个注释。
#This is a comment in the .dockerignore file
忽略docker上下文或根目录级别的目录
dir1 dir2
这将忽略存在于docker上下文根层的目录(dir1 & dir2)。参考一下上面的目录结构。
忽略所有的文件和目录
排除所有名称中带有 “file “的文件和目录。这些文件将只来自根目录。
file*
忽略docker上下文中最多一级的子目录
忽略根目录下任何子目录中的文件以及目录。
#using */ to go one level down */file1_dir3.txt
忽略一个子目录,直到docker上下文的两层以下。
这与上述方法非常相似。
#using */*/ to go two level down */*/file_dir3_1.txt
要重新包括一个文件
有一些特殊情况,当我们想包括一个先前被排除在外的特定文件。
*.txt !myfile.txt
假设你正在创建一个Python容器镜像。根目录包含了所有来自不同贡献者的python程序,所以你不能删除它们,你只能使用这个根目录。你可以执行下面的例子来排除所有的Python程序,然后重新包含你的Python程序文件。
第1步 – 假设根目录中充满了pythons文件
Prg1.py. Prg2.py, Prg3.py …………..and myprogram.py
第2步 − 创建一个.dockerignore文件,如下所示
#ignore all the python program files *.py #reinclude your python program file !myprogram.py
这个过程会更快,而且不需要将不需要的东西COPY/ADD到docker容器镜像中。
实现
这里我们要创建一个完整的环境,使用Dockerfile、.dockerignore,并使用这些文件构建一个容器镜像。使用的目录结构与方法部分中提到的相同。
. ├── dir1 ├── dir2 ├── dir3 │ ├── dir3_1 │ │ └── file_dir3_1.txt │ ├── dir3_2 │ ├── file1_dir3.txt │ └── file2_dir3.py ├── Dockerfile ├── .dockerignore ├── file1.txt ├── file2.sh ├── file3.py ├── no_ex1 └── No_ex2
第1步 − 创建一个Docker文件并添加代码。
$nano Dockerfile
输入
#for the base image we are using busybox
FROM busybox:latest
#set a working directory
WORKDIR /my_context_directory
#copy everything from the build context to the working directory of the
#image
COPY . .
# list all the copied items
RUN ls -l
保存该文件。
第2步 − 创建一个.dockerignore文件
$nano .dockerignore
输入
#exclude the file_dir3_1.txt
file_dir3_1.txt
#exclude file from the root
file3.py
#exclude a directory one level down
*/dir3_2
保存该文件。
第3步 − 构建镜像并检查构建输出
$docker build -t test_ignore .
输出
Sending build context to Docker daemon 9.728kB
Step 1/4 : FROM busybox:latest
---> 9d5226e6ce3f
Step 2/4 : WORKDIR /my_context_directory
---> Running in 49d65f57621d
Removing intermediate container 49d65f57621d
---> 386c30f8f511
Step 3/4 : COPY . .
---> 75f65dace2be
Step 4/4 : RUN ls -l
---> Running in bd8bbec7d3f9
total 12
-rw-rw-r-- 1 root root 0 Dec 9 03:47 No_ex2
drwxrwxr-x 2 root root 4096 Dec 9 03:47 dir1
drwxrwxr-x 2 root root 4096 Dec 9 03:47 dir2
drwxrwxr-x 3 root root 4096 Dec 9 03:48 dir3
-rw-rw-r-- 1 root root 0 Dec 9 03:46 file1.txt
-rw-rw-r-- 1 root root 0 Dec 9 03:46 file2.sh
-rw-rw-r-- 1 root root 0 Dec 9 03:47 no_ex1
Removing intermediate container bd8bbec7d3f9
---> 084bb699260f
Successfully built 084bb699260f
Successfully tagged test_ignore:latest
输出显示,除了dockerignore文件中的文件外,所有的文件都被复制到了容器镜像中。
总结
在这篇文章中,我们对”.dockerignore “文件进行了360度的全面探讨。排除、包括,以及这个文件的重要性都被清楚地说明了。为了亲身体验这个主题,我们创建了不同的环境,并通过上述方法来实现。
到此这篇关于Docker中忽略文件的实现的文章就介绍到这了,更多相关Docker 忽略文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!