不可不知的七个Docker优秀实践

译文
开源
Docker是流行的容器化软件,但不是每个人都在高效地使用它。如果您不遵循Docker的优秀实践,您的应用程序就很容易受到安全问题或性能问题的影响。

译者 | 布加迪

审校 | 重楼

Docker是流行的容器化软件,但不是每个人都在高效地使用它。如果您不遵循Docker优秀实践,您的应用程序就很容易受到安全问题或性能问题的影响

本文介绍了您可以用来高效地使用Docker功能的几个最佳实践。这些措施提高了安全性,并确保您创建易于维护Docker文件。

1.使用官方Docker镜像

在容器化处理应用程序时,必须使用Docker镜像。您可以使用自定义配置构建镜像,也可以使用Docker的官方镜像。

构建自己的镜像需要您自处理所有配置。比如说Node.js应用程序构建镜像,必须下载Node.js及其依赖项。这个过程很耗时,可能不会生成所有正确的配置。

Docker建议您使用官方的Node.js镜像,它包含所有正确的依赖项。Docker镜像有更好的安全措施,具有轻量级的优点,并针对各种环境进行了测试。你可以在Docker的官方镜像页面找到官方镜像

2.使用Docker镜像的特定版本

当您拉官方镜像时,它通常带有最新标签,代表该镜像的最新更新版。每当使用镜像构建容器,它都是上一个容器的不同版本。

使用不同Docker镜像版本进行构建可能导致应用程序出现不可预测的行为。版本可能会与其他依赖冲突,最终导致应用程序失败。

Docker建议您使用特定版本的镜像进行拉取和构建。官方镜像也有说明文档,介绍了最常见的用例。

比如说,使用docker pull alpine:3.18.3,而不是docker pull alpineDocker将提取该特定版本。然后,您可以在后续构建中使用它,从而减少应用程序中的错误。您可以在Docker官方镜像页面的Supported标签和相应的Dockerfile链接下找到镜像的特定版本

3.扫描镜像以查找安全漏洞

如何确定要构建的镜像没有安全漏洞扫描就行可以使用Docker scan命令扫描Docker镜像。语法如下

docker scan [IMAGE]

您必须先登录到Docker才能扫描镜像。

docker login

然后,扫描您想要检查的特定镜像

docker scan ubuntu: latest

一种名为Synk的工具可以扫描镜像,根据严重程度列出任何漏洞。您可以看到漏洞的类型和指向相关信息的链接包括如何修复它。您可以从扫描结果中判断镜像对您的应用程序而言是否足够安全。

4.使用小型Docker镜像

当您取Docker镜像时,它附带所有系统实用程序。这增加了不需要的工具的镜像大小。

大型Docker镜像占用存储空间,并且减慢容器的运行速度。它们存在安全漏洞的可能性也更大

您可以使用Alpine镜像减小Docker镜像的大小。Alpine镜像是轻量级的,只附带必要的工具。它们减少了存储空间,使应用程序运行起来更快速、更高效。

可以在Docker上找到大多数官方镜像的Alpine版本。下面是PostgreSQL的Alpine版本的示例:

5.优化缓存镜像层

Dockerfile中的每个命令代表镜像上的一个层。这些层有不同的实用程序并执行不同的功能。如果您查看Docker Hub上的官方镜像,将看到用于创建它们的说明。

Dockerfile包含创建镜像所需的全部内容。这就是为什么许多开发人员青睐Docker而不是虚拟机的原因之一。

下面是示例Alpine镜像的结构

当您构建基于镜像的应用程序时,实际上镜像添加更多的层。Docker从上到下在Dockerfile上运行指令,如果一个层发生了变化,Docker必须重建后续的层。

最佳实践是将您的Dockerfile按照更改最少的文件更改最频繁的文件这个顺序排列。不会改变的指令比如安装可以放在文件的顶部。

当您修改一个文件时,Docker根据修改后的文件进行构建,并在上面缓存未修改的文件。因此,流程运行速度更快。

请看上图所示的例子。如果应用程序文件发生了变化,Docker将从那里构建没必要再次安装NPM包。

如果从镜像构建,该过程将比从头重建所有其他层运行得更快。缓存加快了从Docker Hub取和推送镜像的速度。

6.使用.dockerignore文件

在使用Dockerfile构建镜像时,您可能希望保留某些信息的私密性。些文件和文件夹可能是项目的一部分,但您不希望将它们包含在构建过程中。

使用.dockerignore文件可以大大减小镜像大小。这是由于构建过程只包含必要的文件。它还有助于保持文件的私密性,避免暴露密钥或密码。

.dockerignore文件是您在与Dockerfile相同的文件夹中创建的一个文件。它是一个文本文件,酷似.gitignore文件,含有您不希望在构建过程中包含的任何文件的名称。

这里有一个例子

7.使用最小权限用户原则

默认情况下,Docker使用root用户作为管理员以便获得运行命令的权限,但这种做法不好。如果其中一个容器存在漏洞,黑客就可以访问Docker主机。

了避免这种情况,创建专用的用户和用户组。您可以为用户组设置相应的权限,以保护敏感信息。如果用户受到危及,您可以在不暴露整个项目的情况下删除该用户

下面这个例子展示了如何创建用户并设置权限

些基本镜像在其中创建了伪用户。您可以使用已安装的用户而不是root用户权限。

最佳实践是减少漏洞和编写更简洁代码的好方法。您可以将许多最佳实践应用于使用的每Docker特性。

一个组织良好的项目可以更容易与Kubernetes等其他编排工具进行同步。您可以从本文中概述的这些方法入手在学习Docker的过程中采用更多方法。

原文标题:8 Docker Best Practices You Should Know About,作者:Sandra Dindi

责任编辑:华轩 来源: 51CTO
相关推荐

2023-11-13 14:19:57

Golang编程语言

2023-06-15 11:01:43

Java工具开源

2023-06-26 14:11:06

SQLC++语言

2023-10-17 18:03:30

Code更改函数

2023-09-08 10:23:13

JavaScriptNPM模块

2021-12-30 10:54:53

Hive调优实践

2024-03-21 08:57:39

语言软件开发

2010-06-11 14:46:38

可路由协议

2023-09-22 12:14:33

2021-08-12 16:02:22

Jupyter NotPython命令

2009-06-10 09:08:13

WCF变更处理契约

2010-12-17 11:22:11

职场

2020-11-30 13:12:04

Linux文本命令

2015-01-15 09:34:28

2015-06-10 10:56:50

iOS开发技巧

2015-07-28 16:48:04

云计算性能测试云服务

2024-09-23 21:05:45

2010-04-16 17:09:18

Oracle查看锁

2020-11-11 21:27:55

缓冲文件调用

2019-12-02 14:14:20

缓冲系统调用函数
点赞
收藏

51CTO技术栈公众号