使用Docker容器的十大误区

对于用户来说,可能一开始在不了解的情况下会对容器报以拒绝的态度,但是在尝到容器的甜头、体验到它的强大性能之后,相信大家最终是无法抵挡其魅力的。容器技术能够解决IT业目前面临的很多问题,而且优势也很明显,比如说:

1、容器具有不可变的特性。
容器将操作系统、程序库、配置文件、路径和应用程序打包在一起运行,也就是说,我们在做QA测试的时候整个镜像是什么样,投入到产品环境以后就是什么样,其性能不会有任何差距。
2、容器都非常轻量。
单个容器的内存占用很小,不像其他进程动辄占用上万MB的内存空间,容器只会给主进程分配内存,可以有效降低系统开销。
3、容器的速度更快。
虚拟机的启动时间一般都在分钟级,容器的启动速度可以达到秒级,启动容器就跟启动linux进程一样快。

虽然容器的好处这么多,但是有很多用户还不了解,还认为容器跟一般的虚拟机没什么差别。实际上,容器是可销毁的,这是容器跟虚拟机之间最大的差别。容器的存在周期很短,只要用户使用完毕,就可以立即销毁容器,所以用“朝生暮死”来形容也不算过分。
在对容器进行使用和维护时,我们应该充分利用容器的这个特性,不要再把容器当成一般的虚拟机来看待,不然就真的大材小用了。在实际使用过程中,为了最大限度地发挥容器的优势,有些错误还是少犯为妙。我总结出了下面几个要点供大家参考,在跑容器的时候大家最好还是尽量遵照这几条原则:

  1. 不要将数据储存在容器中
    容器随时都可以停止、销毁或迁移,比方说,一个容器里运行的应用版本是1.0,我们分分钟就可以把这个应用升级到1.1,同时还不会对数据造成任何影响。所以如果用户想要存数据的话,最好是用数据卷来存储。不过在用卷存数据的时候大家还是要注意一点,如果有两个容器共用一个数据卷,都往里面写数据的话,是有可能造成程序崩溃的。我们在设计应用程序的时候应该考虑到这一点,为保万无一失,应用程序应该具备特定的机制,以确保在往共享数据存储区写入数据的时候不会出错。
  2. 不要把应用程序分块交付。
    在部分用户看来,容器跟虚拟机没什么两样,所以有些人往往会把应用程序部署到当前运行的若干个容器中。这种做法在开发阶段没有太大的问题,因为做开发的时候我们会很频繁地进行部署和调试,但是到了持续交付(CD)阶段,下一步就是QA测试和正式投产了,这种做法就不太适合了。在这一阶段,我们应该充分考虑到容器的不可变特性,最好是将应用程序打包到一个镜像中交付。
  3. 不要把镜像体积建得很大。
    镜像越大,就越难发布。镜像中只包含必要的文件和library就可以了,能让应用或者进程运行起来就行。千万不要在镜像中安装些没必要的东西,在构建镜像的时候要避免使用yum这种update命令,免得系统自动下载很多不相干的文件到新镜像层中。
  4. 建镜像的时候不要只建一层。
    大家都知道,Docker的文件系统是分层的,在建镜像的时候我们应该这么建,将操作系统单独建一层,作为基础镜像,然后用户名定义文件、运行时安装环境、配置文件都要分别建一层镜像,最后才是应用镜像层。这么做的话,我们以后重建、管理以及发布镜像的时候就要轻省得多了。
  5. 不要把本地运行的容器转成镜像。
    换句话说就是创建镜像的时候不要用“docker commit”命令来创建。用这种办法建镜像是完全不可取的,因为这种办法是不能重复的。我们在建镜像的时候应该从Dockerfile创建,或者用其他S2I(从源文件构建镜像)的方式来创建,这样镜像才具有可再生性,而且如果我们把镜像存在git之类提供版本控制能的系统里的话,还可以对Dockerfile的改动进行跟踪。
  6. 给镜像打tag的时候不要只打“latest”。
    latest其实就相当于Maven里头的“快照”。因为容器的文件系统是分层的,我们最好是给镜像多打几个tag。如果只有latest的话,可能过段时间我们再来运行应用程序的时候就发现程序运行不起来了,因为应用的父层(就是Dockerfile里面的跟在FROM命令后面的那一层)被更新的版本覆盖了,而新版本又不能向下兼容,还有可能就是从build cache里面取镜像的时候取到了错的“latest”镜像。在产品环境中部署容器的时候也要避免使用latest,不然容易造成无法跟踪记录镜像版本的问题。
  7. 不要在单个容器里面运行多个进程。
    容器本来就是用来运行单个应用的(比如http daemon,应用服务器,数据库等等),如果我们非要在一个容器里跑几个应用,那么在管理每个应用进程、存取日志、升级应用的时候就会很麻烦。
    8)不要把认证口令存在镜像中,用环境变量比较好。
    如果我们把用户名/密码值对存在镜像里的话,就只有采用硬编码的方式来挨个处理,估计这种麻烦事没人愿意去干。所以我们最好是用环境变量的方从容器外部获取此类信息。
  8. 不要用root用户的角色来运行进程。
    Docker容器默认是以root权限运行的。不过随着技术的成熟,docker也会提供安全性更高的默认操作选项。在现有技术条件下,以root权限运行会对其他应用带来安全隐患,而且在有些运行环境下root权限是取不到的,所以我们在跑容器的时候应该用USER命令来指定非root权限的用户。
  9. 不要过分依赖IP地址。
    每个容器都有一个内部IP,这个IP不是固定的,我们启动容器或者停止容器的时候IP都会变。如果我们要让应用或者微服务模块在容器之间进行通信的话,正确的做法是通过设置环境变量来传递主机名和端口号。

