【From】http://www.maiziedu.com/article/23592/

之前我写了一篇文章(作为ruby程序猿, 为什么非得用Docker?),里面详细讲了他的优点,相信大家都有所了解,但是即使它有这么多优点,我们也必须避免在容器中做以下的事,以确保容器最大限度的发挥作用。

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

容器可能被停止,销毁,或替换。一个运行在容器中的程序版本1.0,应该很容易被1.1的版本替换且不影响或损失数据。有鉴于此,如果你需要存储数据,请存在卷中,并且注意如果两个容器在同一个卷上写数据会导致崩溃。确保你的应用被设计成在共享数据存储上写入。

  2.不要将你的应用发布两份 

一些人将容器视为虚拟机。他们中的大多数倾向于认为他们应该在现有的运行容器里发布自己的应用。在开发阶段这样是对的,此时你需要不断地部署与调试;但对于质量保证与生产中的一个连续部署的管道,你的应用本该成为镜像的一部分。记住:容器应该保持不变。

  3. 不要创建超大镜像 

一个超大镜像只会难以分发。确保你仅有运行你应用/进程的必需的文件和库。不要安装不必要的包或在创建中运行更新(yum更新)。

   4.不要使用单层镜像 

要对分层文件系统有更合理的使用,始终为你的操作系统创建你自己的基础镜像层,另外一层为安全和用户定义,一层为库的安装,一层为配置,最后一层为应用。这将易于重建和管理一个镜像,也易于分发。

  5. 不要为运行中的容器创建镜像 

换言之,不要使用“docker commit”命令来创建镜像。这种创建镜像的方法是不可重现的也不能版本化,应该彻底避免。始终使用Dockerfile或任何其他的可完全重现的S2I(源至镜像)方法。

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

最新标签就像Maven用户的“快照”。标签是被鼓励使用的,尤其是当你有一个分层的文件系统。你总不希望当你2个月之后创建镜像时,惊讶地发现你的应用无法运行,因为最顶的分层被非向后兼容的新版本替换,或者创建缓存中有一个错误的“最新”版本。在生产中部署容器时应避免使用最新。

   7.不要在单一容器中运行超过一个进程 

容器能完美地运行单个进程(http守护进程,应用服务器,数据库),但是如果你不止有一个进程,管理、获取日志、独立更新都会遇到麻烦。

   8.不要在镜像中存储凭据。使用环境变量

不要将镜像中的任何用户名/密码写死。使用环境变量来从容器外部获取此信息。有一个不错的例子是postgres镜像。

   9.使用非root用户运行进程

“docker容器默认以root运行。(…)随着docker的成熟,更多的安全默认选项变得可用。现如今,请求root对于其他人是危险的,可能无法在所有环境中可用。你的镜像应该使用USER指令来指令容器的一个非root用户来运行。”(来自 Docker镜像作者指南)

  10. 不要依赖IP地址

每个容器都有自己的内部IP地址,如果你启动并停止它地址可能会变化。如果你的应用或微服务需要与其他容器通讯,使用任何命名与(或者)环境变量来从一个容器传递合适信息到另一个。

转载于:https://www.cnblogs.com/pekkle/p/8620769.html

[转] 使用Docker容器,这些错误千万别犯相关推荐

  1. 使用Docker容器,这些错误千万别犯

    1.不要在容器中存储数据 容器可能被停止,销毁,或替换.一个运行在容器中的程序版本1.0,应该很容易被1.1的版本替换且不影响或损失数据.有鉴于此,如果你需要存储数据,请存在卷中,并且注意如果两个容器 ...

  2. docker容器时间错误解决方案

    docker 时间矫正 方法1 echo "Asia/shanghai" > /etc/timezone; 方法2 (推荐) 直接挂载的时候指定环境变量 (-e TZ=xxx ...

  3. 学习Docker容器时,错误bash: ping: command not found的解决方法

    问题描述: 学习Docker容器时,在容器内进行ping时出现错误,提示如下:bash: ping: command not found 解决方法: 直接安装即可,命令如下:apt-get insta ...

  4. docker容器中配置文件修改错误,导致容器无法启动

    docker容器中配置文件修改错误,导致容器无法启动 问题 在elasticsearch加入中文分词器ik时,在容器中配置修改错误,导致elasticsearch启动不了 解决方案 [root@blu ...

  5. 【docker】docker容器搭建分布式LNMP,附错误及解决方案

    文章目录 前言 一.架构/环境 二.搭建步骤 2.1 宿主机环境搭建 2.2 创建nginx容器 2.3 创建mysql容器 2.4 创建php容器 2.5 进入mysql容器进行授权 三.验证 四. ...

  6. 排行前1000的docker容器中,20%存在root帐户配置错误

    在Docker Hub门户中"最受欢迎的Docker容器"排名前1000的Docker容器中约有20%存在帐户错误配置的缺陷,在某些情况下,这些缺陷可能会使用户系统受到远程网络攻击 ...

  7. 解决docker容器因报错无法启动的问题,检查、修复容器错误并重启

    问题复现 使用: sudo docker ps -a 查看当前的docker容器: 我们想启动name为[docker-mongo]的这个容器,因此要执行 sudo docker start dock ...

  8. 记一次Docker容器中写出文件编码错误

    时间:2018-7-31 现象:项目在本地启动下载文件压缩后,没有出现乱码问题,但在docker容器中部署项目后,写出文件压缩后中文乱码 解决过程: 首先在代码中尝试了多种写出方法.因为有文件需要压缩 ...

  9. 使用Docker容器的十大误区

    使用Docker容器的十大误区 对于用户来说,可能一开始在不了解的情况下会对容器报以拒绝的态度,但是在尝到容器的甜头.体验到它的强大性能之后,相信大家最终是无法抵挡其魅力的.容器技术能够解决IT业目前 ...

最新文章

  1. web前端培训:CSS中单行文本溢出显示省略号的方法
  2. 报告 | 2017年云商业智能市场分析:云计算比大数据更重要
  3. 【Python】str转datetime与datetime计算
  4. 火狐浏览器mac_Firefox火狐浏览器73.0版本发布,有哪些期待已久的新功能?
  5. 现代计算机三大科学计算,基于三维重建过程中纹理映射问题的研究
  6. LwIP 之二 网络接口 netif(ethernetif.c、netif.c)
  7. c++如何打印一维数组首地址_C语言之二维数组和指针的结合
  8. java-commons-HttpClient超时设置setConnectionTimeout和setSoTimeout
  9. iou画 yolov3_专栏 | 【从零开始学习YOLOv3】4. YOLOv3中的参数进化
  10. 我花了一夜用数据结构给女朋友写个H5走迷宫游戏 | CSDN 博文精选
  11. 【pytorch】torch.nn.Identity()
  12. Ubuntu snap for 树莓派
  13. pytorch 中 torch.optim.Adam
  14. pythonrequests发送数据_使用Python爬虫库requests发送表单数据和JSON数据
  15. turbo编译码c语言,Turbo码的编译码原理及仿真.pdf
  16. 手机版支付宝转账截图生成器Q574651623
  17. 计算机英语论文摘要,★计算机英语论文摘要范文计算机英语论文摘要写(9页)-原创力文档...
  18. python画长方形并填充颜色_关于python使用cv画矩形并填充颜色同时填充文字
  19. delphi多线程TThread类介绍
  20. vue3项目使用prettier格式化代码

热门文章

  1. php数字两位小数_PHP保留两位小数的几种方法
  2. 努力一下,还是可以成为技术美术(TA)的
  3. 使用行动列表去创造简单且可扩展的游戏AI
  4. 分分合合分分,谷歌医疗走向大败退
  5. 上一局APP玩边画边猜,第1次见人使用道具,我的游戏体验上升了
  6. 【PHP7.2+】win10安装laravel(完整版,包含运行)
  7. 在linux命令下导出导入.sql文件的方法
  8. ORA-29786: SIHA attribute GET failed with error
  9. 加快mysql导入、导出速度
  10. 几种常见的RAID形式