想使用Docker容器?先看看这些注意事项

     Docker容器无疑是最近十年来最引人注目的技术之一,因为有了它,对我们思考设计、开发和运维软件的方式产生了非常有益的影响。

      但是就像每一个开发工具一样,为了充分利用这些工具,需要注意一些使用中问题,Docker容器也是如此。下面是您需要关注的一些地方:

一个进程,一个Docker容器

     每个Docker容器的核心都是一个进程,尽管每个Docker容器可以使用多个进程,但是这种方法不值得推荐。为了提高效率,每个容器应该只有一个特定的目标进程。其中一个非常重要的原因是如果只使用一个进程的话想在其他项目中迁移使用该Docker将变得容易很多。

    尽管在容器中运行多个进程在技术上是可行的,但是单进程体系结构具有显著的优势,具体说来:

  • 易扩展

      如果容器被隔离到一个单一的功能,水平调整容器会容易得多。 假设您需要另一个Tomcat容器,在其他地方迁移一个即可。但是,如果你的Tomcat容器也运行你的数据库服务,并且其它的数据也需要被迁移走,那么这就变得非常复杂。

  • 更好的复用行

       如果一个容器只有一个功能,容器可以容易地重新用于其他项目。

  • 易问题定位

       开发人员能够在本地环境下解决那些在生产中的单个组件出现的问题,而不是从整个应用程序环境中定位问题来解决。  


 使用磁盘进行数据存储

         在容器内部保存数据几乎没有什么用处,因为容器不断地被停止和销毁。无论什么时候需要存储数据,都要在磁盘上进行,因为磁盘可以在多个容器之间更安全地共享。磁盘是将数据存储在容器的可写层中的更好选择,因为使用磁盘不会增加容器的大小,并且磁盘的数据存在于给定容器的生命周期之外。


 容器通信

        每当一个Docker容器需要与另一个容器通信时,传递信息最好使用名称或环境变量。Docker容器当然也有IP地址,但是无论何时启动和停止容器,都是不会依赖IP地址的。


 以普通用户身份运行Docker

        默认情况下,Docker容器以root用户身份运行,众所周知,以root用户运行的容器完全可以控制主机系统。如果黑客访问容器内的“root”用户,他将获得对运行Docker的主机的root权限,为了避免这种情况,请始终以普通用户身份运行Docker容器。


 注意容器的体积

        选择一个容器的主要原因之一是它的体积小。但是,如果你把它做得更大,它的主要优势就没了。当您在群集中部署数千个容器时,如果需要容器相互通信并定期更新容器,这是一个非常严重的问题。

        所以需要确保只有所需的文件和库来运行对应的应用程序/进程。不要安装不必要的软件包或运行yum update等命令,将不需要的文件下载到新的映像层。

        打个比方:一个冰箱中是无法装下一个大型集装箱的。


 制定监测策略

        开发和部署Docker容器不是你的工作的结束。您需要持续监控已部署的容器以及整个系统的运行状况。选择合适的工具并制定一个策略来有效地监控您的Docker容器,以确保最短的停机时间,从而使客户满意。


 Docker容器的安全问题

       只要Docker容器在本地开发环境中运行,就没有安全问题。因为测试环境是与外部连接隔离的,是无法确定在外部是否完全的。当您的Docker镜像部署在生产环境中时,因为需要处理外部网络访问,安全性自然成为一个问题。为了预防这个问题,首先需要确保Docker容器所在的主机被修补了最新的安全更新,其次Docker容器中也更新了安全补丁。

原文:http://www.cnblogs.com/TestingOn/p/7878952.html


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/322812.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vs Code如何自定义设置一键代码补全

有时候是不是看到别人输入一个vue就能打印整个代码,感觉很神奇,本文就以vue为案例教你如何使用这种骚操作!!! 点击文件->首选项->用户代码片段 输入vue.json(如果没有则新建代码片段) &…

Realm发布Realm .NET,扩展支持.NET技术栈

继去年夏天Realm引入对.NET Core的支持,使开发者可以用C#来构建移动应用之后,Realm发布了Realm .NET。Realm .NET是一个可以让开发者更好地集成他们的.NET技术栈的新组件集。 其中一个组件,是针对.NET的Global Notifier,可以实现大…

居中对齐

自绝父相 现在有一个父盒子和一个子盒子 要想让子盒子相对父盒子居中很简单,在子盒子上加上属性即可 margin: 0 auto;如果说要变成水平垂直居中呢,加上两个auto?结果肯定是不行的 得这样 用到所谓得子绝父相 首先父亲要相对定位 然后儿子设置成这样 l…

IdentityServer4(10)- 添加对外部认证的支持之QQ登录

前言 前面我们提到过IdentityServer4是可以添加外部认证的,如果外部认证支持OAuth2,那么添加到IdentityServer4是非常简单的,在ASP.NET Core下提供了非常多的外部认证实现,比如Google,Facebook,Twitter&…

springboot 多数据源mybatis的两种整合方法

转载自 springboot-mybatis多数据源的两种整合方法 简介: 随着并发量的不断增加,显然单个数据库已经承受不了高并发带来的压力。一个项目使用多个数据库(无论是主从复制- - 读写分离还是分布式数据库结构)的重要性变得越来越明显…

