遵守这十一条,你就是 Docker 高手了

很多人最终还是决定使用 Docker 解决问题。 Docker 的优点很多,比如:

一体化——将操作系统、库版本、配置文件、应用程序等全部打包装在容器里。从而保证 QA 所测试的镜像 (image) 会携带同样的行为到达生产环境。
轻量——内存占用极小,只为主要过程分配内存。
快读——一键启动,就像启动常见的 linux 过程一样快。
尽管如此,众多用户仍然只是把容器当做常见的虚拟机,而忘记了容器的一个重要特性:

用后即弃

正因为这一特点,一些用户需要改变他们对容器的观念,为了更好的使用与发挥 Docker 容器的价值,有一些事情是绝对不应该做的:

1.不要在容器(container)中存储数据

容器可能会被中断、被替换或遭到破坏。在容器中运行的 1.0 版应用程序很容易就会被 1.1 版取代,而不会对数据造成影响或导致数据丢失。因此,如果需要存储数据,请存储在卷 (volume) 中。在这一情况下,还应注意两个容器是否会在同一个卷上写入数据,这将导致损坏。请确保应用程序适用于写入共享的数据存储。

2.不要分两部分传送应用程序

有些人把容器当作虚拟机,所以他们大多会认为,应该将应用程序部署到现有正在运行的容器中。在需要不断部署和调试的开发阶段,可能确实如此;但对于 QA 和生产的持续交付 (CD) 渠道,应用程序应当是镜像的一部分。切记:容器转瞬即逝。

3.不要创建大尺寸镜像

大尺寸的镜像难以分配。请确保仅使用必需文件和库来运行应用程序。不要安装不必要的数据包,也不要运行“更新”(yum update),这些操作会把大量文件下载到新的镜像层。

4.不要使用单层镜像

为了有效利用多层文件系统,请始终为操作系统创建属于自己的基本镜像层,然后为用户名定义创建一个层,为运行时安装创建一个层,为配置创建一个层,最后再为应用程序创建一个层。这样,重新创建、管理和分配镜像就会容易些。

5.不要从正在运行的容器中创建镜像

换句话说,不要使用"docker commit"命令来创建镜像。这一镜像创建方法不可复制,因此应完全避免使用。请始终使用 Dockerfile 或其他任何可完全复制的 S21(从源代码到镜像)方法,如此一来,如果存储在源代码控制存储库 (GIT) 中,就可以跟踪 Dockerfile 的变更情况。

6.不要只使用“最新版”标签

最新版标签就像 Maven 用户的“快照”(SNAPSHOT) 一样。容器具有多层文件系统这一基本特征,所以我们鼓励使用标签。相信谁也不愿意在构建了几个月的镜像后,突然发现应用程序因为父层(即 Dockerfile 中的 FROM)被新版本取代而无法运行(新版本无法向后兼容或从构建缓存中检索的“最新“版有误)这样的意外吧?在生产过程中部署容器时也应避免使用”最新版“标签,这是因为无法跟踪当前运行的镜像版本。

7.不要在单个容器中运行一个以上进程

容器只运行一个进程(HTTP 守护进程、应用程序服务器、数据库)时效果最佳,但如果运行一个以上进程,在管理和检索日志以及单独更新进程时就会遇到很多麻烦。

8.不要在镜像中存储证书及使用环境变量。

不要在镜像中对任何用户名/密码进行硬编码操作。请使用环境变量从容器外部检索信息。Postgres 镜像就是这一原理的极佳诠释。

9.不要以 root 权限运行进程

“默认情况下,Docker 容器以 root 用户权限运行。(……)随着 Docker 技术日趋成熟,能够使用的安全默认选项越来越多。目前,要求 root 对其他用户来说较为危险,另外,不是所有环境都能够使用 root。镜像应使用 USER 指令来为容器的运行指定非 root 用户。”(摘自《Docker 镜像作者指南》(Guidance for Docker Image Authors))

10.不要依赖 IP 地址

每个容器都有自己的内部 IP 地址,如果启动然后停止容器,内部 IP 地址可能会发生变化。如果你的应用程序或微服务需要和另一个容器进行通信,请使用环境变量在容器之间传递相应的主机名和端口。

11.监控容器

Docker 监控已经越来越受到开发者们的重视,实时监控 Docker 的方法,这里推荐 Cloudinsight。 不同于一些需要自写脚本的监控手段,Cloudinsight 作为一家免费的 SaaS 服务,能够一键监控 Docker,且拥有很棒的可视化界面。除此之外,Cloudinsight 还支持多种操作系统、数据库等的监控,能够一体化展示所有被监控的系统基础组件的性能数据。

遵守这十一条,你就是 Docker 高手了!

原文地址:https://blog.51cto.com/13954634/2419847

时间: 2024-10-30 07:40:55

遵守这十一条,你就是 Docker 高手了的相关文章

[Effective Java 读书笔记] 第三章类和接口 第二十-二十一条

