在 Dockerfile 副本中保留子目錄結構
瀏覽人數:349最近更新:
一、概述
在本文中,我們將學習將目錄複製到保留子目錄結構的 Docker 映像中。
2.複製本地目錄到鏡像
讓我們創建以下文件樹:
| Dockerfile
|
\---folder1
+---subfolder1
| file1.txt
|
\---subfolder2
file2.txt
這可以通過運行以下命令來完成:
$ mkdir folder1
$ cd folder1
$ mkdir subfolder1
$ cd subfolder1
$ touch file1.txt
$ cd ..
$ mkdir subfolder2
$ cd subfolder2
$ touch file2.txt
$ cd ../..
我們現在將使用以下命令打開Dockerfile
:
$ touch Dockerfile
然後,讓我們插入以下內容:
FROM ubuntu:latest
COPY folder1/ /workdir/
RUN ls --recursive /workdir/
讓我們逐行理解內容:
- 第一行聲明我們使用最新的 ubuntu 鏡像作為我們的基礎鏡像
- 第二行將
folder1
目錄的內容複製到圖像的workdir
目錄中。如果workdir
還不存在,它將被創建 - 第三行在圖像的外殼中執行
ls
命令,以遞歸方式列出workdir
文件夾的所有子目錄的內容
我們現在可以構建我們的 Docker 鏡像:
$ docker build .
#4 [1/3] FROM docker.io/library/ubuntu:latest
#6 [2/3] COPY folder1/ /workdir/
#7 [3/3] RUN ls --recursive /workdir/
#7 0.324 /workdir/:
#7 0.324 subfolder1
#7 0.324 subfolder2
#7 0.324
#7 0.324 /workdir/subfolder1:
#7 0.324 file1.txt
#7 0.324
#7 0.324 /workdir/subfolder2:
#7 0.324 file2.txt
正如預期的那樣,遞歸打印workdir
的內容突出顯示它包含folder1
的所有子目錄和文件。
3. 將本地目錄合併到鏡像中
現在讓我們稍微更新一下我們的文件樹以匹配以下內容:
| Dockerfile
|
+---folder1
| +---subfolder1
| | file1.txt
| |
| \---subfolder2
| file2.txt
|
\---folder2
file3.txt
為了進行此修改,我們將運行以下命令:
$ mkdir folder2
$ cd folder2
$ touch file3.txt
$ cd ..
我們現在想要將文件folder2
的內容合併到圖像的工作workdir
中。讓我們完成我們的Dockerfile
:
FROM ubuntu:latest
COPY folder1/ /workdir/
RUN ls --recursive /workdir/
COPY folder2/ /workdir/
RUN ls --recursive /workdir/
第二個COPY
指令不會刪除之前添加的文件。讓我們構建我們的圖像來檢查這種行為:
$ docker build .
#4 [1/5] FROM docker.io/library/ubuntu:latest
#6 [2/5] COPY folder1/ /workdir/
#7 [3/5] RUN ls --recursive /workdir/
#8 [4/5] COPY folder2/ /workdir/
#9 [5/5] RUN ls --recursive /workdir/
#9 0.398 /workdir/:
#9 0.398 file3.txt
#9 0.398 subfolder1
#9 0.398 subfolder2
#9 0.398
#9 0.398 /workdir/subfolder1:
#9 0.398 file1.txt
#9 0.398
#9 0.398 /workdir/subfolder2:
#9 0.398 file2.txt
如日誌所示, folder1
和folder2
的所有子目錄確實已復製到workdir
。
作為附加說明,我們選擇此示例是為了演示合併行為。如果我們只想同時將folder1
和folder2
的內容複製到圖像的workdir
目錄,我們將利用**COPY
可以接受多個來源**的事實:
FROM ubuntu:latest
COPY folder1/ folder2/ /workdir/
RUN ls --recursive /workdir/
4。結論
在本教程中,我們了解瞭如何將本地目錄複製到 Docker 映像,同時保留其子目錄結構。
與往常一樣,可以在 GitHub 上找到代碼。
本作品係原創或者翻譯,採用《署名-非商業性使用-禁止演繹4.0國際》許可協議