鲸鱼、集装箱和海洋——码头工人尼克·帕伦查尔的故事
AWS AI 直播!
Nick曾是一名演员/导演,后来转行成为一名程序员,从事软件工程师工作已有4年。他对DevOps工具和自动化特别感兴趣,曾在大公司和小型创业公司工作过,并在业余时间维护开源项目和教授编程。
I. 引言 - Docker 的定义
A. 想象一下,一位新工程师问你:“什么是 Docker?”你会如何回答?
B. 对于任何技术栈的工程师来说,Docker 都非常强大,它可以简化开发设置,并确保更高的部署可靠性。C
. 但是,目前并没有太多清晰的资源来帮助理解 Docker 生态系统及其对运行、构建和调试的意义。D
. 今天,我们将探讨 Docker 构建和运行容器的微妙方式。E
. Docker 不仅仅是一个容器。它还有一个 Docker 守护进程(相当于“鲸鱼”),负责组装容器,并且它运行在你的计算机(相当于“海洋”)中,也就是它必须与之协同工作的环境。让我们一起来探索这些方面之间的联系。
二、从计算机到 Docker 守护进程。
A. (图示:一个“盒子”(容器)位于“鲸鱼”(Docker守护进程)之上,而“鲸鱼”则漂浮在“海洋”(计算机(文件系统))之上。)
B. !重要区别!Docker守护进程看不到你的文件系统。它只能看到你(开发者)为其设置的上下文(通常是“.”)。
C. 这个点很小但很重要。它是Unix中表示当前目录的常用字符。运行docker build命令时,你通常使用它来将上下文设置为运行命令行界面(CLI)的位置。D
. 指定一个目录(“.”)会将目录中的所有内容复制到Docker守护进程(“鲸鱼”)。它只能看到你文件系统的一个子集。i
. (树状布局的简化文件系统图像,红色部分对应于终端命令。该部分被复制到“鲸鱼”中。结果是“鲸鱼”拥有一个更小的文件系统,并且它的“根”是“。”)
ii. 从这里来看几个例子:
a. Dockerfile 中的“COPY .. /someplace”不起作用。虽然计算机的工作目录有一个父目录,但守护进程已经位于顶层目录,其上层的目录并没有被复制到守护进程。重点是:无论你设置构建上下文到哪里,在构建时都不能超过它所在的层级。b
. Dockerfile 中包含 `docker build ./project-with-tons-of-node_modules`,表明如果上下文过大,构建速度会显著降低(提醒大家,在开始构建过程之前,所有内容都需要先复制到守护进程)。E
. dockerignore 概述
i.(可视化,演示与上述相同的内容,但根据 .dockerignore 文件指定,一些目录已被“编辑”,从而为 Docker 守护进程的上下文保留一个更精简的文件系统)
ii. 除了大小之外,它还会是将 node_modules 或生成的构建文件复制到容器中是一个错误。
三、您的计算机可能运行着与容器中不同的进程版本,这会导致构建不一致。接下来我们将讨论如何使用 RUN 命令来更好地处理这个问题。
三、从 Docker 守护进程到容器。
A. 章节标题:您已将内容发送到 Docker 守护进程,但其最终去向仍未可知。B
. 容器的独立可视化图,这次盖子打开,一个磁盘悬浮在上方(“镜像”)。C
. 重点说明在构建时(通过 Dockerfile),这是向容器添加内容使其运行的唯一时机(脚注:此处为简化说明)
。D. 了解一些 Dockerfile 命令及其在 Docker 上下文和容器之间的关系。i
. WORKDIR - 设置容器中的工作目录(就像计算机 shell 中的默认工作目录一样)
。ii. COPY - 同样,这是从 Docker 守护进程复制文件并将其移动到容器
。a. 需要注意的是,此时无法访问您计算机上的文件。iii
. RUN - 在容器内执行命令。a
.重要提示:上下文并非关键所在(运行命令“实际上”不会在您的计算机上运行)
。iv. ENTRYPOINT/CMD - 这些命令默认情况下会被“保存”而不是运行,但可以进行自定义或调试。E
. 成功构建和调试的最后提示:
i. 选择合适的“上下文”大小可以加快构建速度,但请确保它包含所有需要的文件。ii
. 为确保一致性,构建过程或安装(npm)生成的文件应该在容器内(而不是您的计算机上)生成。iii
. 文件未找到的错误(常见)是因为文件未被复制或复制到了错误的位置。确定进程在容器中的起始位置,并尝试将其与文件可能所在的位置关联起来。
本次演讲将于7月23日作为CodeLand:Distributed会议的一部分进行。会议结束后,演讲视频将以录制视频的形式添加到本文中。
文章来源:https://dev.to/nickpalenchar/the-whale-the-container-and-the-ocean-a-docker-tale-with-nick-palenchar-2hj6