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容器?先看看这些注意事项的更多相关文章

  1. Docker 容器技术

    前言: 之前感觉Docker是一种小虚拟机,docker和KVM虚拟机之间有什么区别.联系.可以应用在什么样的生产环境? 一.Docker是什么以及和KVM的区别 1.docker概念? Docker ...

  2. Docker容器资源管理

    本文作者是Red Hat的软件工程师 - Marek Goldmann,这篇文章详细介绍了Docker容器的资源管理,总共分了三大部分:CPU.内存以及磁盘IO.作者通过实践举例给读者勾勒出一幅清晰明 ...

  3. 3、docker 容器管理

    Docker容器相对于OpenStack的云主机实例,虽然他们本质上不同.我们需要基于镜像来创建容器.容器是独立运行的一个或一组应用,以及它们的运行环境.对应的,虚拟机可以理解为模拟运行的一整套操作系 ...

  4. 从Docker容器内部,如何连接到本机的本地主机?

    原文 从Docker容器内部,如何连接到本机的本地主机? 编辑:如果您使用的是Docker-for-mac或Docker-for-Windows 18.03+,只需使用主机连接到您的mysql服务即可 ...

  5. Docker(33)- 如何修改 docker 容器的端口映射

    如果你还想从头学起 Docker,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1870863.html 问题背景 docker run ...

  6. Docker(34)- 如何修改 docker 容器的目录映射

    如果你还想从头学起 Docker,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1870863.html 问题背景 docker run ...

  7. 在Linux和Windows的Docker容器中运行ASP.NET Core

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 译者序:其实过去这周我都在研究这方面的内容,结果周末有事没有来得及总结为文章,Scott H ...

  8. Docker容器是否可以改变世界?

    Docker容器是否可以改变世界? 2016-01-15 杜亦舒 2016年了,很多大牛开始预测技术趋势,其中一个普遍的观点我也很认同: Docker会更加流行,会改变程序世界 2015年的上半年我接 ...

  9. 搭建ubuntu14.04的hadoop集群【docker容器充当服务器】

    首先弄出来装有hadoop.java.ssh.vim的镜像起名badboyf/hadoop.做镜像有两种方法,一种是用Dockerfile来生成一个镜像,一种是基于ubuntu14.04的基础镜像生成 ...

随机推荐

  1. npm install 时--save-dev和--save的区别

    package.json中两个字段含义简介 一直在使用npm包管理器,对于npm install module --save-dev 和 npm install module --save这两个的区别 ...

  2. Javascript之pixi框架学习

    pixi 创建渲染器(renderer) 创建一个可以播放动画的区域,相当于(canvas). var renderer = PIXI.autoDetectRenderer(512, 512); do ...

  3. 通过 PackageManager 获得你想要的 App 信息

    一.前言 开门见山,开篇明义.有些场景下,我们会需要获取一些其它 App 的各项信息,例如:App 名称,包名.Icon 等.这个时候就需要使用到 PackageManager 这个类了. 本篇就 P ...

  4. day38(增强类的实现)

    定义一个接口 package com.baidu.test; public interface Person { public abstract void eat(); public abstract ...

  5. 使用vsftpd+nginx搭建一个文件服务器

    一:安装vsftpd 1.安装 [root@localhost jack]# yum -y install vsftpd 安装完后,有/etc/vsftpd/vsftpd.conf 文件,是vsftp ...

  6. 关于celery django django-celery版的搭配的报错问题及解决方法

    G:\python3_django\DFpro\mypro (win)(py3_django) λ python manage.py celery worker --loglevel=infoTrac ...

  7. PHP设计模式一:工厂方法设计模式

    一.什么是工厂方法模式 作为一种创建型设计模式,工厂方法模式就是要创建“某种东西”.对于工厂方法,要创建的“东西”是一个产品,这个产品与创建它的类之间不存在绑定. 实际上,为了保持这种松耦合,客户会通 ...

  8. Single linked List by pointer

    其实本应该从一般性的表讲起的,先说顺序表,再说链表 .但顺序表的应用范围不是很广,而且说白了就是数组的高级版本,他的优势仅在于两点:1.逻辑直观,易于理解.2.查找某个元素只需要常数时间--O(1), ...

  9. Unity3D手机斗地主游戏开发实战(02)_叫地主功能实现(不定期更新中~~~)

    目录 Unity3D手机斗地主游戏开发实战(01)_发牌功能实现 Unity3D手机斗地主游戏开发实战(02)_叫地主功能实现 一.大体思路 前面我们实现了点击开始游戏按钮,系统依次给玩家发牌的逻辑和 ...

  10. Leetcode题解(十九)

    54.Spiral Matrix 题目: 题目意思很简单,就是螺旋式访问矩阵元素.也没有比较经典的算法可以解决此题,只需要模拟一下这个过程即可. 代码如下: class Solution { publ ...