2

现在我感觉自己像是从上个世纪来的,我没有足够的勇气开始使用 docker。我想在开始之前清除我对 docker 的疑虑。我的问题主要是在云或托管环境上部署/运行 docker 镜像。

  • 我可以使用任何类型的服务器(例如 wildfly、payara)和/或数据库服务器(例如 mysql、oracle)构建 docker 映像,它可以在启用 docker 的云/数据中心上运行吗?
  • 如果是,那么数据库文件和静态存储(例如图像、上传的文档、日志)等持久数据如何存储在 docker 图像或其他地方?当我更新我的应用程序并重新部署新映像时,这些文件会发生什么?

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

4

3 回答 3

2

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

我可以使用任何类型的服务器(例如 wildfly、payara)和/或数据库服务器(例如 mysql、oracle)构建 docker 映像,它可以在启用 docker 的云/数据中心上运行吗?

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

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

示例图像:

如果是,那么数据库文件和静态存储(例如图像、上传的文档、日志)等持久数据如何存储在 docker 图像或其他地方?当我更新我的应用程序并重新部署新映像时,这些文件会发生什么?

通常,您需要将持久数据存储在 docker 映像外部并将其作为卷安装到映像中: https ://docs.docker.com/engine/tutorials/dockervolumes/

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

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

所以你有了:

  • 来自您的云主机(或 docker 自己)的文档
  • 云中运行 docker 引擎的主机
  • 0..n 图像,您可以从 dockerhub 获取或自己构建。
  • 存储此主机上的持久数据或从您在启动时安装到 docker 映像中的其他位置安装的数据。这是例如 mysql 数据文件夹所在的位置,或者您可以保存日志等的位置。

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

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

于 2016-09-14T11:19:26.123 回答
0

我可以使用任何类型的服务器(例如 wildfly、payara)和/或数据库服务器(例如 mysql、oracle)构建 docker 映像,并且它可以在启用 docker 的云/数据中心上工作吗?

您可以构建自己的 Docker 映像或使用已预先打包并由云提供商验证的解决方案。例如,这是一个基于 Docker 的自动集群 GlassFish 实现,可以在 Jelastic PaaS 上运行和管理。

如果是,那么数据库文件和静态存储(例如图像、上传的文档、日志)等持久数据如何存储在 docker 图像或其他地方?当我更新我的应用程序并重新部署新映像时,这些文件会发生什么?

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

于 2017-11-03T10:06:06.003 回答
0

我也有在阿里云和 AWS 上运行 docker 的经验。我没有看到在两个云提供商上使用 docker 有什么不同。无论云提供商如何,Docker 镜像都可以在所有 linux 平台上以相同的方式构建。但是,需要使用 docker 卷来处理数据的持久性。但是,对于数据库,建议使用阿里云中的RDS等托管服务,而不是使用docker。

于 2017-03-28T07:58:10.663 回答