一、概述
在本文中,我们将学习将目录复制到保留子目录结构的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 映像,同时保留其子目录结构。
0 评论