使用Docker时应该避免这10 件事…

容器可以解决很多问题,并且具有诸多优势,当你投身其中时便会发现其奥妙所在。

第一:容器是不可变的 - 操作系统,库版本,配置,文件夹和应用程序都包装在容器内。 您可以使用通过相同QA测试的镜像,使产品具有相同的表现。

第二: 容器是轻量级的 - 容器的内存占用很小。没有成百上千的MB,容器只会分配主进程的内存。

第三: 容器是快速的 - 你可以像一个典型的linux进程一样快速启动一个容器。只需要几秒钟,您就可以启动一个新的容器。

然而,许多用户仍然像对待典型的虚拟机那样对待容器。他们似乎都忘记了容器的重要特性:容器是一次性的。

容器的准则:

“容器是临时的”。

这个特性迫使用户改变处理和管理容器的心态;我将会向你说明在容器中不应该做的那些事,以确保容器可以发挥出最佳效果:

1) 不要将数据存储在容器中 - 容器可以被停止,销毁或者替换。 在容器中运行的应用程序版本1.0很容易被1.1版本替换而不会产生任何影响或数据丢失。 因此,如果您需要存储数据,请在卷中进行。 当然在这种情况下,您还应该注意,如果两个容器在相同的卷上写入数据,有可能会导致损坏。 请确保您的应用程序被设计为写入共享数据存储。

2)不要将应用程序分成两个部分 -有些人认为容器像虚拟机,大多数人往往认为他们应该将应用程序部署到现有的运行容器中。 在开发阶段这样是可以的,您需要连续部署和调试;但对于连续交付(CD)管道到QA和产品,您的应用程序应该是映像的一部

3)不要创建大镜像 - 大图像将更难分发。 确保您仅具有运行应用程序/进程所需的文件和库。 不要安装不必要的包或运行“更新” (yum更新) ,下载许多文件到一个新的图像层。

4)不要使用单层镜像 - 要有效地使用分层文件系统,始终为您的操作系统创建您自己的基本镜像层, 用户名定义的为一个图层, 运行时安装的为一个图层,配置的为一个图层,最后为您的应用程序建立一个层。 这样将更容易重新创建,管理和分发您的图像。

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

6)不要只使用“最新”标签 - 最新标签就像“Maven用户快照”。 基于容器分层文件系统的性质,标签实际上是被鼓励使用的,你应该不会希望看到当你几个月后创建镜像时的不兼容,或从创建缓存的检索中检索到了一个错误的“最新”版本。当您不能跟踪正在运行的版本时,在生产环境部署容器时应该避免“最新”标签的出现。

7)不要在一个容器中运行多个进程 - 容器可以完美的运行单个进程(http守护进程,应用程序服务器,数据库),但如果你有一个以上的进程,你可能会在管理上,检索日志,以及单独地更新的过程中遇到更多的麻烦。

8)不要在镜像中存储凭证。 使用环境变量 – 不要对镜像中的任何用户名/密码进行硬编码。 使用环境变量从容器外部检索此信息。 这个原则的一个很好的例子是Postgres图像 。

9)不要以root用户身份运行进程 - “默认情况下,docker容器会以root身份运行。随着Docker的成熟,更安全的默认选项可能会变得可用。 现在,要求root对其他人来说是危险的,并且可能在所有环境中都不可用。 您的镜像应该使用USER指令来为容器指定非root用户

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

原文发布于微信公众号 - 云计算D1net(D1Net02)

原文发表时间:2017-03-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏IT笔记

Docker学习之网络模式配置

以前搭建过虚拟机(vmware)的小伙伴,有可能知道vmware为我们提供了三种网络工作模式,它们分别是:Bridged(桥接模式)、NAT(网络地址转换模式)...

464100
来自专栏老司机的技术博客

docker实战入门(3)基本概念

Docker Client 客户端 / Docker Daemon 守护进程 docker是CS架构,Docker Daemon守护进程即为服务端 客户端向...

38650
来自专栏编程坑太多

『中级篇』容器的资源限制(22)

10220
来自专栏性能与架构

Docker容器间网络如何互联

image.png 1. 通过IP互联 容器带有虚拟网桥,可以有自己的ip,容器间就可以通过ip进行互相通信 启动两个容器 分别ssh登陆,ifconfig查...

41050
来自专栏我是攻城师

使用Docker容器应该避免的10个事情

34370
来自专栏编程坑太多

『中级篇』容器的资源限制(22)

163100
来自专栏北京马哥教育

把docker镜像当作桌面系统来用

博主一直都很喜欢思考怎样管理装在自己电脑上的桌面系统,这篇算是前作能当主力,能入虚拟机,还能随时打包带走,Linux就是这么强大的后续探索吧。

20700
来自专栏coder修行路

Docker入门简介

Docker的概念 什么是Docker? Docker是一个开源平台,包含:容器引擎和Docker Hub注册服务器 Docker容器引擎:可以将开发者打包他们...

208100
来自专栏编程坑太多

『中级篇』什么是Container(15)

230100
来自专栏老司机的技术博客

docker实战入门(3)基本概念

docker的镜像是一个层叠的只读文件系统,最底端是一个引导文件系统(bootfs),这很像典型的linux的引导文件系统,docker用户几乎永远不会和引导文...

577100

扫码关注云+社区

领取腾讯云代金券