Docker容器优点容器已经成为企业IT基础设施中必不可少的部分,它具有许多的优点,比如:

1 容器是不可变的——操作系统,库版本,配置,文件夹和应用程序都包装在容器内。你保证在质量检查中测试过的同一镜像将以相同的行为到达生产环境。
2 容器很轻——容器的内存占用量很小。容器将只为主要进程分配内存,而不是数百或数千MB。
3 容器非常快——可以像启动典型Linux进程一样快地启动容器。你可以在几秒钟内启动一个新容器,而不是几分钟。
但是,许多用户仍然像对待典型虚拟机一样对待容器,而忘记了容器具有重要的特征:即容器是一次性的。
这种特征迫使用户改变他们对如何处理和管理容器的看法。那么该如何保持容器的最佳效益呢?

Docker容器中应避免的10个坑

1、不要将数据存储在容器中因为你可以停止,销毁或更换容器。在容器中运行的应用程序版本1.0应该容易地由版本1.1替换,而不会造成任何影响或数据丢失。因此,如果需要存储数据,请批量存储。在这种情况下,还应该注意两个容器是否在同一卷上写入数据,因为这可能会导致损坏。确保你的应用程序是为了写入共享数据存储。

2、不要将应用程序分为两部分进行交付有些人看到像虚拟机这样的容器,大多数人倾向于认为他们应该将应用程序部署到现有的运行容器中。在开发阶段,你需要不断进行部署和调试,这是正确的。但对于一个连续传递(CD)管道QA和Production,你的应用程序应该是镜像的一部分。

3、不要创建大镜像因为大镜像将很难分发。确保仅具有运行应用程序/进程所需的文件和库。不要安装不必要的软件包或运行将许多文件下载到新镜像层的“更新” 。

4、不要使用单层镜像为了有效利用分层文件系统,请始终为操作系统创建自己的基础镜像层,为用户名定义创建另一层,为运行时安装创建另一层,为配置创建另一层,最后是应用程序的另一层。重新创建,管理和分发镜像将更加容易。

5、不要从正在运行的容器中创建镜像换句话说,不要使用“ docker commit”来创建镜像。这种创建镜像的方法不可复制,应完全避免。始终使用完全可复制的Dockerfile或任何其他S2I(从源到镜像)方法,如果将Dockerfile存储在源代码控制存储库(git)中,则可以跟踪对Dockerfile的更改。

6、不要只使用“最新”标签对于Maven用户,最新标签就像“ SNAPSHOT”一样。由于容器的分层文件系统性质,因此鼓励使用标签。几个月后生成镜像并发现你的应用程序无法运行是因为父层(Dockerfile中的FROM)被不兼容向后的新版本或错误的新版本所取代,你不会感到惊讶从构建缓存中检索了“最新”版本。在生产环境中部署容器时,也应避免使用“最新”标签,因为你无法跟踪正在运行哪个版本的镜像。

7、不要在单个容器中运行多个进程。容器非常适合运行单个进程(http守护程序,应用程序服务器,数据库),但是如果有多个进程,则管理起来可能会遇到更多麻烦,检索日志,并分别更新流程。

8、不要将凭据存储在镜像中。使用环境变量,你不想对镜像中的任何用户名/密码进行硬编码。使用环境变量从容器外部检索该信息。这个原理的一个很好的例子是Postgres镜像。

9、不要以root用户身份运行进程“默认情况下,docker容器以root用户身份运行。随着docker的成熟,可能会提供更多安全的默认选项。目前,要求root用户对其他人是危险的,可能并非在所有环境中都可用。你的镜像应使用USER指令为运行容器指定一个非root用户。

10、不要依赖IP地址每个容器都有自己的内部IP地址,如果你启动和停止容器,它可能会更改。如果应用程序或微服务需要与另一个容器通信,请使用环境变量将正确的主机名和端口从一个容器传递到另一个容器。

