毋庸置疑,容器曾经成为企业 IT 基础设施中必不可少的局部,它具备许多的长处,比方:
- 第一:容器是不可变的——操作系统,库版本,配置,文件夹和应用程序都包装在容器内。你保障在质量检查中测试过的同一镜像将以雷同的行为达到生产环境。
- 第二:容器很轻——容器的内存占用量很小。容器将只为次要过程分配内存,而不是数百或数千 MB。
- 第三:容器十分快——能够像启动典型 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 个坏习惯要不得,留神!留神!再留神!