阅读更多

2顶
0踩

行业应用

转载新闻 使用Docker容器应该避免的10个事情

2016-03-03 11:11 by 副主编 mengyidan1988 评论(0) 有6371人浏览
当你最后投入容器的怀抱,发现它能解决很多问题,而且还具有众多的优点:

1.第一:它是不可变的 – 操作系统,库版本,配置,文件夹和应用都是一样的。您可以使用通过相同QA测试的镜像,使产品具有相同的表现。
2.第二:它是轻量级的 – 容器的内存占用非常小。不需要几百几千MB,它只要对主进程分配内存再加上几十MB。
3.第三:它很快速 – 启动一个容器与启动一个单进程一样快。不需要几分钟,您可以在几秒钟内启动一个全新的容器。
但是,许多用户依然像对待典型的虚拟机那样对待容器。但是他们都忘记了除了与虚拟机相似的部分,容器还有一个很大的优点:它是一次性的。

容器的 准则 :

“容器是临时的”

这个特性“本身”促使用户改变他们关于使用和管理容器的习惯;我将会向您解释在容器中不应该做这些事,以确保最大地发挥容器的作用。

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地址,如果你启动并停止它地址可能会变化。如果你的应用或微服务需要与其他容器通讯,使用任何命名与(或者)环境变量来从一个容器传递合适信息到另一个。

来自:开源中国
  • 大小: 32.8 KB
  • 大小: 2.2 KB
