想使用Docker容器?先看看这些注意事项
Docker容器无疑是最近十年来最引人注目的技术之一,因为有了它,对我们思考设计、开发和运维软件的方式产生了非常有益的影响。
但是就像每一个开发工具一样,为了充分利用这些工具,需要注意一些使用中问题,Docker容器也是如此。下面是您需要关注的一些地方:
一个进程,一个Docker容器
每个Docker容器的核心都是一个进程,尽管每个Docker容器可以使用多个进程,但是这种方法不值得推荐。为了提高效率,每个容器应该只有一个特定的目标进程。其中一个非常重要的原因是如果只使用一个进程的话想在其他项目中迁移使用该Docker将变得容易很多。
尽管在容器中运行多个进程在技术上是可行的,但是单进程体系结构具有显著的优势,具体说来:
易扩展
如果容器被隔离到一个单一的功能,水平调整容器会容易得多。 假设您需要另一个Tomcat容器,在其他地方迁移一个即可。但是,如果你的Tomcat容器也运行你的数据库服务,并且其它的数据也需要被迁移走,那么这就变得非常复杂。
更好的复用行
如果一个容器只有一个功能,容器可以容易地重新用于其他项目。
易问题定位
开发人员能够在本地环境下解决那些在生产中的单个组件出现的问题,而不是从整个应用程序环境中定位问题来解决。
使用磁盘进行数据存储
在容器内部保存数据几乎没有什么用处,因为容器不断地被停止和销毁。无论什么时候需要存储数据,都要在磁盘上进行,因为磁盘可以在多个容器之间更安全地共享。磁盘是将数据存储在容器的可写层中的更好选择,因为使用磁盘不会增加容器的大小,并且磁盘的数据存在于给定容器的生命周期之外。
Docker容器通信
每当一个Docker容器需要与另一个容器通信时,传递信息最好使用名称或环境变量。Docker容器当然也有IP地址,但是无论何时启动和停止容器,都是不会依赖IP地址的。
以普通用户身份运行Docker
默认情况下,Docker容器以root用户身份运行,众所周知,以root用户运行的容器完全可以控制主机系统。如果黑客访问容器内的“root”用户,他将获得对运行Docker的主机的root权限,为了避免这种情况,请始终以普通用户身份运行Docker容器。
注意容器的体积
选择一个容器的主要原因之一是它的体积小。但是,如果你把它做得更大,它的主要优势就没了。当您在群集中部署数千个容器时,如果需要容器相互通信并定期更新容器,这是一个非常严重的问题。
所以需要确保只有所需的文件和库来运行对应的应用程序/进程。不要安装不必要的软件包或运行yum update等命令,将不需要的文件下载到新的映像层。
打个比方:一个冰箱中是无法装下一个大型集装箱的。
制定监测策略
开发和部署Docker容器不是你的工作的结束。您需要持续监控已部署的容器以及整个系统的运行状况。选择合适的工具并制定一个策略来有效地监控您的Docker容器,以确保最短的停机时间,从而使客户满意。
Docker容器的安全问题
只要Docker容器在本地开发环境中运行,就没有安全问题。因为测试环境是与外部连接隔离的,是无法确定在外部是否完全的。当您的Docker镜像部署在生产环境中时,因为需要处理外部网络访问,安全性自然成为一个问题。为了预防这个问题,首先需要确保Docker容器所在的主机被修补了最新的安全更新,其次Docker容器中也更新了安全补丁。
想使用Docker容器?先看看这些注意事项的更多相关文章
- Docker 容器技术
前言: 之前感觉Docker是一种小虚拟机,docker和KVM虚拟机之间有什么区别.联系.可以应用在什么样的生产环境? 一.Docker是什么以及和KVM的区别 1.docker概念? Docker ...
- Docker容器资源管理
本文作者是Red Hat的软件工程师 - Marek Goldmann,这篇文章详细介绍了Docker容器的资源管理,总共分了三大部分:CPU.内存以及磁盘IO.作者通过实践举例给读者勾勒出一幅清晰明 ...
- 3、docker 容器管理
Docker容器相对于OpenStack的云主机实例,虽然他们本质上不同.我们需要基于镜像来创建容器.容器是独立运行的一个或一组应用,以及它们的运行环境.对应的,虚拟机可以理解为模拟运行的一整套操作系 ...
- 从Docker容器内部,如何连接到本机的本地主机?
原文 从Docker容器内部,如何连接到本机的本地主机? 编辑:如果您使用的是Docker-for-mac或Docker-for-Windows 18.03+,只需使用主机连接到您的mysql服务即可 ...
- Docker(33)- 如何修改 docker 容器的端口映射
如果你还想从头学起 Docker,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1870863.html 问题背景 docker run ...
- Docker(34)- 如何修改 docker 容器的目录映射
如果你还想从头学起 Docker,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1870863.html 问题背景 docker run ...
- 在Linux和Windows的Docker容器中运行ASP.NET Core
(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 译者序:其实过去这周我都在研究这方面的内容,结果周末有事没有来得及总结为文章,Scott H ...
- Docker容器是否可以改变世界?
Docker容器是否可以改变世界? 2016-01-15 杜亦舒 2016年了,很多大牛开始预测技术趋势,其中一个普遍的观点我也很认同: Docker会更加流行,会改变程序世界 2015年的上半年我接 ...
- 搭建ubuntu14.04的hadoop集群【docker容器充当服务器】
首先弄出来装有hadoop.java.ssh.vim的镜像起名badboyf/hadoop.做镜像有两种方法,一种是用Dockerfile来生成一个镜像,一种是基于ubuntu14.04的基础镜像生成 ...
随机推荐
- 小白学Maven第一篇配置
在百度上搜Maven进入官网,然后在进Download里面把apache-maven-3.5.0-bin.zip(记得不要下错)下载下来 然后进行安装 (前提你配置了Java如下图) Java配置: ...
- SQL 表结构操作
数据库知识总结(表结构操作) 1.创建表Scores 1 create table Scores --表名 2 (Id int identity(1,1) primary key,--设置主键,并且行 ...
- 基于FFMPEG的跨平台播放器实现
基于FFMPEG的跨平台播放器实现 一.背景介绍 FFmpeg是一款超级强大的开源多媒体编解码框架,提供了录制.转换以及流化音视频的完整解决方案,包含了libavcodec.libavformat等多 ...
- 用Eclipse 创建一个 简单的 Maven JavaWeb 项目
使用Maven 创建一个简单的 javaWeb 项目: 本篇属于 创建 JavaWeb 项目的第三篇: 建议阅读本篇之前 阅读 用 Eclipse 创建一个简单的web项目 ;本篇是这这篇文章的基础 ...
- 入侵必练的CMD命令
入侵必练的CMD命令 我们都知道和目标主机建立IPC$连接后,要把后门,木马之类的软件传过去,其实这个命令是DOS基础的 命令,我这里就写个格式. 一.呵呵,命令一写就知道了吧,在网上看的太多了,其他 ...
- RabbitMQ 笔记-RPC
RabbitMQ中实现RPC的机制是: 客户端发送请求(消息)时,在消息的属性(MessageProperties,在AMQP协议中定义了14中properties,这些属性会随着消息一起发送)中设置 ...
- Ubuntu远程登陆、SSH图形界面、WOL远程唤醒
本文为作者原创,转载请注明出处(http://www.cnblogs.com/mar-q/)by 负赑屃 实现目标:通过路由器配置路由路径,将拨号获取的公网IP地址指向局域网Ubuntu服务器.家里有 ...
- Spring + Fastweixin 微信开发
这篇文章转自<http://www.qtdebug.com/spring-weixin/> 微信有两种模式,编辑模式和开发者模式,有些功能是互斥的,不可以同时使用,微信开发需要在开发者模式 ...
- iOS之 LLDB调试常用命令
LLDB是LLVM下的调试器.Xcode从4.0开始编译器开始改用LLVM,相应的调试器也从gdb改为LLDB. 1. p 用于输出基本类型 2. po 用于输出Objective-C对象 3. ex ...
- dynamic_cast 转换示例
dynamic_cast 转换示例 /* 带虚函数与不带虚函数转换的区别 dynamic_cast:必须要有虚函数才可以转换 dynamic_cast:只能处理转换指针或引用,不能转换对象 dynam ...