AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 722740
Accepted
Rotem
Rotem
Asked: 2015-09-17 06:13:58 +0800 CST2015-09-17 06:13:58 +0800 CST 2015-09-17 06:13:58 +0800 CST

构建 Docker 镜像以支持多环境

  • 772

我正在为我们的服务器构建 docker 映像,并且在创建 DOCKERFILE(s) 时,我正在寻找与多环境支持相关的最佳实践。

服务器的主要目的是在 Centos 6 上运行 LAMP,我想让 DOCKERFILE(s) 尽可能通用以支持开发和生产环境。这些图像将有很多常见的配置/实用程序,以及一些差异。

差异例如:

  • 仅限生产:监控工具、防病毒软件和不同的 LAMP 配置
  • 仅限开发:xdebug、分析工具和不同的 LAMP 配置

我考虑过使用类似以下结构的东西:

  • 定制基础操作系统 (C1)
    • 产品。基本操作系统 (C1E1)
    • 开发。基本操作系统 (C1E2)
  • Web 图像(httpd、apache..)(C2)
    • 产品。调整(C2E1)
    • 开发。调整(C2E2)
  • 数据库映像 (C3)
    • 产品。调整(C3E1)
    • 开发。调整(C3E2)
  • 数据图像 (C4)
    • 产品。调整(C4E1)
    • 开发。调整(C4E2)
  • Samba 映像(仅限开发人员)(C5)

但是如你所见,用目前的继承机制是不可能做到的,即使做到了,也是不可维护的。

我找不到在 DOCKERFILE 中使用 ENV 条件的方法(例如,仅在 RUN 命令中使用基于 Linux 的条件)。

目前我正在使用以下结构:

  • Base Image(常用的东西,比如LAMP、utils..)
    • 开发。图片(开发者特定的工具/配置)
    • 产品。图片(产品特定的......)

上述是否有任何最佳实践?图像重复(双重维护)是唯一的可能性吗?

docker
  • 1 1 个回答
  • 1092 Views

1 个回答

  • Voted
  1. Best Answer
    ETL
    2015-09-17T07:06:07+08:002015-09-17T07:06:07+08:00

    Docker 的概念之一是拥有相同的环境——如果生产环境与开发环境不同,那么当应用程序投入生产时,你不知道它是否会完全确定地工作。

    来自 docker.com:

    消除环境不一致

    通过将应用程序及其配置和依赖项打包在一起并作为容器运送,应用程序将始终按照本地设计、在另一台机器上、在测试或生产中工作。无需再担心必须将相同的配置安装到不同的环境中。

    也就是说,生产和开发当然会有差异,但这主要是在应用程序配置方面——例如,开发实例不会向客户发送电子邮件,而是向虚拟邮箱等发送电子邮件。

    我认为在生产和开发之间存在如此大的差异,就像您在帖子中提到的那样,这不是正确的做法。

    至于开发和生产配置之间的区别(就像我上面给出的示例),我个人认为有两种可行的方法。

    1. 在 Dev 中,一个 Dockerfile 覆盖生产和开发的公共基础的某些配置。

    2. 您的容器运行一些东西——启动 httpd 等。启动该过程的脚本将首先根据环境变量(例如docker run ... -e RUNAS=PROD ...)从 Git 或任何存储库中提取配置——这就是我所做的。在我的例子中,为 Tomcat 运行一个容器,Tomcat 启动脚本只是根据环境变量(例如-e VERSION=current)下载 war 文件版本,并根据定义它是生产还是开发(-e RUNAS=DEV)的变量从 Git 中提取配置文件。

    • 3

相关问题

  • 创建后立即启动 Docker 容器?

  • 如何在不指定命令的情况下在 Docker 容器中运行完整的操作系统?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve