Giter Club home page Giter Club logo

decomposerize's Introduction

decomposerize

Netlify Status npm ShareVB on GitHub

http://decomposerize.com - Turns docker-compose file into docker run commands!

Looking for the reverse : http://composerize.com / Composerize

Want to convert from Docker compose file formats : http://composeverter.com / Composeverter

CLI

decomposerize can be run in the cli.

npm install decomposerize -g to install, and run as such:

$ decomposerize << docker-compose.yml

API

convertToDockerRunCommands(dockerComposeContent, configuration={})

  • dockerComposeContent: A string representing the Docker Compose file input.
  • configuration: optional configuration options in form of an object
    • command: A string that defines the Docker command to generate (e.g., 'docker run', 'docker create', 'docker container run'). It has a default value of 'docker run'.
    • rm: A boolean that, when true, adds the '--rm' option to the command line arguments. The default value is false.
    • detach: A boolean that, when true, adds the '-d' option to the command line arguments. The default value is false.
    • multiline: A boolean that, when true, emits the command in multiline shell command format. The default value is false.
    • 'long-args': A boolean that, when true, emits long command line arguments (e.g., '--tty' instead of '-t'). The default value is false.
    • 'arg-value-separator': A string representing the separator used between command arguments and their values. It can be either ' ' (space) or '='. The default value is ' ' (space).

returns

It returns the Docker run command(s) generated based on the input Docker Compose file and the provided configuration

How to use with node.js

Make sure to install the composerize package in your project by running:

npm install decomposerize

With the following code, you can easily integrate Decomposerize into your Node.js project and generate Docker run command(s) from Docker Compose configurations.

const convertToDockerRunCommands = require('decomposerize');

const dockerComposeInput = `
version: '3'
services:
  myapp:
    image: myapp-image
`;

const configuration = {
  command: 'docker run',
  rm: true,
  detach: false,
  multiline: true,
  'long-args': false,
  'arg-value-separator': ' ',
};

const dockerRunCommands = convertToDockerRunCommands(dockerComposeInput, configuration);

console.log('Generated Docker Run Commands:');
console.log(dockerRunCommands);

Contributing

  • Clone a fork of the repo and install the project dependencies by running yarn
  • Make your changes, and build the project by running make build
  • Test your changes with make test

Maintainers

decomposerize's People

Contributors

sharevb avatar

Stargazers

Nuno avatar Rain Sun avatar  avatar Jonas Fischer avatar κρμγ avatar Muhammed Kılıç avatar Lord_ZuzurNC avatar Rick Torres Jr. avatar izouxv avatar András Péteri avatar 榆木 avatar  avatar  avatar KurtisAsia avatar HellLord avatar Zach Sim avatar Isaac Whitfield avatar South Drifted avatar Charlie Cortial avatar Jeway avatar Gabriel Couture avatar  avatar  avatar  avatar Aaron Spalla avatar Nathan Rousseau avatar  avatar Omar Arain avatar  avatar SeryiBaran avatar  avatar  avatar MoYu avatar Jonathan Sims avatar Víctor Martín avatar Peter avatar Isaac avatar  avatar David avatar ivy duggan avatar  avatar David Dennison avatar Sergey Bezrukov avatar  avatar Rupert Franklin avatar Mark Larah avatar Charlie Drage avatar  avatar

Watchers

 avatar

decomposerize's Issues

[bug] "volumes" field support is missing

@composerize I'm using the online version: https://ray.run/tools/docker-compose-to-docker-run

Do you want to request a feature or report a bug?

  • feature request
  • bug report

Please provide a sample input docker run command

If I input a simplified configuration, decomposerize returns docker run commands without docker volume command, which will failed to start containers without the needed volume:

version: "3"

volumes:
  polyfill-cache:
    driver: juicedata/juicefs
    driver_opts:
      name: polyfill-cache
      metaurl: postgres://postgres:${META_PASSWORD}@meta-server:5432/juicefs
      storage: ${STORAGE_TYPE}
      bucket: ${BUCKET}
      access-key: ${ACCESS_KEY}
      secret-key: ${SECRET_KEY}

services:
  meta-server:
    image: postgres
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_DB=juicefs
      - POSTGRES_PASSWORD=${META_PASSWORD}
    volumes:
      - ./data:/var/lib/postgresql/data/
    restart: always

  api-service:
    depends_on:
      - meta-server
    image: polyfiller/api-service
    environment:
      - NODE_ENV=production
    volumes:
      - polyfill-cache:/tmp/@wessberg/polyfiller
    restart: always

