理解 docker :是 docker build -t imgname 。动态的?

understanding docker : is the docker build -t imgname . dynamic?

我想确保我理解正确docker:当我从当前目录构建图像时运行ning

docker build -t imgfile .

镜像构建完成后修改目录下的文件内容会发生什么?根据我的尝试,它似乎也动态地改变了 docker 图像的内容。 我认为 docker 图像就像一个 zip 文件,只能使用 docker 命令或登录图像和 运行ning 命令进行更改。

docker文件是:

FROM lambci/lambda:build-python3.8
WORKDIR /var/task
EXPOSE 8000
RUN echo 'export PS1="\[\e[36m\]zappashell>\[\e[m\] "' >> /root/.bashrc
CMD ["bash"]

而 docker 运行 命令是:

docker run -ti -p 8000:8000 -e AWS_PROFILE=zappa -v "$(pwd):/var/task" -v ~/.aws/:/root/.aws --rm zappa-docker-image

谢谢

最佳,

您的 docker run 命令根本没有真正 运行ning 您的图像。 docker run -v $(pwd):/var/task 语法用 bind mount 覆盖图像中 /var/task 中的内容到主机上的当前目录。因此,当您在主机上编辑文件时,容器具有相同的主机目录(而不是图像中的内容),并且您也会在容器内看到更改。

你说得对,图像是不可变的。除了通常不会使用的 .bashrc 文件之外,您显示的图像实际上不包含任何内容。您可以尝试 运行 在没有 -v 选项的情况下查看图像:

docker run --rm zappa-docker-image ls -al
# just shows `.` and `..` directories

我建议确保您 COPY 将您的应用程序放入图像中,将其 CMD 设置为实际 运行 应用程序,并删除 -v 选项覆盖其主目录。如果您的目标是 运行 针对具有主机支持数据(例如您的 AWS 凭证)的主机文件托管代码,那么在您的应用程序和它使用的每个文件之间引入 Docker 并不会真正让您受益匪浅。