使用Docker的同学注意了,这10个坑小心中招了的更多相关文章

  1. Docker入门教程(九)10个镜像相关的API

    Docker入门教程(九)10个镜像相关的API [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第九篇,重点介绍了镜像相关的Docker Remote ...

  2. MiniProfiler.3.0.10 用于MVC4.0中不能显示SQL语句

    MiniProfiler.3.0.10 用于MVC4.0中可以显示执行时间,但是不能显示SQL语句,怎么解决?

  3. 10件在PHP7中不要做的事情

    10件在PHP7中不要做的事情 1. 不要使用mysql_函数 这一天终于来了,从此你不仅仅“不应该”使用mysql_函数.PHP 7 已经把它们从核心中全部移除了,也就是说你需要迁移到好得多的mys ...

  4. 在论坛中出现的比较难的sql问题:10(删除多表中的同一个外键)

    原文:在论坛中出现的比较难的sql问题:10(删除多表中的同一个外键) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. 所以,觉得有 ...

  5. 《python解释器源码剖析》第10章--python虚拟机中的一般表达式

    10.0 序 上一章中,我们通过PyEval_EvalFrameEx看到了python虚拟机的整体框架,那么这一章我们将深入到PyEval_EvalFrameEx的各个细节当中,深入剖析python的 ...

  6. [19/10/13-星期日] Python中的函数

    一.函数 # 第五章 函数 ## 函数简介(function) - 函数也是一个对象 - 对象是内存中专门用来存储数据的一块区域 - 函数可以用来保存一些可执行的代码,并且可以在需要时,对这些语句进行 ...

  7. centos Docker安装前升级内核3.10的方法

    首先我虚拟机系统都是Centos 6.5 .ESXI ,后安装devel .ESXI 后来 .ESXI 我所操作的都是虚拟机,但是在真实机上面如何我就不清楚了~~ 大家一定要记得安装步骤,,,不然就是 ...

  8. docker学习 (三) Windows 10 安装Docker

    Docker CE: 社区版,免费. Docker EE: 企业版,收费. 安装:             Windows 10 Pro 64, 必须开启Hyper-v 下载:Docker for W ...

  9. docker容器管理-含静态Ip(10)

    docker run命令详解 docker run -t #表示分配一个伪终端 -i #表示让容器的标准输入打开,不跟这个参数容器启不来 -d #后台运行 -P #dockerfile中EXPOSE ...

随机推荐

  1. CentOS7安装开发工具套件时报错解决方案

    操作系统:CentOS 7.2 执行安装命令时显示以下信息: [root@DEV-CMDB-DB02 ~]# yum -y groupinstall "Development Tools&q ...

  2. 『动善时』JMeter基础 — 26、使用txt文件实现JMeter参数化

    目录 1.测试计划中的元件 2.数据文件内容 3.线程组元件内容 4.HTTP信息头管理器组件内容 5.CSV数据文件设置组件内容 6.HTTP请求组件内容 7.脚本运行结果 之前我们都是使用.csv ...

  3. GO学习-(26) Go语言操作mongoDB

    Go语言操作mongoDB mongoDB是目前比较流行的一个基于分布式文件存储的数据库,它是一个介于关系数据库和非关系数据库(NoSQL)之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的. ...

  4. clone() java 简单的复制

      Java的复制有的 deepcopy 和 shapecopy 之分,这里简单的采用shapecopy  的 clone ( ) 方法, 但是指向的是同一个对象, 关于对象的问题,这里不做展开: / ...

  5. python 导入同级目录文件、上级目录文件以及下级目录数据集和模块包

    划重点: 其中dataset_path = ''表示在Python工作文件夹 dataset_path = '..'表示在Python工作文件夹的上级文件夹 dataset_path = '某某文件夹 ...

  6. fiddler选项卡-Composer(构建请求)

    Composer Composer支持手动构建http.https和ftp请求.点到composer选项卡界面,我们可以看到下面有一串英文. use this page to compose a Re ...

  7. 「题解」300iq Contest 2 H. Honorable Mention

    本文将同步发布于: 洛谷博客: csdn: 博客园: 简书. 题目 题目链接:gym102331H. 题意概述 给定一个长度为 \(n\) 的序列 \(a\),有 \(q\) 次询问,每次询问给定三个 ...

  8. 【C++】秒级时间戳,毫秒级时间戳

    时间戳,秒级 测试代码: #include <iostream> #include <time.h> #include <windows.h> using name ...

  9. 【NX二次开发】Block UI 集列表

    属性说明 属性   类型   描述   常规           BlockID    String    控件ID    Enable    Logical    是否可操作    Group    ...

  10. 与安卓联调,调用安卓那边的方法,获取到安卓传过来的数据,再携带这些数据发送axios请求,获取到用户的信息

    第一步:js调用Android方法:接收Android传递过来的数据,并做处理 //参数一:调用java中的方法   submitFromWeb是方法名,必须和Android中注册时候的方法名称保持一 ...