拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 在Dockerfile 副本中保留子目录结构

在Dockerfile 副本中保留子目录结构

白鹭 - 2022-10-03 2433 0 2

一、概述

在本文中,我们将学习将目录复制到保留子目录结构的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

如日志所示,folder1folder2的所有子目录确实已复制到workdir

作为附加说明,我们选择此示例是为了演示合并行为。如果我们只想同时将folder1folder2的内容复制到图像的workdir目录,我们将利用**COPY可以接受多个来源**的事实:

FROM ubuntu:latest
 COPY folder1/ folder2/ /workdir/
 RUN ls --recursive /workdir/

4。结论

在本教程中,我们了解了如何将本地目录复制到Docker 映像,同时保留其子目录结构。


标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *