Docker 参数 – 最佳参数!

如果您是经验丰富的系统管理员,您可能听说过 “码头工人” 听说过并且已经知道它是什么。对于那些不知道的人来说,Docker 是一项开源技术,允许应用程序在隔离的容器中运行。

什么是 Docker 参数?

Docker 参数是传递给 Docker 命令的值。该值可以以环境变量的形式指定,也可以直接在命令本身中指定。

不同类型的 Docker 参数

docker run 命令有许多不同的选项和参数,您可以根据需要进行自定义。在这个 artikel 我们将重点关注不同类型的 Docker 参数。

Docker 参数主要有四种类型:环境变量、单个命令、命令和文件的组合。每种类型都有自己的 优点和缺点需要考虑到这一点。

环境变量易于使用,允许您自定义环境的某些部分,而无需更改代码。然而,它们只能存储简单的数据类型,这意味着它们不适合更复杂的应用程序配置。

单个命令允许您简单地执行命令,而无需创建文件。如果您只想执行特定操作而不构建完整的应用程序,这可能很有用。然而,单个命令不可扩展,因此可能不适合较大的应用程序。

命令组合允许您将多个命令保存在一个文件中,然后执行它们。当您想要执行多个操作而不必每次都更改代码时,这非常有用。然而,命令的组合常常令人困惑且难以调试。

文件是存储和运行代码的最灵活的方式。文件可以轻松创建和修改,这意味着它们适用于所有类型的应用程序。然而,文件常常令人困惑且难以调试。

最佳 Docker 参数

最佳 Docker 参数

如果您使用 Docker,则可以指定各种选项来控制容器的行为。本文介绍了最佳且最常用的 Docker 参数。

–name:该参数为容器指定一个名称。如果您不指定名称,则会生成一个随机名称。该名称应该是唯一的,以便您可以轻松识别容器。

–detach / -d:该参数在后台运行容器。默认情况下,容器在前台运行,并且命令行保持阻塞状态,直到容器退出或使用 Ctrl+C 取消。如果要在后台运行容器,则应指定 –detach 参数。

–publish / -p:该参数在容器端口和主机端口之间建立连接。如果不连接,您将无法从外部到达容器的端口。如果要发布多个端口,可以多次指定--publish参数。

–interactive / -i:该参数确保容器在前台运行,并且命令行不会被阻塞,直到容器退出或使用 Ctrl + C 中止。

–tty / -t:该参数模拟容器中的终端。指定此参数允许您在容器中键入并执行命令。如果未指定此参数,则无法在容器中键入或执行命令。

–rm:该参数退出后删除容器。如果不指定此参数,容器将保持完整并可以在以后恢复。

–volume / -v:此参数创建主机文件夹和容器文件夹之间的连接。连接时,您可以将文件从主机文件夹复制到容器,反之亦然。

–workdir / -w:该参数设置容器中的工作目录。默认情况下,工作目录设置为/root。

–user / -u:该参数设置容器中的用户。默认情况下使用 root 用户。
这些只是众多可用 Docker 参数中的一小部分。有关更多信息,请参阅 Docker 文档。

–restart:此参数指定 Docker 在退出或崩溃时应如何重新启动容器。该参数有不同的选项:no、on-failure、always 和 except-stopped。默认为“no”,表示容器不会重新启动。如果指定“on-failure”,则容器将在运行时重新启动 错误 被终止(例如由于崩溃)。 “始终”意味着容器将始终重新启动 - 即使它被彻底关闭。 “Unless-stopped”与“always”类似,但这里容器不会在无人看管的情况下运行;一旦运行“docker stop”命令停止容器,它将不再重新启动。

–hostname:顾名思义,该参数设置容器的主机名。默认值是容器的名称,如果未指定 –name,则为随机名称。

–interactive 或 -i:此参数允许您登录正在运行的容器并与之交互。例如,您可以在容器中启动终端并运行命令。如果不指定该参数,将无法登录容器并与容器交互。

–volume 或 -v:此参数创建主机文件夹和容器文件夹之间的连接。连接时,您可以将文件从主机文件夹复制到容器,反之亦然。

Docker 参数的优点和缺点

可以说,Docker 参数最重要的好处是它提高了应用程序的灵活性和适应性。例如,可以将特定的环境变量传递给特定的应用程序。对主机系统资源的访问也可以通过参数进行控制。

另一个优点是某些安全功能也可以使用 Docker 参数绑定到应用程序。例如,可以确保只有授权用户才能访问应用程序。

Docker 参数的一个缺点是它们通常仅供开发人员和系统管理员使用。它们对于普通用户来说通常是不可见或无法理解的。因此,如果您不了解 Docker 参数,则可能很难自定义应用程序。

Docker 运行参考

大多数 Docker 命令以“docker”命令开头,后跟子命令。 docker run 是一个典型的子命令,用于运行一个新的容器。

docker run 命令具有许多不同的选项和参数,您可以指定它们来创建和配置要运行的容器。在本文中,我们将了解 docker run 命令的最佳参数。

运营商专属选项

大多数操作员选项并非操作员独有,其他用户也可以使用。然而,有一些选项是专门为运营商设计的。这些包括:

–log-level :设置日志记录级别。只有操作员才能访问此选项来自定义其安装的日志记录。

–storage-opt :允许操作员为其安装配置其他存储选项。当操作员使用 Docker 不支持的特定存储后端时,这非常有用。

–format :允许操作员自定义 docker info 输出的格式。如果操作员想要以特定形式进一步处理信息,这会很有帮助。

独立与前景

当您使用 docker run 命令运行容器时,它始终在前台运行。这意味着容器具有 控制台 主机系统的命令,并且您无法在不停止容器的情况下退出该命令。

如果您想在后台运行容器(分离),您可以使用“-d”参数来执行此操作。然后容器在自己的进程中执行,并将控制台的控制权交还给主机。

集装箱识别

容器ID是Docker容器的唯一标识符。可以使用 docker ps 命令查看它,通常为八个字符长。容器ID的前三个字符是创建容器的镜像的ID。

UTS 设置 (-uts)

UTS 模式指定容器应如何管理自己的身份。通常,每个容器都有自己的 UID 和 GID。然而,这种模式并不总是有意义,特别是当多个容器访问同一个容器时 数据库 或者需要访问其他资源。在这种情况下,您可以禁用UTS模式,以便所有容器具有相同的UID和GID。

IPC 设置 (-ipc)

IPC 设置 (–ipc) 允许使用公共区域在容器之间进行通信。这允许两个或更多容器访问相同的文件和套接字。如果不指定IPC设置,Docker将设置默认的通信范围。

网络设置

Docker 中有一些您应该了解的有用参数。这些参数之一是-net。此参数确定如何为特定应用程序配置网络。

–net=host – 此选项允许容器直接访问主机的网络。这意味着容器可以访问所有网络服务(DNS、HTTP 等)由主机提供。

–net=bridge – 该选项创建一个内部网桥容器,允许指定的容器与其他容器和主机进行通信。这是-net 的默认选项。

–net=container: – 此选项允许容器连接到使用相同网络选项的另一个容器。例如,可以使用相同的 –net=bridge 选项将两个容器连接在一起。

–net=none – 此选项禁用容器的网络。使用此选项的容器无法访问网络,因此无法使用网络服务。

要允许两个容器相互通信,可以使用 docker network create 命令:

$ docker 网络创建我的网络

此命令创建一个名为 my-network 的新网络。要将容器连接到该网络,可以使用带有 –net 选项的 docker run 命令:
$ docker run –net=我的网络...

要删除容器,您可以使用 docker rm 命令:

$ docker rm my-container

此命令删除 my-container 容器。要删除网络,可以使用 docker network rm 命令:
$ 码头工人网络 rm 我的网络

此命令删除名为 my-network 的网络。

重启策略(-重启)

Docker 的重启策略指定了容器在某个时间后如何重新启动。 错误 应该重新启动。重新启动选项有:

–restart=no:容器不会重新启动。
–restart=always:容器总是重新启动,即使它被干净地关闭了。
–restart=on-failure:如果容器正在运行,则会重新启动 错误 被结束了。
–restart=unless-stopped:容器始终会重新启动,除非使用 docker stop 命令手动停止。

退出状态

退出状态是命令或函数返回的值,指示命令或函数是否成功完成。

如果命令完成时退出状态为 0,通常意味着命令成功。不同的退出状态通常意味着命令失败。

退出状态还可用于生成特定的错误代码。如果您有特定的需求,这会很有帮助 查找并修复错误 想。例如,exit 1 可用于显示“文件未找到”错误。

清理(​​-rm)

大多数 Docker 命令都带有一个或多个参数。最重要的之一是“-rm”。此命令可确保命令完成后删除 Docker 创建的所有临时对象。这可确保您的环境中不会残留任何不需要的对象。

安全配置

使用 Docker 时,安全配置是一个非常重要的方面。本节列出了一些最重要的参数 安全 由 Docker 提出。

首先,您应该始终意识到 Docker 容器是密封的,但不是隔离的。这意味着如果攻击者进入一个容器,他们就可以访问所有其他容器和主机系统。因此,正确配置和保护容器非常重要。

Docker 安全最重要的参数之一是“–cap-add”。此参数允许您将某些内核容量传递给容器。这允许您控制对主机系统某些功能的访问,从而提高安全性。例如,您可以使用“–cap-add=NET_RAW”来确保容器无法嗅探网络数据包。

另一个重要参数是“--security-opt”。此参数允许您限制对主机系统某些功能的访问。例如,您可以使用“–security-opt=apparmor:unconfined”来确保 AppArmor 不会应用于容器。这给攻击者带来了巨大的优势,因为他们不再受到 AppArmor 的限制。

另一个非常重要的参数是SELinux“--label”参数。此参数允许您控制对主机系统某些功能的访问。例如,使用“–label=type:
“container_runtime_t”确保 Docker 不会将 SELinux 应用于容器。这给攻击者带来了很大的优势,因为他们不再受到 SELinux 的限制。

最后一个重要参数是“--privileged”。该参数允许您访问主机系统的所有功能。这是非常危险的,只有在绝对必要时才应该使用。

今天就这样!我们希望这篇文章对您有所帮助 格兰德拉根 了解 Docker。

指定一个init进程

Docker 守护进程接受指定的 init 进程作为参数。该进程是容器中运行的第一个进程。如果没有指定init进程,则使用默认的init进程init。

指定的init进程应该确保容器中只有一个进程在运行。当多个进程同时运行时,可能会出现不可预测的错误。指定的init进程还必须确保容器在退出时正确关闭。

指定自定义 cgroup

如果您想为应用程序设置自定义 cgroup 内存限制,可以使用 –cgroup-memory 标志来执行此操作。例如,如果要将限制设置为 512MB:

–cgroup-内存=”512m”

如何配置自定义 DNS 我的容器的服务器?

如果您有自定义 DNS 服务器,您可以在应用程序规范文件或 dcos marathon app add 命令中进行设置。此示例显示如何设置 DNS 服务器 使用应用程序规范文件:

{ “id”: “/我的服务”, “DNS”: { “名称服务器”: [ “10.0.0.1” ] } }

此示例显示如何设置 DNS 服务器 使用 dcos marathon 应用添加命令:
$ dcos marathon app add { “id”: “/my-service”, “DNS”: { “名称服务器”: [ “10.0.0.1” ] } }

想了解如何 DNS,请参阅 Marathon 文档中的 DNS 设置。

如何配置自定义 seaRCH 对于我的容器?

如果你有定制 seaRCH ,您可以在应用程序规范文件或 dcos marathon app add 命令中进行设置。这个例子展示了如何设置 sea使用应用程序规范文件的 rch 域:

{ “id”: “/我的服务”, “DNS”: {“search”: [“.example.com”] } }

这个例子展示了如何设置 sea使用 dcos marathon app add 命令添加 rch 域:$ dcos marathon app add { “id”: “/my-service”, “dns”: { “search”: [“.example.com”] } }

有关 DNS 的更多信息,请参阅 Marathon 文档中的 DNS 设置。

如何为我的容器配置自定义网络?

如果您有自定义网络,则可以在应用程序规范文件或 dcos marathon app add 命令中进行设置。此示例显示如何使用应用程序规范文件设置网络:

{ “id”: “/my-service”, “networks”: [ { “mode”: “容器/网桥” } ] }

此示例显示如何使用 dcos marathon app add 命令设置网络:
$ dcos marathon app add { “id”: “/my-service”, “networks”: [ { “mode”: “container/bridge” } ] }
有关网络的更多信息,请参阅 Marathon 文档中的网络。

运行时资源限制

“资源的运行时约束”是一个 Docker 参数,用于控制正在运行的容器的资源管理。此参数允许您限制容器的 CPU 使用率、内存占用量和文件系统。

用户内存限制

大多数 Docker 参数专用于管理主内存。这主要用于运行容器和图像。还有一些其他的参数用于网络配置等 资源 维兰特沃特利希信德

Docker 的主内存非常有限。所以如果要创建容器或者镜像,就需要指定这些参数。否则,您可能会遇到性能问题或图像下载错误。

如果您想增加容器的存储空间,可以运行以下命令:

docker run -it –内存=”4g” ubuntu /bin/bash

此命令创建一个具有 4GB RAM 的新容器。如果需要更多内存,可以相应增加该值。

或者,您可以运行以下命令来创建具有更多内存的映像:

docker build –memory=”4g” -t my_image 。

此命令创建一个具有 4GB RAM 的新映像。如果需要更多内存,可以相应增加该值。

内核内存限制

内核内存限制是 Docker 的一个重要参数。它们决定容器可以使用多少内核内存。如果不指定该参数的值,则使用默认值。

如果要调整内核内存参数的值,首先必须找到当前值。这可以使用“docker info”命令来完成。然后您可以指定所需的新值。

请注意,更改此参数可能需要重新启动容器。

交换性约束

swappiness 设置是一个介于 0 到 100 之间的值,用于确定系统将内存内容写入交换空间的频率。高 swappiness 值意味着交换发生得更频繁,反之亦然。默认值为 60。对于 数据库 通常建议降低交换率,以确保内存尽可能长时间地保留在内存中。

CPU 共享限制

CPU 使用率份额是 Linux 内核中内置的一个构造,Docker 使用它来确保容器使用的内核数不会超过指定数量。这对于容器和主机之间的隔离以及整个系统的可靠性非常重要。

中央处理器限制

CPUset 约束对容器可以使用的 CPU 数量进行了限制。这对于确保容器不会干扰主机系统上的其他容器很有用。

CPU配额限制

CPU 配额限制 (cgroup_cpu_shares) 是一项 Linux 内核功能,允许限制不同进程之间的 CPU 使用率。该参数可以在 Docker 中使用“–cpu-shares”命令指定。

例如,如果指定值 512,则容器将接收到值为 256 的容器两倍的 CPU 时间。因此指定较高的值并不一定意味着容器将接收更多的 CPU 时间,而只是相对于其他价值较低的容器。

块 IO 带宽 (Blkio) 约束

块 IO 带宽限制是一种允许您限制容器 I/O 吞吐量带宽的工具。这对于确保容器不会使主机上的其他容器过载非常有用。块 IO 带宽以每秒字节数为单位进行测量,可以为所有设备或特定设备进行设置。

–blkio-权重

blkio权重表示容器从整个系统接收多少I/O带宽。例如,如果指定值 100,则与默认值 50 的另一个容器相比,该容器将接收两倍的 I/O 带宽。如果您想确保特定容器实现最佳性能,则此参数非常有用。

附加组

如果您想在单个容器中运行多个服务,您可以创建其他组。例如,如果您想在单个容器中运行 Web 服务器和数据库服务器,这非常有用。要创建附加组,请将以下命令添加到 docker run 命令: –group-add 。

运行时权限和 Linux 功能

“运行时权限”是Linux的核心功能,允许在运行时更改某些权限。当应用程序需要不同的权限才能启动或运行时,这特别有用。

您可以通过“sudo”命令使用此功能。例如:sudo chmod 777 /path/to/file。此命令授予所有用户对指定文件的完全访问权限。
但是,sudo 功能有一些限制。例如,用户无法更改他们尚未拥有的权限。这是一项安全预防措施,旨在防止用户获取不应拥有的权限。

sudo 函数的另一个缺点是必须为每个命令重新运行它。如果用户经常必须执行具有不同权限的命令,这可能会非常烦人。

Linux Capability 是 Linux 内核的扩展,允许设置特定权限 课程种类 和要分配的应用程序。这允许用户设置程序或应用程序的权限,并在必要时更改这些权限。

Linux 功能比 sudo 功能更加灵活,允许用户微调程序或应用程序的权限。例如,具有 Linux 功能的用户可以设置权限,以便程序只能访问已读取的文件。这对于确保程序不会对文件进行不应该的更改非常有用。

Linux 功能也比 sudo 功能更加用户友好。借助 Linux 功能,您不必为每个命令设置权限。人们可以简单地安装一个程序或应用程序,然后设置该程序或应用程序的权限。

日志驱动程序 (–log-driver)

构建 Docker 映像时,您可以指定要使用的日志记录驱动程序。默认日志记录驱动程序是“json-file”。然而,还有多种其他选择。一些例子是 syslog、journald 和 fluidd。

您可以使用“–log-driver”参数指定日志记录驱动程序。例如,如果您想使用 syslog 日志记录驱动程序,您可以这样做:

docker run –log-driver=syslog …

如果您想将容器的日志存储在集中式日志系统中,此参数非常有用。

覆盖 Dockerfile 镜像默认值

创建新的 Docker 映像时,您可以覆盖该映像的默认设置。如果您想更改特定设置而不重建整个映像,这非常有用。例如,您可以更改新映像的默认用户名,而无需重建整个映像。

要更改新 Docker 映像的默认值,您必须首先在项目目录中创建一个名为“.dockerignore”的文件。在此文件中,您应该指定创建映像时应忽略的所有目录和文件。创建此文件后,您可以运行以下命令来创建图像:

docker build -t your_image_name 。
此命令创建一个名为“your_image_name”的新 Docker 映像并覆盖任何默认定义的值。

Fazit

最佳 Docker 参数很大程度上取决于您的需求。在本文中,我们介绍了一些与大多数用例相关的最重要的参数。当然,还有许多其他不错的选择在本文中未提及。花时间研究所有选项,看看哪些最适合您!

笔记..很重要!

本网站链接的所有外部网站均为独立来源。 
这些链接没有受到赞助,也没有收到任何财务捐助。 
本网站提供的所有信息均不提供任何保证。
该网站是一个私人项目 Jan Domke 仅反映个人意见和经验。

Jan Domke

提示工程师 |社交媒体经理|托管经理 |网络管理员

自 2021 年底以来,我一直在私人运营该在线杂志 SEO4Business 从而把我的工作变成了一种爱好。
我自 2019 年以来一直从事 Senior Hosting Manager,在德国最大的互联网和营销机构之一,并不断扩大我的视野。

Jan Domke