来自: oschina
2
0
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 落落 Oracle SQL优化与改写培训教程

    字典式写作手法:不讲具体语法,没有简单知识堆砌,直接以案例形式讲技巧与案例 大量优化实战方法:将主要SQL优化点一一剖析,分享大量SQL优化的实际工作经验 50余改写调优案例:覆盖大多数DBA日常工作场景,具有相当大的实用价值 技巧+案例:可以作为DBA的参考手册,也可以作为开发人员编写SQL的速查字典

  • sql优化的15个小技巧(必知五颗星),面试说出七八个就有了

    目录 前言 1 避免使用select * 2 用union all代替union 3 小表驱动大表 4 批量操作 5 多用limit 6 in中值太多 7 增量查询 8 高效的分页 9 用连接查询代替子查询 10 join的表不宜过多 11 join时要注意 12 控制索引的数量 13 选择合理的字段类型 14 提升group by的效率 15 索引优化 前言 sql优化是一个大家都比较关注的热门话题,无论你在面试,还是工作中,都很有可能会遇到。 如果某天你负责的某

  • 【SQL入门】最全SQL基础知识总结(理论+举例+建议)

    数字型(int,tinyint,decimal,float等)、日期和时间类型(Date,TIME等)、字符串类型(char,varchar等)。:于1992年发布,这个版本通过引入新的特性进一步扩展了SQL语言的能力,包括多表连接、子查询、视图和存储过程等,是目前获得最广泛支持的版本。:为表设置适当的表别名,不仅可以减少SQL语句的复杂度,也能尽量避免出错,让SQL语句更加的直观、易理解。:在1989年发布,这个版本引入了更多的特性,包括排序、分组和连接操作的支持。

  • 史上最全SQL基础知识总结(理论+举例)

    SQL基础知识一、SQL 概述1、什么是 SQL2、语法要求二、SQL 分类三、DDL(Data Definition Language):数据定义语言基本操作1.操作数据库2.数据类型3.操作表四、DML(Data Manipulation Language):数据操作语言1.插入数据2.修改数据3.删除数据五、DCL(Data Control Language):数据控制语言1.创建用户2.给用户授权3.撤销授权4.查看用户权限5.删除用户6.修改用户密码(以root身份)六、DQL(Data Quer

  • SQL优化

    如果需要使用函数,请确保使用的函数可以使用索引,并且尽可能使用简单的函数。如果需要使用 OR 运算符,请确保使用的条件可以使用索引,并尽可能使用简单的条件。尽量避免使用通配符:使用LIKE语句进行模糊查询时,尽量避免使用通配符,特别是在LIKE语句中使用'%xxx%'这种模糊查询,因为它会导致全表扫描,降低查询效率。例如,如果使用函数对列进行操作,则优化器无法使用该列的索引。尽量避免在搜索中使用通配符,特别是在LIKE语句中使用'%xxx%'这样的模糊查询,因为这种查询会导致全表扫描,降低查询效率。

  • SQL性能优化详解,值得收藏

    hello,大家好,我是张张,「架构精进之路」公号作者。很多朋友经常会遇到如下情况:在做数据统计分析时,分析两分钟,跑数两小时......Web开发时候,通常的性能瓶颈,主要出现在数据查询时候.......在使用SQL过程中不仅要关注数据结果,同样要注意SQL语句的执行效率。本文涉及三大部分:1、SQL介绍2、SQL优化方法3、SQL优化实例1、MySQL的基本架构1)MySQL的基础架构图左边...

  • 【SQL优化】高质量SQL的建议

    查询 SQL 尽量不要使用 select *,而是 select 具体字段 反例子: select * from employee; 正例子: select id,name from employee; 理由如下: 只取需要的字段,节省资源、减少网络开销。 select * 进行查询时,很可能就不会使用到覆盖索引了,就会造成回表查询。 如果知道查询结果只有一条或者只要最大/最小一条记录,建议用 l...

  • 巧用这19条MySQL优化,效率至少提高3倍

    本文我们来谈谈项目中常用的MySQL优化方法,共19条,具体如下: 1、EXPLAIN 做MySQL优化,我们要善用EXPLAIN查看SQL执行计划。 下面来个简单的示例,标注(1、2、3、4、5)我们要重点关注的数据: type列,连接类型。一个好的SQL语句至少要达到range级别。杜绝出现all级别。 key列,使用到的索引名。如果没有选择索引,...

  • SQL优化查询

    优化查询的方法 1.使用索引 尽量避免全表扫描,首先应考虑在 where 及 order by ,group by 涉及的列上建立索引。 2.优化SQL语句 explain查看SQL语句执行效果 可以帮助选择更好的索引和优化查询语句, 写出更好的优化语句。 通常我们可以对比较复杂的尤其是涉及到多表的 SELECT 语句, 把关键字 EXPLAIN 加到前面, 查看执行计划。例如: ...

  • [数据库汇总]-- 常见sql语句效率优化方式

    一、“like '%%'”的优化,建议使用instr(?,?)效率高 单表有超大数量级的数 1、oracle和mysql中 如果有索引的情况下,使用like 'aa%'或者like '%aa'效率较高,因为如果是like "%aa%"那么会导致全表扫描!效率非常低! 如果没有索引,那么最好使用instr(stpm,字符串)函数解决问题 举例: select  * from xslsb ...

  • SQL学习笔记1

    * 以下内容是我在学习SQL(http://www.w3school.com.cn/sql/index.asp)的时候的学习笔记 * 学习时使用的数据库软件是MySQL数据库可视化工具SQLyogEnt * 如果大家有发现什么不对的地方请告诉我。谢啦!!☆⌒(*^-゜)v * 在这里需要注意的是,和SqlServer相比MySQL不支持事务处理,没有视图,没有存储过程和触发器,没有数...

  • sql语句的优化

    set statistics io on select count(*) from zy_inactpatientset statistics io off 返回表的空间使用情况sp_spaceused zy_inactpatient返回统计的执行时间set statistics time on set statistics time on 用文本的方式显示执行计划set showplan

  • 高效sql性能优化极简教程

    一,sql性能优化基础方法论对于功能,我们可能知道必须改进什么;但对于性能问题,有时我们可能无从下手。其实,任何计算机应用系统最终队可以归结为:cpu消耗内存使用对磁盘,网络或其他I/O设备的输入/输出(I/O)操作。但我们遇到性能问题时,要判断的第一点就是“在这三种资源中,是否有哪一种资源达到了有问题的程度”,因为这一点能指导我们搞清楚“需要优化重构什么”和“如何优化重构它”二,sql调优领域应

  • 好程序员大数据培训分享SQL优化方案精解十则

    好程序员大数据培训分享SQL优化方案精解十则:一、避免进行null判断。 应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,这里最好不要给数据库留NULL,尽可能的使用 NOT NULL填充数据库。 备注、描述、评论之类的可以设置为 NULL,最好不要使用NULL。不要错误的认为NULL 不需要空间,如char(100) 型,在字段建立时,空间就固定了。不管是否插入值(NULL也包含在内),都是占用 100个字符的空间的,如果是varchar这样的变长字

  • SQL的优化和技巧

    1----加载每个JDBC模块都是通过Class.forName()来加载Drvier驱动,获取连接从而进行数据库操作.通过以下方法加载驱动类:通过以下方法建立连接:创建执行SQL的语句:数据库操作模板代码:-----创建----查询:-----更新----删除SQL注入问题修改statement为PrepareStatement():数据库对应基本数据类型:事务属性:事务:将多个数据库操作归类为...

  • SQL优化常用的几种方法

    一、背景 在使用JPA时常常出现业务复杂不方便使用名称解析的情况,这时可采用原生SQL来实现,SQL在请求并发数量较多时效率会影响系统的整体效率,在此记录一下sql优化的常用几种方法。 二、优化方法 1、对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 2、应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。 3、应尽量避免在 where 子句...

  • 常见的SQL优化

    SQL优化: 个人理解:主要是对查询的优化。对于sql的优化主要就是下面几个方面的优化, 1.避免全表扫描 2.避免索引失效 3.避免排序,不能避免,尽量选择索引排序 4.避免查询不必要的字段 5.避免临时表的创建,删除 6.... 一.插入数据 1.导入大批量数据 这个需要先关闭索引,插入数据后再打开索引。 1.1.针对MyISAM引擎可以通过以下方式提高导入数据...

  • sql优化 -----注意编写SQL的方式

    下面是我总结的一些SQL常见的优化方法,每个案例都简单易懂,在开发过程中可以作为参考:1.不使用子查询例:SELECT * FROM t1 WHERE id (SELECT id FROM t2 WHERE name='888');子查询在MySQL5.5版本里,内部执行计划器是这样执行的:先查外表再匹配内表,而不是先查内表t2,当外表的数据很大时,查询速度会非常慢。在MariaDB10/MySQ...

  • 【mysql 】mysql 获取排列序号

    在进入正题之前先来了解一个mysql中的小知识点:①   := 与 = 的区别:=   赋值的意思。在set update select 中表示赋值的意思,用的比较少一般都用=,但是在用变量实现行号时(比如本文标题获取排列序号),一定要用:=。 =   等于的意思,只有当set 和 update时,和:=的意思是一样的,表示赋值,其余情况都是等于的意思。② 用户变量 @@rank 是对一个叫ran...

Global site tag (gtag.js) - Google Analytics