项目实战+感慨

已经好久没写博客了,自从接触了项目以后,发现很难再挤出时间来写博客,大部分时间都是在关注项目的进展,以及查阅相关的资料。我想这也是很多程序员入职以后就很少写博客的原因。 前言 最近一段时间我接触了很多前端的东西&#x…

解决mybatis generator无法覆盖XML

转载自 解决mybatis generator无法覆盖XML 今天发现mybatis generator maven plugin在重复生成的时候xml文件只会merge&#xff0c;不会覆盖。 明明在pom.xml中配置了如下&#xff1a; <configuration><configurationFile>src/main/resources/mybatis/generato…

中间件中渲染Razor视图

前言 上一篇文章《ASP.NET Core 奇技淫巧&#xff08;1&#xff09;&#xff1a;中间件实现服务端静态化缓存》中介绍了中间件的使用方法、以及使用中间件实现服务端静态化缓存的功能。本系列文章取名“奇技淫巧”不是没道理的&#xff0c;因为这写技巧都是我最近在做的公司实际…

解决idea启动项目报错:Unable to open debugger port(127.0.0.1:60157):java.net.SocketExceptionsocket closed

转载自 解决idea启动项目报错:Unable to open debugger port(127.0.0.1:60157):java.net.SocketException"socket closed 1.问题描述: 工作当中免不了要重启服务,debug模式下偶尔启动项目,却启动失败报错: Unable to open debugger port (127.0.0.1:60157): java.net.S…

下一个计划 : .NET/.NET Core应用性能管理

前言 最近几个月一直在研究开源的APM和监控方案&#xff0c;并对比使用了Zipkin,CAT,Sky-walking,PinPoint(仅对比,未实际部署),Elastic APM,TICK Stack,Prometheus等开源产品&#xff0c;其中不乏功能强大的监控和追踪系统&#xff0c;但它们都对.NET/.NET Core没有支持或支持…

架构演化:云原生时代开启之系列一演化篇

信息技术从出现伊始到渐成主流&#xff0c;其趋势经历了软件、开源和云三个阶段&#xff1a; 软件改变世界。纵观人类社会漫长的发展历程&#xff0c;农耕时代、工业时代与信息时代可谓是三个明显分水岭&#xff0c;每个时代人类涉及的领域范畴均喷井式增长。作为信息时代最重要…

laravel部署到服务器显示Permission denied

解决这个问题可以先cd到项目根目录中 依次输入以下两个命令 find storage -type d -exec chmod 777 {} \;find storage -type f -exec chmod 777 {} \;不报错就证明成功了

基于OIDC(OpenID Connect)的SSO

在[认证授权]系列博客中&#xff0c;分别对OAuth2和OIDC在理论概念方面进行了解释说明&#xff0c;其间虽然我有写过一个完整的示例&#xff08;https://github.com/linianhui/oidc.example&#xff09;&#xff0c;但是却没有在实践方面做出过解释。在这里新开一个系列博客&am…

Consul集群搭建

转载自 Consul集群搭建 概述 作为服务发现的几种产品&#xff0c;比较可以查看这里。Consul官方也提供了几种产品之间的比较&#xff0c;点击查看。 服务发现产品 Consul有很多组件&#xff0c;但总体来说&#xff0c;它是一个发现和配置服务工具&#xff0c;特性&#xff…

js遍历对象的key和value

如果想要得到数组的键值对&#xff0c;可以用以下方法 object {"name":"kejin","age":"18"}for(var index in object){console.log(index);console.log(object[index]); }

使用Identity Server 4建立Authorization Server (6) - js(angular5) 客户端

预备知识: 学习Identity Server 4的预备知识 第一部分: 使用Identity Server 4建立Authorization Server (1) 第二部分: 使用Identity Server 4建立Authorization Server (2) 第三部分: 使用Identity Server 4建立Authorization Server (3) 第四部分: 使用Identity Server 4建立…

SpringBoot整合kafka(实现producer和consumer)

转载自 SpringBoot整合kafka(实现producer和consumer) 在Windows环境下安装运行Kafka&#xff1a;https://www.jianshu.com/p/d64798e81f3b 本文代码使用的是Spring Boot 2.1.1.RELEASE 版本 <parent><groupId>org.springframework.boot</groupId><art…

ASP.NET Core 认证与授权[7]:动态授权

基于资源的授权 有些场景下&#xff0c;授权需要依赖于要访问的资源&#xff0c;例如&#xff1a;每个资源通常会有一个创建者属性&#xff0c;我们只允许该资源的创建者才可以对其进行编辑&#xff0c;删除等操作&#xff0c;这就无法通过[Authorize]特性来指定授权了。因为授…

H5的Websocket基本使用

前端代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </head> &…

springboot手动提交kafka offset

转载自 springboot手动提交kafka offset enable.auto.commit参数设置成了false 但是测试发现enable.auto.commit参数设置成了false&#xff0c;kafka的offset依然提交了&#xff08;也没有进行人工提交offset&#xff09;。 查看源码 如果我们enable.auto.commit设置为false…