当前位置: 首页 > Linux

学习Docker,新手最常犯的11个错误!

时间:2023-04-07 03:02:03 Linux

很多人最终决定使用Docker来解决他们的问题。Docker有很多优点,例如:1.集成——所有的操作系??统、库版本、配置文件、应用程序等都打包在容器中。这确保了QA测试的图像将在生产环境中具有相同的行为。2.轻量级——内存占用极小,只为主进程分配内存。3、快速阅读——一键启动,与启动普通linux进程一样快。原文:https://my.oschina.net/cllgee...尽管如此,很多用户仍然只把容器当成普通的虚拟机,而忘记了容器的一个重要特性:因为这个特性,一些用户需要改变他们的容器的概念,为了更好的使用和发挥Docker容器的价值,有一些事情是绝对不能做的:1.不要把数据存储在容器中。容器可能被中断、更换或销毁销毁。在容器中运行的1.0版应用程序可以很容易地被1.1版替换,而不会影响或丢失数据。因此,如果您需要存储数据,请将其存储在一个卷中。在这种情况下,还应注意如果两个容器将数据写入同一卷,这将导致损坏。确保应用程序适合写入共享数据存储。2.不要分两部分发布应用程序有些人认为容器是虚拟机,所以他们中的大多数人认为应用程序应该部署到一个现有的正在运行的容器中。在需要不断部署和调试的开发阶段,这可能是正确的;但对于QA和生产的持续交付(CD)渠道,应用程序应该是镜像的一部分。请记住:容器是短暂的。3.不要创建大图像。大图像难以分发。确保仅使用必需的文件和库来运行应用程序。不要安装不必要的包或运行“更新”(yum更新),这将下载大量文件到新的镜像层。4.不要使用单层镜像要利用多层文件系统,始终为操作系统创建自己的基础镜像层,然后为用户名定义创建一个层,为运行时安装创建一个层,为运行时创建一个层配置,最后为应用程序创建一个层。这使得重新创建、管理和分发图像变得更加容易。5.不要从正在运行的容器创建镜像换句话说,不要使用“dockercommit”命令创建镜像。这种图像创建方法不可重现,因此应完全避免。始终使用完全可重现的Dockerfile或任何其他S21(源到图像)方法,以便如果存储在源代码控制存储库(GIT)中,则可以跟踪对Dockerfile的更改。6.不要只使用“latestversion”标签latestversion标签对Maven用户来说就像一个“快照”。容器具有多层文件系统的基本特性,因此我们鼓励使用标签。相信没有人想构建几个月的镜像,突然发现应用无法运行,因为父层(即Dockerfile中的FROM)被替换为新版本(新版本无法向后兼容或从中检索)构建缓存。“最新”版本是错误的)这样的事故,对吧?在生产中部署容器时也应避免使用“最新版本”标签,因为无法跟踪当前运行的镜像版本。7.不要在一个容器中运行多个进程容器最好只运行一个进程(HTTP守护进程、应用服务器、数据库),但如果运行多个进程,则很难管理和检索日志和更新单独处理会很麻烦。8.不要在镜像中存储凭据和使用环境变量。不要在图像中硬编码任何用户名/密码。请使用环境变量从容器外部检索信息。Postgres镜像很好地说明了这一原则。9.不要以root身份运行进程“默认情况下,Docker容器以root权限运行。随着Docker技术的成熟,越来越多的安全默认选项可用。目前,要求root对其他用户来说是危险的,此外,并非所有环境可以使用root。图像应该使用USER指令指定一个非root用户来运行容器。”(摘自《Docker 镜像作者指南》(DockerImageAuthors指南))10.不要依赖每个容器的IP地址有自己的内部IP地址,如果容器启动然后停止,它可能会改变。如果您的应用程序或微服务需要与另一个容器通信,请使用环境变量在容器之间传递适当的主机名和端口。11、监控容器Docker监控越来越受到开发者的重视。实时监控Docker,这里推荐使用Cloudinsight。不同于一些需要自写脚本的监控方式,Cloudinsight作为一款免费的SaaS服务,可以一键监控Docker,并且具有非常棒的可视化界面。此外,Cloudinsight还支持对多个操作系统、数据库等的监控,可以将所有被监控的系统基础组件的性能数据进行统一展示。再送一份Docker学习资料:史上最全最详细的Docker学习资料