想使用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的基础镜像生成 ...
随机推荐
- Jquery实现鼠标移到某个对象,弹出显示层。
/** * 鼠标移上去显示层 * @param divId 显示的层ID * @returns */ $.fn.myHoverTip = function(divId) { var div = $(& ...
- How to Add Columns to a DataGrid through Binding and Map Its Cell Values
How to Add Columns to a DataGrid through Binding and Map Its Cell Values Lance Contreras, 7 Nov 2013 ...
- 知识树杂谈Java面试(4)
一. Java集合 1. 集合分类: Collection.Map. 2. Collection: 3. Map 4. 注意点 a. List 有序.可重复:Set 无序.不可重复:Map 键值 ...
- win10 uwp Window.Current.Dispatcher中Current为null
本文说的是进行网络中异步界面出现的错误,可能带有一定的主观性和局限性,说的东西可能不对或者不符合每个人的预期.如果觉得我有讲的不对的,就多多包含,或者直接关掉这篇文章,但是请勿生气或者发怒吐槽,可以在 ...
- Prometheus 到底 NB 在哪里?- 每天5分钟玩转 Docker 容器技术(84)
本节讨论 Prometheus 的核心,多维数据模型.我们先来看一个例子. 比如要监控容器 webapp1 的内存使用情况,最传统和典型的方法是定义一个指标 container_memory_usag ...
- 【转】linux IO子系统和文件系统读写流程
原文地址:linux IO子系统和文件系统读写流程 我们含有分析的,是基于2.6.32及其后的内核. 我们在linux上总是要保存数据,数据要么保存在文件系统里(如ext3),要么就保存在裸设备里.我 ...
- 64、django之模型层(model)--建表、查询、删除基础
要说一个项目最重要的部分是什么那铁定数据了,也就是数据库,这篇就开始带大家走进django关于模型层model的使用,model主要就是操纵数据库不使用sql语句的情况下完成数据库的增删改查.本篇仅带 ...
- js的事件循环绑定和jQuery的隐式迭代
js的事件循环绑定和jQuery的隐式迭代 js事件循环绑定 jQuery隐式迭代 先举一个例子:给定一个ul,点击列表内的每一个li元素,使它的背景色变红,下边分别用js代码和jQuery实现. & ...
- Junit基本使用
Junit基本用法 1.创建Junit Test Case 2.基本使用(以oracle数据库操作为例) package com.csit.adminsystem1.tests; import sta ...
- C++流类库(11)
C++的流类库由几个进行I/O操作的基础类和几个支持特定种类的源和目标的I/O操作的类组成. 流类库的基础类 ios类是isrream类和ostream类的虚基类,用来提供对流进行格式化I/O操作和错 ...