/dockerfile-generator2

Dockerfile Generator for Node.js

Primary LanguageJavaScriptMIT LicenseMIT

dockerfile-generator

Generating Dockerfile from JSON and generate JSON document from a Dockerfile.

Node.js CI npm version

Latest release note

Version 5.0.3 (28.10.2024)

  • Update dependencies

Version 5.0.2 (21.10.2023)

  • Update dependencies

Version 5.0.1 (19.09.2023)

  • Update dependencies

Version 5.0.0 (24.01.2023)

  • Reorganize code base
  • Update dependencies
  • Change code style

Release notes of previous versions: Release notes.

Installation

npm install dockerfile-generator

How to use the library

You can find here the reference doc: References.

const generator = require('dockerfile-generator')

const result = await generator.generateDockerFile(inputJson)
// Result is a generated Dockerfile.

const generateResult = generator.generateDockerFileFromArray(inputArray)
// Result is a generated Dockerfile.

const convertedJSON = generator.convertToJSON(inputDockerFile)
// Result is a generated JSON from Dockerfile.

const genereratedIgnore = await generator.generateIgnoreFile(ignoredElementsArray)
// generatedIgnore is a generated dockerignore file

Examples

Example for Dockerfile Generation JSON Input ( generateDockerFile function )
Input
    {
      "from": "nginx:latest",
      "run": [ "adduser", "--disabled-password", "-gecos", "", "testuser" ],
      "volumes": [ "/home/testuser/app" ],
      "user": "testuser",
      "working_dir": "/home/testuser/app",
      "labels": {
        "name": "value"
      },
      "env": {
        "env1": "value1",
        "env2": "value2"
      },
      "add": {
        "test.run" : "/home/testuser/app/test.run"
      },
      "copy":  {
        "test.cmd" : "/home/testuser/app/test.cmd"
      },
      "entrypoint": "tail",
      "cmd": ["-f", "/dev/null"],
      "expose": ["80/tcp"],
      "args": [ "value1", "value2"],
      "stopsignal": "stop",
      "shell": [ "/bin/bash", "-c", "echo", "hello" ],
      "comment": "This is a comment"
    }
Output
FROM nginx:latest
RUN [ "adduser", "--disabled-password", "-gecos", "", "testuser" ]
VOLUME /home/testuser/app
USER testuser
WORKDIR /home/testuser/app
LABEL name=value
ENV env1=value1
ENV env2=value2
ADD test.run /home/testuser/app/test.run
COPY test.cmd /home/testuser/app/test.cmd
ENTRYPOINT [ "tail" ]
CMD [ "-f", "/dev/null" ]
EXPOSE 80/tcp
ARG value1
ARG value2
STOPSIGNAL stop
SHELL [ "/bin/bash", "-c", "echo", "hello"]
# This is a comment
Example for Dockerfile Generation Array Input ( generateDockerFileFromArray function )
Input
  [
    {
      "from": "nginx:latest"
    },
     {
      "run": [ "adduser", "--disabled-password", "-gecos", "", "testuser" ]
    },
     {
      "volumes": [ "/home/testuser/app" ]
    },
     {
      "user": "testuser"
    },
     {
      "working_dir": "/home/testuser/app"
    },
     {  
      "labels": {
        "name": "value"
      }
    },
     {
      "env": {
        "env1": "value1",
        "env2": "value2"
      }
    },
     {
      "add": {
        "test.run" : "/home/testuser/app/test.run"
      }
    },
     {
      "copy":  {
        "test.cmd" : "/home/testuser/app/test.cmd"
      }
    },
    {  
      "entrypoint": "tail"
    },
    {
      "cmd": ["-f", "/dev/null"]
    },
    {
      "expose": ["80/tcp"]
    },
    {
      "args": [ "value1", "value2"]
    },
    {
      "stopsignal": "stop"
    },
    {
      "shell": [ "/bin/bash", "-c", "echo", "hello" ]
    },
  ]
Output
FROM nginx:latest
RUN [ "adduser", "--disabled-password", "-gecos", "", "testuser" ]
VOLUME /home/testuser/app
USER testuser
WORKDIR /home/testuser/app
LABEL name=value
ENV env1=value1
ENV env2=value2
ADD test.run /home/testuser/app/test.run
COPY test.cmd /home/testuser/app/test.cmd
ENTRYPOINT [ "tail" ]
CMD [ "-f", "/dev/null" ]
EXPOSE 80/tcp
ARG value1
ARG value2
STOPSIGNAL stop
SHELL [ "/bin/bash", "-c", "echo", "hello"]

Example for JSON Generation ( convertToJSON function )

Example Input
FROM nginx:latest
RUN [ "adduser", "--disabled-password", "-gecos", "", "testuser" ]
VOLUME /home/testuser/app
USER testuser
WORKDIR /home/testuser/app
LABEL name=value
ENV env1=value1
ENV env2=value2
ADD test.run /home/testuser/app/test.run
COPY test.cmd /home/testuser/app/test.cmd
ENTRYPOINT [ "tail" ]
CMD [ "-f", "/dev/null" ]
EXPOSE 80/tcp
ARG value1
ARG value2
STOPSIGNAL stop
SHELL [ "/bin/bash", "-c", "echo", "hello"]
# This is a comment
Example Output
    {
      "from": "nginx:latest",
      "run": [ "adduser", "--disabled-password", "-gecos", "", "testuser" ],
      "volumes": [ "/home/testuser/app" ],
      "user": "testuser",
      "working_dir": "/home/testuser/app",
      "labels": {
        "name": "value"
      },
      "env": {
        "env1": "value1",
        "env2": "value2"
      },
      "add": {
        "test.run" : "/home/testuser/app/test.run"
      },
      "copy":  {
        "test.cmd" : "/home/testuser/app/test.cmd"
      },
      "entrypoint": "tail",
      "cmd": ["-f", "/dev/null"],
      "expose": ["80/tcp"],
      "args": [ "value1", "value2"],
      "stopsignal": "stop",
      "shell": [ "/bin/bash", "-c", "echo", "hello" ],
      "comment_1": "This is a comment"
    }

Example for .dockerignore Generation ( generateIgnoreFile function )

Input
['node_modules','.git']
Output
node_modules
.git

License

Copyright (c) 2015 Tibor Udvari. Released under the MIT license. See LICENSE for details.