您当前的位置:首页 > 电脑百科 > 程序开发 > 容器

Docker优秀实践:掌握这七个技巧让你成为容器化大师

时间:2023-09-20 12:28:33  来源:51CTO  作者:

译者 | 布加迪

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 alpine。Docker将提取该特定版本。然后,您可以在后续构建中使用它,从而减少应用程序中的错误。您可以在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特性。

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

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



Tags:Docker   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
Docker 和传统虚拟机有什么区别?
我有一个程序员朋友,他每年情人节都要送女朋友一台服务器。他说:“谁不想在过节当天收到一台 4核8g 的服务器呢?”“万一对方不要,我还能留着自己用。” 给他一次过节的机会,他能...【详细内容】
2024-03-26  Search: Docker  点击:(12)  评论:(0)  加入收藏
掌握Docker网络驱动程序:优化容器通信
Docker为在容器内包装、交付和运行应用程序提供了一个强大的平台,从而彻底改变了容器化。网络是容器化的重要组成部分,Docker提供了各种网络驱动程序来支持容器之间的通信以...【详细内容】
2024-03-22  Search: Docker  点击:(10)  评论:(0)  加入收藏
如何基于Docker镜像逆向生成Dockerfile
引言你是否曾经遇到过一个想要使用的 Docker 镜像,但却无法修改以适应你的特定需求?或者你可能发现了一个喜欢的 Docker 镜像,但想要了解它是如何构建的?在这两种情况下,将 Docke...【详细内容】
2024-03-07  Search: Docker  点击:(22)  评论:(0)  加入收藏
Docker与Docker Compose入门:释放你应用部署的威力
今天给大家介绍一项强大而有趣的技能,那就是使用 Docker 和 Docker Compose 来释放你的应用部署的威力!无论你是一名开发人员还是系统管理员,掌握这个技能都将为你的工作带来巨...【详细内容】
2024-01-17  Search: Docker  点击:(65)  评论:(0)  加入收藏
Docker镜像与容器的交互及在容器内部执行代码的原理与实践
Docker作为一种流行的容器技术,已经成为现代应用程序开发和部署的重要工具。在Docker中,镜像是构建和运行容器的基础,而容器则是基于镜像创建的可执行实例。Docker镜像与容器的...【详细内容】
2024-01-10  Search: Docker  点击:(77)  评论:(0)  加入收藏
如何在 Ubuntu 上安装 Docker
使用 Docker 意味着开启一个新的计算领域,但如果你刚刚开始使用 Docker,安装可能看起来是一项艰巨的任务。在 Ubuntu 上安装 Docker 有两种推荐的方法: 从 Ubuntu 的仓库安装 D...【详细内容】
2024-01-04  Search: Docker  点击:(124)  评论:(0)  加入收藏
七个杀手级Docker命令
Docker是一个容器化平台,通过操作系统级别的虚拟化技术,实现软件的打包和容器化运行。借助Docker,开发人员能够将应用程序以容器的形式进行部署,但在此之前需要构建Docker镜像。...【详细内容】
2023-12-22  Search: Docker  点击:(140)  评论:(0)  加入收藏
Docker容器如何打包应用程序的代码和依赖项?
Docker容器通过将应用程序的代码和所有依赖项打包到一个独立的软件包中,实现了应用程序的快速部署和移植。下面是Docker容器实现这一目标的步骤:打包应用程序:使用Docker工具将...【详细内容】
2023-12-20  Search: Docker  点击:(130)  评论:(0)  加入收藏
DBA视角:把数据库放入Docker是一个馊主意
对于无状态的应用服务而言,容器是一个相当完美的开发运维解决方案。然而对于带持久状态的服务 —— 数据库来说,事情就没有那么简单了。生产环境的数据库是否应当放...【详细内容】
2023-12-18  Search: Docker  点击:(197)  评论:(0)  加入收藏
Docker容器编排技术解析
一、容器编排介绍容器编排是现代云原生应用管理的核心,它涉及在大规模的环境中自动化部署、管理、扩展和网络配置容器。随着微服务架构的兴起和应用的复杂性增加,容器编排成为...【详细内容】
2023-12-15  Search: Docker  点击:(245)  评论:(0)  加入收藏
▌简易百科推荐
Docker 和传统虚拟机有什么区别?
我有一个程序员朋友,他每年情人节都要送女朋友一台服务器。他说:“谁不想在过节当天收到一台 4核8g 的服务器呢?”“万一对方不要,我还能留着自己用。” 给他一次过节的机会,他能...【详细内容】
2024-03-26  小白debug  微信公众号  Tags:Docker   点击:(12)  评论:(0)  加入收藏
掌握Docker网络驱动程序:优化容器通信
Docker为在容器内包装、交付和运行应用程序提供了一个强大的平台,从而彻底改变了容器化。网络是容器化的重要组成部分,Docker提供了各种网络驱动程序来支持容器之间的通信以...【详细内容】
2024-03-22    51CTO  Tags:Docker   点击:(10)  评论:(0)  加入收藏
Containerd容器管理
Nginx 指定容器名称 使用 ctr container create 命令创建容器后,容器并没有处于运行状态,其只是一个静态的容器。容器基本操作容器基本操作主要是 ctr image 命令,查看命令帮...【详细内容】
2024-03-20  云原生运维圈  微信公众号  Tags:容器   点击:(13)  评论:(0)  加入收藏
如何基于Docker镜像逆向生成Dockerfile
引言你是否曾经遇到过一个想要使用的 Docker 镜像,但却无法修改以适应你的特定需求?或者你可能发现了一个喜欢的 Docker 镜像,但想要了解它是如何构建的?在这两种情况下,将 Docke...【详细内容】
2024-03-07  云原生运维圈  微信公众号  Tags:Docker   点击:(22)  评论:(0)  加入收藏
Kubernetes是什么?主要特点是什么?
Kubernetes是什么?Kubernetes,也称为K8s,是一个开源的容器编排系统,由Google首次开发和维护。它允许容器化的应用程序在集群中自动部署、扩展和管理。Kubernetes提供了一种容器...【详细内容】
2024-02-01    简易百科  Tags:Kubernetes   点击:(154)  评论:(0)  加入收藏
我们一起聊聊容器资源自愈
在企业实际在使用容器这类资源的时候,除了技术本身,要考虑的其他问题也会很多。企业管理的容器有千千万万,出于效率考虑,对于有特殊需求的容器如何进行批量创建和管理呢,这就需要...【详细内容】
2024-01-30  匠心独运维妙维效  微信公众号  Tags:容器   点击:(47)  评论:(0)  加入收藏
Docker与Docker Compose入门:释放你应用部署的威力
今天给大家介绍一项强大而有趣的技能,那就是使用 Docker 和 Docker Compose 来释放你的应用部署的威力!无论你是一名开发人员还是系统管理员,掌握这个技能都将为你的工作带来巨...【详细内容】
2024-01-17  waynblog  微信公众号  Tags:Docker   点击:(65)  评论:(0)  加入收藏
Docker镜像与容器的交互及在容器内部执行代码的原理与实践
Docker作为一种流行的容器技术,已经成为现代应用程序开发和部署的重要工具。在Docker中,镜像是构建和运行容器的基础,而容器则是基于镜像创建的可执行实例。Docker镜像与容器的...【详细内容】
2024-01-10  编程技术汇  今日头条  Tags:Docker   点击:(77)  评论:(0)  加入收藏
如何在 Ubuntu 上安装 Docker
使用 Docker 意味着开启一个新的计算领域,但如果你刚刚开始使用 Docker,安装可能看起来是一项艰巨的任务。在 Ubuntu 上安装 Docker 有两种推荐的方法: 从 Ubuntu 的仓库安装 D...【详细内容】
2024-01-04    Linux中国  Tags:Docker   点击:(124)  评论:(0)  加入收藏
从Kubernetes的探针到DevOps
今天在群里又看有人问如何设置 Kubernetes 的探针,感觉要补充的话太多了,结合我们在一些 DevOps 项目中痛苦的体验,今天一劳永逸的全部说完,此外,也为大家展现一下为什么 DevOps...【详细内容】
2023-12-27  云云众生s  微信公众号  Tags:Kubernetes   点击:(114)  评论:(0)  加入收藏
站内最新
站内热门
站内头条