1) 不要在容器中存储数据 – 容器可能被停止,销毁,或替换。一个运行在容器中的程序版本1.0,应该很容易被1.1的版本替换且不影响或损失数据。有鉴于此,如果你需要存储数据,请存在卷中,并且注意如果两个容器在同一个卷上写数据会导致崩溃。确保你的应用被设计成在共享数据存储上写入。
2) 不要将你的应用发布两份 – 一些人将容器视为虚拟机。他们中的大多数倾向于认为他们应该在现有的运行容器里发布自己的应用。在开发阶段这样是对的,此时你需要不断地部署与调试;但对于质量保证与生产中的一个连续部署的管道,你的应用本该成为镜像的一部分。记住:容器应该保持不变。
3) 不要创建超大镜像 – 一个超大镜像只会难以分发。确保你仅有运行你应用/进程的必需的文件和库。不要安装不必要的包或在创建中运行更新(yum更新)。
4) 不要使用单层镜像 – 要对分层文件系统有更合理的使用,始终为你的操作系统创建你自己的基础镜像层,另外一层为安全和用户定义,一层为库的安装,一层为配置,最后一层为应用。这将易于重建和管理一个镜像,也易于分发。
5) 不要为运行中的容器创建镜像 – 换言之,不要使用“docker commit”命令来创建镜像。这种创建镜像的方法是不可重现的也不能版本化,应该彻底避免。始终使用Dockerfile或任何其他的可完全重现的S2I(源至镜像)方法。
8) 不要在镜像中存储凭据。使用环境变量 –不要将镜像中的任何用户名/密码写死。使用环境变量来从容器外部获取此信息。有一个不错的例子是postgres镜像。
9) 使用非root用户运行进程 – “docker容器默认以root运行。(…)随着docker的成熟,更多的安全默认选项变得可用。现如今,请求root对于其他人是危险的,可能无法在所有环境中可用。你的镜像应该使用USER指令来指令容器的一个非root用户来运行。”(来自 Docker镜像作者指南)
10) 不要依赖IP地址 – 每个容器都有自己的内部IP地址,如果你启动并停止它地址可能会变化。如果你的应用或微服务需要与其他容器通讯,使用任何命名与(或者)环境变量来从一个容器传递合适信息到另一个。
评论删除后,数据将无法恢复
评论(28)
引用来自“_Elvis”的评论
一直有个疑问,为什么经常看到有人把数据库也放Docker中?引用来自“zhenruyan”的评论
我们公司就是不知道上一任运维怎么想的引用来自“巴林的狗尾草”的评论
docker有那种专门做数据存储的镜像,把数据库程序跟数据存储部分分别放在两个不同的容器里面,然后这样升级数据库的时候存储不会受到影响,而备份恢复数据的话不需要哭咔咔的去跑sql,只要定时commit数据存储container,到时候重新拉起来以前版本的commit的镜像即可,还是很方便的。引用来自“黑传说”的评论
但是数据量大的时候还是要等着哭吧引用来自“巴林的狗尾草”的评论
数据量大会导致什么问题?备份的镜像比较大?加硬盘啊。还是说别的什么问题?数据量大并不代表是什么压力,真正的环境的不适应带来的问题才是压力,数据量大不能叫做问题。引用来自“_Elvis”的评论
一直有个疑问,为什么经常看到有人把数据库也放Docker中?引用来自“zhenruyan”的评论
我们公司就是不知道上一任运维怎么想的引用来自“巴林的狗尾草”的评论
docker有那种专门做数据存储的镜像,把数据库程序跟数据存储部分分别放在两个不同的容器里面,然后这样升级数据库的时候存储不会受到影响,而备份恢复数据的话不需要哭咔咔的去跑sql,只要定时commit数据存储container,到时候重新拉起来以前版本的commit的镜像即可,还是很方便的。引用来自“黑传说”的评论
但是数据量大的时候还是要等着哭吧引用来自“_Elvis”的评论
一直有个疑问,为什么经常看到有人把数据库也放Docker中?引用来自“zhenruyan”的评论
我们公司就是不知道上一任运维怎么想的引用来自“巴林的狗尾草”的评论
docker有那种专门做数据存储的镜像,把数据库程序跟数据存储部分分别放在两个不同的容器里面,然后这样升级数据库的时候存储不会受到影响,而备份恢复数据的话不需要哭咔咔的去跑sql,只要定时commit数据存储container,到时候重新拉起来以前版本的commit的镜像即可,还是很方便的。引用来自“_Elvis”的评论
一直有个疑问,为什么经常看到有人把数据库也放Docker中?引用来自“zhenruyan”的评论
我们公司就是不知道上一任运维怎么想的引用来自“巴林的狗尾草”的评论
docker有那种专门做数据存储的镜像,把数据库程序跟数据存储部分分别放在两个不同的容器里面,然后这样升级数据库的时候存储不会受到影响,而备份恢复数据的话不需要哭咔咔的去跑sql,只要定时commit数据存储container,到时候重新拉起来以前版本的commit的镜像即可,还是很方便的。引用来自“zhenruyan”的评论
但是我们公司是一个日访问量不过百的公司引用来自“魏曼奇”的评论
oracle-xe-11g安装要读物理设备的,然后做设置。docker环境下,能否读到,这个不清楚了。引用来自“eechen”的评论
我自己编译打包的便携式PHP,自带依赖库,适用于所有Linux发行版,一个Linux系统上跑多少个版本都没有问题.Nginx和Apache也是同理,所以我从来就对Docker这种容器部署的技术不感兴趣.http://my.oschina.net/eechen/blog/411534