Docker 基础知识

2025-06-08

Docker 基础知识

Docker 是一个开源的集中式平台,旨在创建、部署和运行应用程序。它消除了重复、繁琐的配置任务,并在整个开发生命周期中用于实现快速、轻松且可移植的应用程序开发。Docker
使用主机操作系统上的容器来运行应用程序。它允许应用程序使用与主机系统相同的 Linux 内核,而无需创建整个虚拟操作系统。容器确保我们的应用程序在任何环境(例如开发、测试或生产)中都能正常工作。

Docker 功能

  • 轻松快捷的配置 - 它帮助我们轻松快捷地配置系统。我们可以用更少的时间和精力部署我们的代码。
  • 提高生产力——通过简化技术配置和快速部署应用程序,毫无疑问地提高了生产力。
  • 应用程序隔离 - 它提供用于在隔离环境中运行应用程序的容器。每个容器彼此独立,并允许我们执行任何类型的应用程序。
  • Swarm - 一款 Docker 容器集群和调度工具。Swarm 使用 Docker API 作为其前端,方便我们使用各种工具进行控制。它还能帮助我们将 Docker 主机集群控制为单个虚拟主机。它是一个自组织的引擎组,用于支持可插拔的后端。

  • 路由网格 - 它将可用节点上已发布端口的传入请求路由到活动容器。即使节点上没有正在运行的任务,此功能也能启用连接。

  • 服务 - 服务是一系列任务,用于指定集群内容器的状态。每个任务代表一个应运行的容器实例,Swarm 负责跨节点调度这些实例。

  • 安全管理——它允许我们将秘密保存到群体本身中,然后选择让服务访问某些秘密。

Docker容器和虚拟机之间的区别

Docker容器

Docker 容器是虚拟机的轻量级替代方案。它允许开发人员将应用程序及其所有库和依赖项打包,并将其作为单个软件包发布。使用 Docker 容器的优势在于您无需为应用程序分配任何 RAM 和磁盘空间。它会根据应用程序需求自动生成存储空间。此外,在容器中集成速度更快、成本更低,不会浪费内存,并且它使用相同的内核,但发行版不同。

虚拟机

虚拟机是一种软件,允许我们在计算机上同时安装和使用其他操作系统(Windows、Linux 和 Debian)。虚拟机运行的操作系统称为虚拟化操作系统。这些虚拟化操作系统可以运行程序并执行我们在真实操作系统中执行的任务。
然而,虚拟化集成速度慢且成本高,浪费大量内存,并且会使用多个独立的操作系统。

为什么选择 Docker?

  • 它在几秒钟内而不是几分钟内运行容器。
  • 它使用较少的内存。
  • 它提供了轻量级虚拟化。
  • 它不需要完整的操作系统来运行应用程序。
  • 它使用应用程序依赖关系来降低风险。
  • Docker 允许您使用远程存储库与他人共享您的容器。
  • 它提供持续部署和测试环境。

Docker 容器和镜像

Docker 容器是镜像的运行实例。镜像是一个只读模板,其中包含创建 Docker 容器的指令。Docker
镜像由名为 Dockerfile 的文本文件描述,该文件具有简单且定义明确的语法。镜像没有状态,并且永远不会更改。Dockerfile
是一个文本文档,其中包含用于组装镜像的命令。

Dockerfile 说明

指令不区分大小写,但必须遵循建议使用大写的约定。Docker 按从上到下的顺序运行 Dockerfile 中的指令,因此第一条指令应该是FROM以指定基础镜像。
以 # 开头的语句被视为注释。您可以在 Dockerfile 中使用 RUN、CMD、FROM、EXPOSE、ENV 等指令。

FROM
指令用于设置后续指令的基础镜像。有效的 Dockerfile 必须以 FROM 作为其第一条指令。ARG 指令是唯一可以在 Dockerfile 中 FROM 之前的指令。了解 ARG 和 FROM 之间的交互

ARG  CODE_VERSION=latest
FROM <image>
FROM <image>:<tag>
FROM <image>@<digest>
Enter fullscreen mode Exit fullscreen mode

注意:标签或摘要值是可选的。如果省略其中任何一个,构建器都会默认使用最新版本。

MAINTAINER
允许您设置生成的图像的作者字段。

MAINTAINER <name>
Enter fullscreen mode Exit fullscreen mode

LABEL
我们可以为图像添加标签,以便组织项目的图像。我们需要使用 LABEL 指令来为图像设置标签。

LABEL <key>=<value> [<key>=<value> ...]
Enter fullscreen mode Exit fullscreen mode

RUN
该指令用于执行当前图像的任意命令。

RUN <command>(shell form, the command is run in a shell)
RUN ["<executable>", "<param1>", "<param2>"] (exec form)
Enter fullscreen mode Exit fullscreen mode

CMD
此命令用于通过镜像执行应用程序。
注意:一个 Dockerfile 中只能有一个 CMD。如果使用多个 CMD,则只有最后一个会执行。

CMD指令有三种形式:

CMD ["<executable>","<param1>","<param2>"] (exec form, this is the preferred form)
CMD ["<param1>","<param2>"] (as default parameters to ENTRYPOINT)
CMD <command> <param1> <param2> (shell form)
Enter fullscreen mode Exit fullscreen mode

EXPOSE
通知 Docker 容器在运行时监听指定的网络端口。

EXPOSE <port> [<port> ...]
Enter fullscreen mode Exit fullscreen mode

ENV
ENV 指令将环境变量设置为值

ENV <key> <value>
ENV <key>=<value> [<key>=<value> ...]
Enter fullscreen mode Exit fullscreen mode

ADD
复制新文件、目录或远程文件 URL,并将它们添加到路径中的图像文件系统中

ADD <src> [<src> ...] <dest>
ADD ["<src>", ... "<dest>"]
Enter fullscreen mode Exit fullscreen mode

COPY
该指令用于将新文件或目录从源复制到目标容器的文件系统。

COPY <src> [<src> ...] <dest>
COPY ["<src>", ... "<dest>"] (this form is required for paths containing whitespace)
Enter fullscreen mode Exit fullscreen mode

ENTRYPOINT
允许您配置将作为可执行文件运行的容器。

ENTRYPOINT ["<executable>", "<param1>", "<param2>"] (exec form, preferred)
ENTRYPOINT <command> <param1> <param2> (shell form)
Enter fullscreen mode Exit fullscreen mode

VOLUME
创建具有指定名称的挂载点,并将其标记为保存来自本机主机或其他容器的外部挂载卷。

VOLUME ["<path>", ...]
VOLUME <path> [<path> ...]
Enter fullscreen mode Exit fullscreen mode

USER
USER 指令设置运行镜像时使用的用户名或 UID,以及 Dockerfile 中任何 RUN、CMD 和 ENTRYPOINT 指令

USER <username | UID>
Enter fullscreen mode Exit fullscreen mode

WORKDIR
WORKDIR 用于设置 Dockerfile 中任何 RUN、CMD 和 COPY 指令的工作目录。如果工作目录不存在,则默认创建。

WORKDIR </path/to/workdir>
Enter fullscreen mode Exit fullscreen mode

注意:我们可以在 Dockerfile 中多次使用 WORKDIR。

ONBUILD
向镜像添加一个触发器指令,该指令稍后在镜像用作其他构建的基础时执行。触发器将在下游构建的上下文中执行,就像在下游 Dockerfile 中 FROM 指令之后立即插入一样。

ONBUILD <Dockerfile INSTRUCTION>
Enter fullscreen mode Exit fullscreen mode

STOPSIGNAL
STOPSIGNAL 指令设置将发送给容器退出的系统调用信号

STOPSIGNAL <signal>
Enter fullscreen mode Exit fullscreen mode

HEALTHCHECK
告诉 Docker 如何测试容器以检查它是否仍在工作

HEALTHCHECK [<options>] CMD <command> (check container health by running a command inside the container)
HEALTHCHECK NONE (disable any healthcheck inherited from the base image)
Enter fullscreen mode Exit fullscreen mode

SHELL
允许覆盖用于 shell 形式命令的默认 shell

SHELL ["<executable>", "<param1>", "<param2>"]
Enter fullscreen mode Exit fullscreen mode
鏂囩珷鏉ユ簮锛�https://dev.to/emma_donery/docker-understanding-the-basics-2n37
PREV
加入开发团队:)
NEXT
理解 JavaScript 中的异步编程:事件循环初学者指南