代码之家  ›  专栏  ›  技术社区  ›  shuberman

如何将yaml文件转换为dockerfile

  •  0
  • shuberman  · 技术社区  · 7 年前

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

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

    json文件 示例.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);
    }
    
    };
    

    我有一个山药文件 示例.yml 比如:

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

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

    请注意,这是一个poc,我正在尝试创建一个无服务器的微服务,它从json文件中生成一个dockerfile,作为包含基本映像和依赖项的输入。

    提前谢谢:)

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

    1 回复  |  直到 7 年前
        1
  •  1
  •   atline    7 年前

    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 ,添加 apt-get -y install openssh 在里面 Dockerfile.template 排在 RUN apt-get update ,还添加 service ssh start 在里面 entrypoint_template.sh 之后 #!/bin/bash

    如果依赖关系 python 添加 apt-get -y install python 在里面 dockerfile.template文件 排在 运行apt get update

    然后在所有依赖循环完成后,添加 tail -f /dev/null 到最后 入口点模板.sh 如果你最后的命令不在前线。

    最后改变 dockerfile.template文件 Dockerfile ,和更改 入口点模板.sh entrypoint.sh

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