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