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

简介:

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

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

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

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

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

容器的准则:

“容器是临时的”。


image

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

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(转载)

相关文章
|
Shell Docker 容器
docker使用记录一
docker使用记录一
112 0
docker使用记录一
|
存储 Kubernetes Ubuntu
一文熟练掌握Docker使用
做开发的应该很多人都知道Docker,就算是没有用过,应该也有所耳闻。这款开源于2013年的工具一经问世,便迅速火爆起来,在微服务 、项目迁移、云等方面备受欢迎。如今它的github项目已经达到54k个star。Docker到底是什么?它有什么优点使得它如此受欢迎?到底该怎么使用?本文就从以上几点进行阐述,希望通过这篇文章能够让大家对Docker有一个清晰的认识。
一文熟练掌握Docker使用
|
NoSQL Shell Redis
docker的使用
docker的使用
109 0
|
Docker 容器
docker使用阿里云加速
安装完docker引擎后,默认使用的docker仓库,拉取镜像速度比较慢,需要修改daemon.json来进行加速。
809 0
docker使用阿里云加速
|
应用服务中间件 Linux Shell
|
Linux Docker 容器
docker使用
docker run -t -i --mount type=bind,source=/c/workspace/gopath,target=/go -p 8080:8080 golang:1.11-stretch docker start -i CONTAINER ID docker exec -i -t CONTAINER ID /bin/bash volumes写dockerfile的时候无法挂载本地目录,使用 --volumes-from=容器id 来做基于volume互联 基于link互联,跨主机用connectable,实际应用不多。
1450 0
|
关系型数据库 PHP 数据库
docker学习系列16 使用过程的一些经验总结
COPY 和 ADD 命令具有相同的特点:只复制目录中的内容而不包含目录自身。 比如 backend 目录的结构如下: --- backend -- model -- controller 如果执行 WORKDIR /app COPY backend . 容器内app底下会是model和controller目录,并不是backend目录。
1233 0
|
Linux Shell 数据安全/隐私保护
|
应用服务中间件 Linux nginx
|
数据库 Docker 容器
《Docker生产环境实践指南》——1.3 使用Docker的多种方式
过去的几年时间,科技发生了巨大变化,从物理服务器到虚拟服务器,再到拥有PaaS环境的云计算。不论是否采用了全新架构,Docker镜像都可以在当前环境中很容易地被使用。要使用Docker,并不需要立即从单体应用程序迁移到面向服务架构。有很多用例允许在不同层次上集成Docker。
2546 0