如何在云端或数据中心使用 Docker

How do I use Docker on cloud or datacenter

我没有足够的勇气开始使用 docker 现在我感觉就像来自上个世纪。我想在开始之前澄清我对 docker 的疑虑。我的问题主要针对 deploying/running docker 云或托管环境中的图像。

我阅读了有关什么是 docker 的帖子,但找不到具体答案。请原谅我没有做足够的谷歌搜索。

我在 AWS 和其他云提供商上有 运行 docker。如果您有一些系统管理和/或 devops 经验,这真的不难。关于云托管商和入门,大多数提供商都有一些关于如何开始使用 docker 及其基础设施的教程:

Can I build a docker image with any type of server (eg. wildfly, payara) and/or database server (eg. mysql, oracle) and will it work on docker enabled cloud/datacenter?

要启动服务器并 运行ning,您只需要在主机上安装 docker 引擎,许多发行版都有软件包:

安装 docker 引擎后,您基本上可以为任何服务器或服务创建 docker 文件。希望你不需要,在大多数情况下,因为有无数 docker 文件和预配置,供应商维护的图像已经在 dockerhub 上可用(我使用 wildfly、elk-stack 和 mysql 例如)。在选择要维护的图像时要小心,否则您最终会在图像中遇到可能永远无法修复的安全问题!或者你必须自己做!

示例图片:

If it's yes how about persistent datas like database files and static storages (eg. images, uploaded documents, logs) those are stored in docker images or somewhere else? What will happen to those files when I update my application and redeploy new image?

一般来说,您会希望在 docker 图像外部存储持久数据并将其作为卷装载到图像中: https://docs.docker.com/engine/tutorials/dockervolumes/

一些基于云的存储提供商可能更容易以其他方式安装或连接,但这种卷方法是标准的,IMO。

对于日志文件,我实际上将它们推送到 ELK 服务器,因此不一定需要为日志提供一个卷。然而,由于 ELK 服务器也是一个 docker 图像,它确实有一个数据持久化的卷。

所以你有:

  • 来自您的云托管商(或 docker 他们自己)的文档
  • 您云中的主机 运行ning docker 引擎
  • 0..n 个图像,您可以从 dockerhub 抓取或自己构建。
  • 存储此主机上的持久数据或从您在启动时装载到 docker 图像的其他地方装载的数据。这是例如mysql 数据文件夹存在,或者您可以在其中保存日志等。

当然,它可以从那里变得更加复杂,例如如何透明地扩展和更新您的环境等,但那是例如kubernetes 或 docker swarm 或其他一些解决方案(我自己编写了一些脚本,但不需要大型系统的健壮性或弹性可扩展性)。

关于集群管理,需要注意的是 Swarm 现在包含在 Docker Core 中。这在社区中引起了一些争议,甚至讨论了核心的分支:

我在阿里云和 AWS 上也有 运行 docker 经验。我没有发现在两个云提供商上使用 docker 有什么不同。 Docker 图像可以在所有 linux 平台上以相同的方式构建,无论云提供商如何。但是,使用 docker 卷需要注意数据的持久性。但是数据库建议使用阿里云的RDS等托管服务,不要使用docker.

Can I build a docker image with any type of server (eg. wildfly, payara) and/or database server (eg. mysql, oracle) and will it work on docker enabled cloud/datacenter?

您可以构建自己的 Docker 映像或使用已预先打包并由云提供商验证的解决方案。例如,这里有一个 auto-clustering Docker-based implementation of GlassFish 可以 运行 并在 Jelastic PaaS 上进行管理。

If it's yes how about persistent datas like database files and static storages (eg. images, uploaded documents, logs) those are stored in docker images or somewhere else? What will happen to those files when I update my application and redeploy new image?

对于上述集群,所有数据都保存在容器中,重启后保持不变。作为一种选择,如果您希望在其他容器之间共享数据,您还可以连接一个单独的数据存储容器。