使用容器的六个最佳实践 1. Always start with a clear purpose and scope for your container. Define what you want to achieve and what functionalities you need. 2. Choose the right container type based on your requirements. There are different types of containers available, such as Docker and Kubernetes. Understand the differences and choose the one that suits your needs. 3. Use container images that are from trusted sources. Make sure the images are secure and regularly updated to avoid any vulnerabilities. 4. Implement security measures to protect your containers. Set up access controls, monitor container activities, and regularly scan for vulnerabilities. 5. Optimize resource usage by scaling your containers. Use tools and technologies that allow you to scale containers based on demand, ensuring efficient resource utilization. 6. Continuously monitor and manage your containers. Regularly check for updates, monitor performance, and track resource usage to ensure smooth operations. 使用容器的六个最佳实践
让我们谈谈在使用容器时应遵循的一些最佳实践。
容器化正在广泛应用于多个组织,以在容器内部部署应用程序。这些容器因其非常轻量级而受到欢迎。为了充分利用containers,在使用它们时应遵循一些最佳实践。
使用稳定的基础镜像
多亏了Docker,creating container镜像从未如此简单。
指定您的基础镜像,添加您的更改,并构建您的容器。虽然这对于入门非常有用,但使用默认的基础镜像可能会导致包含安全漏洞的大型镜像。此外,避免使用“Latest”标签的Docker镜像,因为它很可能存在错误。
大多数Docker镜像使用Debian或Ubuntu作为基础镜像。它们在兼容性和易于入门方面非常有帮助,但这些基础镜像可能会为您的容器增加数百兆字节的额外开销。
例如,简单的Node.js和Go的“hello world”应用程序大约为700兆字节。您的应用程序可能只有几兆字节。因此,所有这些额外开销都是浪费的空间,也是安全漏洞和错误的理想藏身之地。
如果您的编程语言或堆栈没有小型基础镜像的选项,您可以使用裸露的链接_2>作为起点构建您的容器。这还可以让您完全控制容器中的内容。
保持容器镜像更小
使用较小的基础镜像可能是减小容器大小的最简单方法。
很有可能您正在使用的语言或堆栈提供的官方镜像要比默认镜像小得多。例如,让我们看一下Node.js容器。从默认的node:latest到node:14-alpine,我们的基础镜像大小几乎减小了十倍。
vs.….
在新的链接_3>中,容器从node:alpine镜像开始,创建一个用于代码的目录,使用NPM安装依赖项,最后启动Node.js服务器。通过此更新,生成的容器几乎减小了十倍。
您可以使用构建器模式使容器更轻。使用解释性语言,源代码会被发送到解释器,然后直接执行。但是对于编译语言,源代码会事先转换为编译代码。
现在,对于编译语言,编译步骤通常需要不需要运行代码的工具。所以这意味着您可以完全从最终容器中删除这些工具。要做到这一点,可以使用构建器模式。第一个容器构建代码,然后将编译代码打包到最终容器中,而不需要所有编译代码所需的编译器和工具。
使用小型基础镜像和构建器模式是创建更小的容器的好方法,而不需要太多工作。
给容器镜像打标签
对于我们来说,Docker标记是一个非常强大的工具,用于管理我们的镜像。它有助于管理Docker镜像的不同版本。下面是使用标签名v1.0.1构建Docker镜像的示例:
docker build -t yaoweibin/ubuntu:v1.0.1
现在,有两种类型的标签使用:稳定标签和唯一标签。
使用稳定的标签来维护容器的基础镜像。避免在部署容器时使用这些标签,因为这些标签会频繁接收更新,可能导致生产环境中的不一致。
使用唯一的标签进行部署。使用唯一的标签,您可以轻松扩展生产集群到多个节点。它避免了不一致性,主机将不会拉取任何其他Docker镜像版本。
同时,作为良好的实践,您应该通过将写入使能设为false来锁定部署的图像标签。这有助于防止意外从注册表中删除部署的图像。
容器安全
以下是确保链接_4的基本要点。
- 验证在容器中安装的任何软件的真实性
- 使用带有有效校验和的签名docker镜像或镜像。
- 如果使用第三方存储库,请确保URL使用HTTPS。
- 在使用软件包管理器更新软件包之前,请包含正确的GPG密钥
- 不要以root身份运行您的应用程序。您应该始终在dockerfile内使用用户指令,以确保降低用户权限。
- 不要在容器内运行SSH。
- 将文件系统设置为只读。
- 使用命名空间将集群分割。
Docker基准由互联网安全中心(CIS)提供,用于评估Docker容器的安全性。他们提供了一个名为链接_5的开源脚本,您可以运行它来检查Docker容器的安全性。
一个容器一个应用
虚拟机非常擅长并行运行多个任务,但是对于容器而言,应该在一个容器中运行一个单独的应用程序。例如,如果您在容器化环境中运行MEAN应用程序,则应该为MongoDB创建一个容器,为Express.js创建一个容器,为Angular创建一个容器,为Node.js创建一个容器。
即使容器可以并行运行多个应用程序,但您可以利用容器模型。以下是在容器中运行应用程序的正确和错误表示。
容器的设计目标是具有与其运行的应用程序类似的生命周期。当容器启动时,应用程序将启动。当容器停止时,应用程序也停止。
运行无状态容器
容器的基本设计目标是无状态的。在这种情况下,包含容器状态信息的持久数据存储在容器外部。文件可以存储在对象存储中,例如链接_6,以存储用户会话信息,您还可以使用低延迟数据库(如Redis)来存储数据,并且还可以附加外部磁盘进行块级存储。
通过将存储保持在容器外部,您可以轻松关闭或销毁容器,而无需担心丢失任何数据。
如果使用无状态容器,根据业务需求进行迁移或扩展非常容易。
结论
以上是在使用容器时必须遵循的一些最重要的实践。如果您正在构建Docker生产环境,请查看链接_7。