第二十条 用函数对象表示策略 函数指针(JAVA的函数指针,是指使用对象的引用来作为参数,传递给另一个对象的方法)主要用来实现策略模式,为了在JAVA中实现这种模式,要申明一个接口来表示该策略,并为每个具体策略申明一个实现了该接口的类. 如果这个策略只被执行一次,使用匿名类,如果重复使用,则通常实现为私有的静态成员类,并通过共有的静态final域导出(最后一个例子),其类型为该策略接口. 第二十一条 优先考虑静态成员类 嵌套类主要有四种:静态成员类,非静态成员类,匿名类,局部类 静态成员类,一般

[Effective Java 读书笔记] 第三章 对所有对象都通用的方法 第十---十一条

第十条 始终覆盖toString() toString的实现可以使类使用起来更加舒适,在执行println等方法时打印出定制信息. 一单实现了自己的toString,指定输出的固定格式,在方法的文档说明中应该做好注释说明! 第十一条 谨慎覆盖clone

justinmind夜话:数据母板系列视频教程之原型设计二十一条军规

案例描述:使用数据母板实现原型设计二十一条军规 知识点: 数据母板 效果图: 本站在线效果预览:(原型文件) 原型下载地址:数据母板原型设计二十一条军规 .vp  数据母板原型设计二十一条军规.html 在线视频: 实现步骤:

程矢Axure夜话:中继器系列视频教程之中继器原型设计二十一条军规

程矢Axure夜话:中继器系列视频教程之中继器原型设计二十一条军规 案例描述:中继器实现原型设计二十一条军规 知识点: 中继器分页 效果图: 在线效果预览: AxShare在线效果预览: 原型下载地址:中继器原型设计二十一条军规 .rp 在线视频: 实现步骤: 更新中-..

(转)搞定DC/DC电源转换方案设计,必看金律十一条

[导读] 搞嵌入式的工程师们往往把单片机.ARM.DSP.FPGA搞的得心应手,而一旦进行系统设计,到了给电源系统供电,虽然也能让其精心设计的程序运行起来,但对于新手来说,有时可能效率低下,往往还有供电电流不足或过大引起这样那样的问题,本文十大金律轻松搞定DCDC电源转换电路设计. 关键词:DC/DC 搞嵌入式的工程师们往往把单片机.ARM.DSP.FPGA搞的得心应手,而一旦进行系统设计,到了给电源系统供电,虽然也能让其精心设计的程序运行起来,但对于新手来说,有时可能效率低下,往往还有供电电流

7条命令在docker中部署Mesos集群

7条命令在docker中部署Mesos集群 所有使用的Docker容器构建文件是有也.您可以在本地构建每个容器或只使用位于Docker Hub预构建的容器.下面的命令会自动下载所需的预建的容器为您服务.ZooKeeper?-?https://registry.hub.docker.com/u/garland/zookeeper/Meso Master?-?https://registry.hub.docker.com/u/garland/mesosphere-docker-mesos-maste

我所遵守的11条数据库设计准则

前言:作者Shivprasad koirala,前微软ASP/ASP.NET的MVC工程师,现于印度任CEO职位.学生初次翻译,如有不妥,不吝赐教. 简介 在你开始阅读这篇文章之前,我要先告诉你我不算是数据库设计方面的什么大师.下面的11条准则,是我从项目.从我自身的经验和我自己的理解和学习中得来的.我个人认为在数据库设计方面运用这些准则能使我受益匪浅.我也欢迎任何批评与指点. 我之所以要写这么一篇详尽的文章,是因为,许多开发者设计数据库的时候十分信奉"三个范式"(译者注:而没有结合实

一个商人应遵守的22条规矩

1.坚持看CCTV-1新闻联播. 要想把握经济命脉,必须关注政局,新闻联播图文并茂,有声有色,着实为中国商人的最佳晴雨表:你可以不看财经报道,也可以不看焦点访谈,如果你不是做石油和外汇的,甚至你都可以不去管类似9.11事件和中东局势. 2.不要轻易相信合约或合同 哪怕合约让你的律师看过了,公证处公证了都不要轻易相信,甚至当你的客户把钱已经汇入你指定的账户以后你都必须确认,这笔钱你能不能拿出来,能不能动,而合约以外的涉及到利益冲突的任何口头承诺与解释你都必须当他是放屁,无论香还是臭,在对方兑现承诺

所有程序员都应该遵守的 11 条规则

看到一篇翻译很好的博文,在这分享下 1: 技术是你获取解决方案的方法,而不是解决方案本身 我们可以得意忘形地使用最新的JavaScript框架-嗯哼,Angular-IoC 容器,编程语言,甚至操作系统.但作为一个程序员,所有这些东西并不是问题真正的解决方案,相反,它们只是帮助我们解决问题的简单工具. 在面对那些我们喜欢或是当前非常流行的特殊技术时,我们必须非常小心,而不是变得过于疯狂.以免步入这样一个险境:仅仅因为我们手里拿了一把闪闪发亮的锤子,就把所有的问题都看作钉子. 2: 对代码而言,“