如何将 YAML 文件转换为 Dockerfile
How to convert a YAML file to Dockerfile
在描述问题之前,我需要概述一下我正在做的事情:
我必须传递一个包含基本图像和依赖项的 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 文件中生成一个 docker 文件,其中包含 base_image 和依赖项.
提前致谢:)
编辑1:
我已经使用 npm install -g json2yaml 将 JSON 转换为 YAML。现在我必须使用 YAML 自动生成 docker 文件。
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
,在RUN apt-get update
行后的Dockerfile.template
中添加apt-get -y install openssh
,也在entrypoint_template.sh
行后添加service ssh start
#!/bin/bash
如果依赖有python
在Dockerfile.template
行RUN 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。
在描述问题之前,我需要概述一下我正在做的事情: 我必须传递一个包含基本图像和依赖项的 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 文件中生成一个 docker 文件,其中包含 base_image 和依赖项.
提前致谢:)
编辑1: 我已经使用 npm install -g json2yaml 将 JSON 转换为 YAML。现在我必须使用 YAML 自动生成 docker 文件。
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
,在RUN apt-get update
行后的Dockerfile.template
中添加apt-get -y install openssh
,也在entrypoint_template.sh
行后添加service ssh start
#!/bin/bash
如果依赖有python
在Dockerfile.template
行RUN 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。