/dockerfile-generator

Dockerfile Generator for NodeJS

Primary LanguageJavaScriptMIT LicenseMIT

dockerfile-generator

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

Build Status Code Climate Test Coverage npm version

About the package

The main goal of this package is to support a Dockfile generation from Javascript. You are able to use all keyword from a Dockerfile reference.

Dockerfile reference is HERE.

Changes of the Latest Release

Version 3.2.4 (2019.12.01)

  • Update dependencies

You can find all Release Notes HERE.

Usage

var generator = require('dockerfile-generator')

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

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

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

let 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" ]
    }
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 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"]
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" ]
    }

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.