设为首页 收藏本站
查看: 1174|回复: 0

[经验分享] Docker容器中需要避免的十种常见误区

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-3-10 17:25:02 | 显示全部楼层 |阅读模式
Docker容器的三大优势:
  • 第一:具备恒定特性–操作系统、库版本、配置、文件夹以及应用程序全部涵盖在内。大家可以将质量检查流程中使用的测试镜像原封不动地引入生产环境当中。
  • 第二:具备轻量化特性–容器的体积非常小巧。相较于动辄成百上千MB的操作系统,它只需要配备主进程所必需的内存外加数十MB额外容量。
  • 第三:速度惊人–大家可以享受等同于单一进程的容器启动速度。相较于长达数分钟的传统负载启动时长,现在我们完全能够在几秒钟内启动一套新容器。
    不过很多用户仍然在以对待典型虚拟机的方式审视容器,在这种情况下他们往往没办法发挥容器技术所蕴含的各类优势。因此我们需要再次强调一项基本原则:容器具备一次性特征。

容器座右铭: “容器属于临时性(一次性)系统。”
11.jpg 这一特性的存在要求用户转变既有思路,选择更为合适的方针处理并管理容器。接下来,我会通过十种常见误区帮助大家了解发挥容器优势的合理途径:
1)不要将数据存放在容器内–容器系统可随时进行停止、销毁或者替换。运行在容器环境下的应用程序1.0版本应该可以轻松更换为1.1版本,且不会影响或者破坏相关数据。考虑到这一点,如果大家需要保存数据,请将其存储在存储卷当中;不过需要注意的是,如果有两套容器同时指向同一存储卷,则可能引发故障。大家必须确保自己的应用程序使用面向共享式数据存储机制的写入设计方案。
2)不要以拆分方式进行应用程序发布–有些朋友仍然带着虚拟机思路审视容器。他们大多认为自己应该将应用程序部署至当前正在运行的容器当中。然而,这种作法只适用于开发阶段,从而实现应用开发所必需的持续部署与调试;一旦转移至质量检查与生产环境下的持续部署流程,应用程序则必须作为镜像本身的组成部分。请记住:容器具有恒定特性。
3)不要创建大型镜像–体积过大的镜像会加大其发布难度。大家需要确保在镜像中只保留运行应用程序/进程所必需的文件与库。不要安装任何非必要软件包或者在构建过程中运行“更新”(yum update)。
4)不要使用单层镜像–为了更为合理地使用分层文件系统,请大家务必为操作系统、安装软件、配置以及应用程序分别创建独立层。这不仅能够简化镜像的创建与管理工作,亦能降低分发难度。
5) 不要利用运行中的容器创建镜像–换言之,不要使用“docker commit”创建镜像。以这种方式创建的镜像不具备再生产能力且无法实现版本控制性,因此绝对不值得提倡。相反,使用Dockerfile或者任何S2I(即源到镜像)方法能够有效确保整体再生产能力。
6)不要只使用“最新”标签–最新标签类似于Maven用户所熟悉的“SNAPSHOT”。各标签只适合在分层文件系统当中使用。如果大家在镜像构建完成的两个月之后,意外发现自己的应用程序由于顶层版本替换而造成向下兼容性缺失或者build缓存“最新”版本无法运行,那么无疑会造成巨大的麻烦。总体来讲,在向生产环境中部署容器时,必须避免使用最新标签。
7)不要在单一容器内运行多个进程–容器系统非常适合运行单一进程(例如http域名、应用程序服务器以及数据库等等),但如果大家在容器内使用多个进程,则可能很难对其分别进行管理、获取日志记录以及更新。
8)不要在镜像内保存凭证,建议使用环境变量–大家绝对不要以硬编码形式在镜像中保存任何用户名/密码。相反,我们应当利用环境变量从容器之外获取此类信息。在这方面,最完美的示例就是postgres镜像。
9)以非root用户运行进程– “默认情况下,Docker容器以root方式运行。随着Docker的不断发展成熟,更多更为安全的默认选项亦陆续出现。就目前而言,使用root权限仍有可能造成安全隐患且缺乏对全部环境的良好适应效果。大家的镜像应当使用USER指令将容器指定为非root用户角色”。(来自Docker镜像创建者指南)
10)不要依赖于IP地址–每套容器都拥有自己的内部IP地址,而容器的每次启动与停止都有可能导致IP地址发生改变。如果应用程序或者微服务需要与其它容器通信,那么请使用能够将相关信息由此容器传递至彼容器的名称与/或环境变量。
Docker技术作为当前最火爆的技术,仍在一个落地和普及的过程中。大家在使用过程中应当抛开传统的观念和想法,避免走入误区、绕进弯路,在技术转型的过程中先人一步。



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-189110-1-1.html 上篇帖子: docker新建自定义网桥,实现不同主机容器互联 下篇帖子: Docker网络详解及pipework源码解读与实践
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表