Docker中忽略文件的實現(xiàn)
簡介
在這篇文章中,我們將學(xué)習(xí)docker中的忽略文件。如何創(chuàng)建一個忽略文件,以及如何用各種方法將文件和文件夾添加到忽略文件中。所有先決條件的知識都以逐步的方式提到。在不了解代碼行業(yè)對ignore文件的要求的情況下,不要直接跳到實現(xiàn)。
什么是被忽略的文件
忽略在不同系統(tǒng)中創(chuàng)建的文件,比如在Git倉庫和Dockerifle中。這些文件有助于排除一些文件和目錄在輸出中被使用或復(fù)制。dockerfile的輸出是圖像,而git的輸出可能是提交。DevOps中最常用的一些忽略文件的例子是 “gitignore “和 “dockerignore”。
要忽略的文件類型
主要任務(wù)是忽視事物。這些東西可以是不同類型的。比如它可以是python中的程序文件,也可以是ReactJS應(yīng)用目錄中的子目錄。所有這些文件都在下面的列表中提到。
- Directory
- 文件 – 文本或程序文件
- 子目錄
- .dockerignore本身
忽略這些文件的必要性是因為我們在最終產(chǎn)品中不再需要這些文件。這些文件只需要在主機上。
方法
在本節(jié)中,我們將學(xué)習(xí)如何通過將不同類型的文件添加到dockerignore文件中來排除它們。
所有要在dockerignore中出現(xiàn)的文件都應(yīng)該提到docker context目錄。Docker上下文是指所有需要添加到鏡像中的有用文件所在的目錄路徑。大多數(shù)情況下,我們在構(gòu)建鏡像時使用.(點)作為docker context。
創(chuàng)建一個”.dockerignore “文件
.dockerignore “應(yīng)該在你的Dockerfile存在的地方創(chuàng)建,否則它將無法工作。使用下面的命令來創(chuàng)建和排除各種類型的文件。
$touch .dockerignore
我們已經(jīng)創(chuàng)建了一個目錄結(jié)構(gòu),用于解釋所有這些方法。
$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文件,從上面的目錄結(jié)構(gòu)中添加各種文件。
$nano .dockerignore
有一些規(guī)則可以在docker ignore文件中添加不同種類的文件、目錄和注釋。
在dockerignore文件中添加一個注釋
在開始注釋的時候使用#,會將該行視為一個注釋。
#This is a comment in the .dockerignore file
忽略docker上下文或根目錄級別的目錄
dir1 dir2
這將忽略存在于docker上下文根層的目錄(dir1 & dir2)。參考一下上面的目錄結(jié)構(gòu)。
忽略所有的文件和目錄
排除所有名稱中帶有 “file “的文件和目錄。這些文件將只來自根目錄。
file*
忽略docker上下文中最多一級的子目錄
忽略根目錄下任何子目錄中的文件以及目錄。
#using */ to go one level down */file1_dir3.txt
忽略一個子目錄,直到docker上下文的兩層以下。
這與上述方法非常相似。
#using */*/ to go two level down */*/file_dir3_1.txt
要重新包括一個文件
有一些特殊情況,當(dāng)我們想包括一個先前被排除在外的特定文件。
*.txt !myfile.txt
假設(shè)你正在創(chuàng)建一個Python容器鏡像。根目錄包含了所有來自不同貢獻(xiàn)者的python程序,所以你不能刪除它們,你只能使用這個根目錄。你可以執(zhí)行下面的例子來排除所有的Python程序,然后重新包含你的Python程序文件。
第1步 – 假設(shè)根目錄中充滿了pythons文件
Prg1.py. Prg2.py, Prg3.py …………..and myprogram.py
第2步 − 創(chuàng)建一個.dockerignore文件,如下所示
#ignore all the python program files *.py #reinclude your python program file !myprogram.py
這個過程會更快,而且不需要將不需要的東西COPY/ADD到docker容器鏡像中。
實現(xiàn)
這里我們要創(chuàng)建一個完整的環(huán)境,使用Dockerfile、.dockerignore,并使用這些文件構(gòu)建一個容器鏡像。使用的目錄結(jié)構(gòu)與方法部分中提到的相同。
. ├── 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步 − 創(chuàng)建一個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步 − 創(chuàng)建一個.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步 − 構(gòu)建鏡像并檢查構(gòu)建輸出
$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文件中的文件外,所有的文件都被復(fù)制到了容器鏡像中。
總結(jié)
在這篇文章中,我們對”.dockerignore “文件進(jìn)行了360度的全面探討。排除、包括,以及這個文件的重要性都被清楚地說明了。為了親身體驗這個主題,我們創(chuàng)建了不同的環(huán)境,并通過上述方法來實現(xiàn)。
到此這篇關(guān)于Docker中忽略文件的實現(xiàn)的文章就介紹到這了,更多相關(guān)Docker 忽略文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Linux系統(tǒng)Docker 部署 ASP.NET Core應(yīng)用的流程分析
這篇文章主要介紹了Linux系統(tǒng)Docker 部署 ASP.NET Core應(yīng)用的流程分析,在操作過程中小編遇到很多問題,下面把我的經(jīng)驗及處理方法分享到腳本之家平臺,需要的朋友參考下吧2021-06-06
使用Docker進(jìn)行node開發(fā)時實現(xiàn)熱加載功能
這篇文章主要介紹了使用docker進(jìn)行vue、react或者node開發(fā)時實現(xiàn)熱加載功能,即宿主機文件修改之后實時刷新或者實時重啟服務(wù),文中通過代碼示例介紹的非常詳細(xì),具有一定的參考價值,需要的朋友可以參考下2024-09-09
深入理解 Docker 數(shù)據(jù)卷(Data Volume)
本文詳細(xì)介紹了Docker數(shù)據(jù)卷(DataVolume)的概念、作用、使用命令、掛載方式以及最佳實踐,數(shù)據(jù)卷是Docker中實現(xiàn)數(shù)據(jù)持久化和共享的關(guān)鍵機制之一,通過本文的學(xué)習(xí),讀者可以更好地掌握數(shù)據(jù)卷的使用方法,從而在容器化應(yīng)用中進(jìn)行有效的數(shù)據(jù)管理2024-11-11
docker部署微信小程序自動構(gòu)建發(fā)布和更新的詳細(xì)步驟
通過 Jenkins 和 Docker 部署微信小程序,并實現(xiàn)自動構(gòu)建、發(fā)布和版本更新,主要涉及到幾個步驟,下面給大家分享docker部署微信小程序自動構(gòu)建發(fā)布和更新的詳細(xì)步驟,感興趣的朋友一起看看吧2024-12-12

