【问题标题】:How to convert a YAML file to Dockerfile如何将 YAML 文件转换为 Dockerfile
【发布时间】:2018-07-13 05:12:10
【问题描述】:

在描述问题之前,我需要概述一下我在做什么: 我必须传递一个包含基本图像和依赖项的 JSON 文件并生成一个 YAML 文件。我能够生成 YAML 文件,但下一步是使用生成的 YAML 文件来制作 docker 文件。

我的想法: 基本上,dockerhub 将所有程序(如 pyhton3、java 等)安装在 library/docker 和许多其他类似文件夹上。

JSON 文件 sample.json

{
    "base_image" : "ubuntu",
    "dependency" : ["dependency1", "dependency2"]
}

我的 handler.js 函数用于验证 json 文件(这里的事件是 JSON 文件):

'use strict';
//const fs = require("fs")
module.exports.validate = (event, context, callback) => {

var JSONObject = JSON.parse(event.body);
var base_image = JSONObject.base_image;
var dependency = JSONObject.dependency;
if(base_image == "" || dependency == "")
{
  const response = {
    statusCode: 400,
    body: JSON.stringify({
    message: "false"
  })
  };
  callback(null, response);
}
else{
  const response = {
    statusCode: 200,
    body: JSON.stringify({
    message: true
  }),
  };

callback(null, response);
}

};

我有一个 YAML 文件 sample.yml,例如:

---
  base_image : "ubuntu"
  dependency:
    - "dependency1"
    - "dependency2"

我必须从中生成一个 docker 文件。这可能吗? 如果有怎么办?

请注意这是一个 POC,我正在尝试制作一个无服务器微服务,该微服务从作为输入提供的 json 文件生成一个 dockerfile,其中包含 base_image 和依赖项。

提前致谢:)

编辑1: 我已经使用 npm install -g json2yaml 将 JSON 转换为 YAML。现在我必须使用 YAML 来自动生成 dockerfile。

【问题讨论】:

  • 我想要一个 YAML 的 dockerfile,我已经按照你的建议做了。
  • 对不起,我误会了。但是您可以修改您的问题以删除 js 部分吗?建议只输入 yaml 和您需要的输出 dockerfile? Dockerfile 有 FROM、RUN、WORKDIR、ADD、CMD、ENTRYPOINT 等,它们是如何在你的 yaml 中定义的?人们需要一个最小的可行问题,然后我们可以快速帮助您。还有你从现在开始尝试的东西。
  • 很抱歉没有提到输出 dockerfile 的外观,但要大致了解一下,我必须自动生成一个 docker 文件,该文件创建一个带有 JSON 文件/As 中提到的依赖项的 java docker 映像稍后在 YAML 中也可以看到。
  • 所以让我理解你的真正目的:你想要一个基于 ubuntu 的 docker 图像,并且依赖关系可能是动态的,基于 yaml。如果你指定pythonssh,那么dockerfile应该自动有pythonssh安装步骤。然后你可以动态生成dockerfile,构建它。终于有了基于ubuntu的python、ssh的镜像?

标签: javascript docker yaml serverless


【解决方案1】:

Dockerfile.template

FROM ubuntu:16.04
RUN apt-get update

WORKDIR /root
ADD ./entrypoint.sh entrypoint.sh
RUN chmod 775 ./entrypoint.sh
CMD ./entrypoint.sh

entrypoint_template.sh

#!/bin/bash

你需要编写一个脚本,一些逻辑如下:

如果依赖有ssh,在Dockerfile.template后面RUN apt-get update后面加上apt-get -y install openssh,在entrypoint_template.sh后面#!/bin/bash后面加上service ssh start

如果依赖项有pythonDockerfile.templateRUN apt-get update 行之后添加apt-get -y install python

然后在所有依赖循环完成后,如果您的最后一条命令不在前面,请将tail -f /dev/null 添加到entrypoint_template.sh 的末尾。

最后把Dockerfile.template改成Dockerfile,把entrypoint_template.sh改成entrypoint.sh

这是一个纯硬编码逻辑,但没有方法,除非你能有一个AI方法来模拟程序员为你自动编写每个场景的dockerfile。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-13
    • 1970-01-01
    • 1970-01-01
    • 2011-06-22
    • 2018-12-04
    • 1970-01-01
    • 2012-10-12
    • 2021-07-21
    相关资源
    最近更新 更多