如何将YAML文件转换为Dockerfile



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

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

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文件示例。yml类似:

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

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

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

提前感谢:(

第1版:我已经使用npm install-gjson2yaml将JSON转换为YAML。现在我必须使用YAML来自动生成dockerfile。

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

入口点_模板.sh

#!/bin/bash

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

如果依赖项具有ssh,则在RUN apt-get update行之后的Dockerfile.template中添加apt-get -y install openssh,也在#!/bin/bash之后的entrypoint_template.sh中添加service ssh start

如果依赖关系具有python,则在RUN apt-get update行之后的Dockerfile.template中添加apt-get -y install python

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

最后将Dockerfile.template改为Dockerfile,将entrypoint_template.sh更改为entrypoint.sh

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

最新更新