then input the whole original configuration, an error thrown:

version: "3"

volumes:
  polyfill-cache:
    driver: juicedata/juicefs
    driver_opts:
      name: polyfill-cache
      metaurl: postgres://postgres:${META_PASSWORD}@meta-server:5432/juicefs
      storage: ${STORAGE_TYPE}
      bucket: ${BUCKET}
      access-key: ${ACCESS_KEY}
      secret-key: ${SECRET_KEY}

networks:
  polyfiller:

services:
  autoheal:
    image: willfarrell/autoheal:1.2.0
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    restart: always

  meta-server:
    depends_on:
      - autoheal
    image: postgres
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_DB=juicefs
      - POSTGRES_PASSWORD=${META_PASSWORD}
    volumes:
      - ./data:/var/lib/postgresql/data/
    networks:
      - polyfiller
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres"]
      interval: 3s
      retries: 5
    labels:
      - autoheal=true
    restart: always

  api-service:
    depends_on:
      - autoheal
      - meta-server
    image: polyfiller/api-service
    environment:
      - NODE_ENV=production
    volumes:
      - polyfill-cache:/tmp/@wessberg/polyfiller
    networks:
      - polyfiller
    healthcheck:
      test: ["CMD-SHELL", "curl -f http://localhost:3000/ || exit 1"]
      interval: 300000000s
      retries: 5
      start_period: 30s
    labels:
      - autoheal=true
    restart: always
    logging:
      driver: json-file
      options:
        max-size: 10m

  caddy:
    depends_on:
      - api-service
    image: caddy
    ports:
      - 80:80
      - 443:443
    networks:
      - polyfiller
    restart: always
    command: caddy reverse-proxy --from polyfiller.app --to api-service:3000

What is the current output?

docker run -e POSTGRES_USER=postgres -e POSTGRES_DB=juicefs -e POSTGRES_PASSWORD=${META_PASSWORD} -v ./data:/var/lib/postgresql/data/ --restart always postgres
docker run -e NODE_ENV=production -v polyfill-cache:/tmp/@wessberg/polyfiller --restart always polyfiller/api-service

or

A.forEach is not a function

What is the expected/desired output?

docker volume create --driver juicedata/juicefs \
  --opt name=polyfill-cache
  --opt metaurl=postgres://postgres:${META_PASSWORD}@meta-server:5432/juicefs
  --opt storage=${STORAGE_TYPE}
  --opt bucket=${BUCKET}
  --opt access-key=${ACCESS_KEY}
  --opt secret-key=${SECRET_KEY}
  polyfill-cache
docker run  -v ./data:/var/lib/postgresql/data/ \
  -e POSTGRES_USER=postgres
  -e POSTGRES_DB=juicefs
  -e POSTGRES_PASSWORD=${META_PASSWORD}
  --restart always
  postgres
docker run  -v polyfill-cache:/tmp/@wessberg/polyfiller \
  -e NODE_ENV=production
  --restart always
  polyfiller/api-service

[bug] "volumes

Do you want to request a feature or report a bug?

  • feature request
  • bug report

Please provide a sample input docker run command

nginx:
    ports:
        - '80:80'
    volumes:
        - '/var/run/docker.sock:/tmp/docker.sock:ro'
    image: nginx

What is the current output?*

some output

What is the expected/desired output?

some better output

Thanks for following this template and making decomposerize better for everyone else too!

Mappings are not supported for service environment, labels, and sysctls

Do you want to request a feature or report a bug?

  • feature request
  • bug report

Pretty self-explanatory, as per the Compose Specification some elements can be either an array or a mapping, the latter of which is not recognized by decomposerize.

Please provide a sample input docker run command

services:
  alpine:
    image: alpine
    environment:
      NODE_ENV: production
    labels:
      com.centurylinklabs.watchtower.enable: "false"
    sysctls:
      net.core.somaxconn: 1024
      net.ipv4.tcp_syncookies: 0

What is the current output?*

docker run -e "[object Object]" -l "[object Object]" --sysctl "[object Object]" alpine

What is the expected/desired output?

docker run -e NODE_ENV=production -l com.centurylinklabs.watchtower.enable=false --sysctl net.core.somaxconn=1024 --sysctl net.ipv4.tcp_syncookies=0 alpine

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.