使用Docker容器的十大误区相关推荐

  1. ad16自动布线设置规则_PCB设计的十大误区——那些年,我们一起遵守的规则

    还是上一期<那些年,我们一起"深陷"的PCB设计十大误区>的那张PPT哈,从上面这张PPT,大家看到了什么? 平常大家耳熟能详的规则来自于什么地方? 公司前辈告诉你的设 ...

  2. 百度竞价推广的十大误区

    当前中小企业在互联网上的飞速发展,不可否认的是百度竞价推广的确给到了不少的帮助.而提到百度竞价,听说最多的是如何创建账户.撰写创意.挑选关键词等,但企业有时候把基础工作都做到位了,也依然容易陷入一些误 ...

  3. 购买重疾险的十大误区(建议收藏)

    学姐在给很多朋友回答问题时,发现他们在买重大疾病保险的时候存在不少的误区,今天学姐给大家分享一下,购买重疾险时最常见的十大误区! 文章有些长,但干货满满,建议收藏.接下来就跟着学姐一起看看吧! &qu ...

  4. 使用防晒霜的十大误区

    使用防晒霜的十大误区       误区一:按以前肤质选用护肤品,夏季由于油脂分泌的不同,肤质会有所改变,应再做一次肤质检测.      误区二:SPF值越高防晒效果越好,SPF值,亦即防晒系数,是这样 ...

  5. PCB设计十大误区-绕不完的等长

    来源:一博自媒体 时间:2015-8-5 类别:微信自媒体 作者:吴均     一博科技高速先生团队队长 PCB设计十大误区-绕不完的等长(一) 1.关于等长 第一次听到"绕等长工程师&qu ...

  6. CRS下“全球反避税”十大误区

    链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. CRS下"全球反避税"十大误区 Common Misunderstandings About Ant ...

  7. 朱近之:关于云计算的十大误区

    ChinaByte报道 云计算无疑是目前最大的热点之一,神州大地"云蒸霞蔚",各地都在大张旗鼓建设云计算基地:×××在16个城市推进国家创新型城市试点工作,并选择了 北京.上海.深 ...

  8. IBM朱近之:十大误区蒙蔽了云计算

    本文讲的是IBM朱近之:十大误区蒙蔽了云计算,[IT168 资讯]云计算既不是网格计算,也不是虚拟化,而是一个由多种产品和服务集成起来的端到端的解决方案. 云计算就是SaaS?云计算只适用于中小企业? ...

  9. 商业地产招商的十大误区(转)

    商业地产招商的十大误区(转) 2011年11月25日 很多商业地产开发商来讲,他们非常关注商业的招商工作,但是招商就是一招了之了吗?招商是选大牌子就可以了吗?招商之后我们还要做什么呢?这一系列问题都是 ...

最新文章

  1. 最新!NLG顶会INLG2021最佳长论文出炉!一作华人学生代表出席今晚INLG
  2. 安装fiddler做代理,本地开发手机端看效果
  3. 面了一把Java P6 岗,一个问题就干趴下了!
  4. win10+tensorflow faster-RCNN 训练自己的数据集
  5. oracle中or会使索引,为何查询条件中多了 OR 选项,索引就走全扫描?
  6. Qt中QTableWidget用法总结
  7. windows-server-2012R2离线中文语言包安装
  8. 混过了2015,依然不知道你要什么?
  9. 走近源码:Redis的启动过程
  10. php创建可读文件,php – 我需要一个人类可读的,可解析的文件格式
  11. python 爬虫抓取网页数据导出excel_如何用excel实现网页爬虫
  12. 计算机软考网络工程师中级多少分过,计算机软考网络工程师中级多少分过
  13. android软件安装到平板,新人看过来 安卓平板装机必备软件推荐
  14. AHCI、RAID、IDE三种硬盘模式优缺点对比
  15. 计算机信息处理技术的易混淆知识点,【考试经验】计算机等级考试二级VisualFoxPro笔试易混淆的知识点...
  16. 好用的滚动式截图工具picpick
  17. springboot+vue解决跨域问题
  18. python文字游戏循环3次_Python寻宝游戏中的无限循环
  19. Android 应用A开启应用B
  20. 《C语言内涵教程》前言

热门文章

  1. CodeForces - 197A Plate Game(博弈+思维)
  2. POJ - 3342 Party at Hali-Bula(树形dp)
  3. 安卓入门系列-07常用UI控件(长文)
  4. 关于多线程的一点感想
  5. GetLongPathName和GetShortPathName函数
  6. CSS 盒子的边距塌陷
  7. Linux 写时复制机制原理
  8. docker 容器基础技术
  9. 音视频技术开发周刊 | 176
  10. 视频生产环境下的音视频解决方案