How to create docker image with nodejs 12, java, gcc, g++,python3, monocs

Tags: , ,



I am trying to dockerize my NodeJs & Express API . In my API iam using https://www.npmjs.com/package/compile-run package to compile and run C, Cpp,Java,JavaScript(Node.js env), Python languages. This package requires all 5 compilers(gcc,g++,nodejs,python3,javac) installed on the server. If any compiler misses, it throws error.

In my local(undockerized) the API is working completely fine on both windows & ubuntu(As I have installed compilers on them).

I am trying to replicate the same on my docker image. But I am stuck.

Look at my Dockerfile:

FROM node:12
WORKDIR /app
COPY package.json /app
RUN npm install
COPY . /app
CMD ["npm","start"]

I think node-12 image comes along with gcc, g++,python3 and nodejs(obviously). But the issue is with java. I am not able to compile java code.

so I tried it this way

FROM node:12
RUN apt-get -y install default-jre
# RUN java -version
RUN apt -y install default-jre
RUN apt install openjdk-11-jre-headless
RUN java -version

WORKDIR /app


COPY package.json /app
RUN npm install
COPY . /app
CMD ["npm","start"]

But I am not able to install open-jdk or open-jre with apt/apt-get. What is the right way to configure docker?

This is my nodeJS API repository https://github.com/yogendramaarisetty/online-compiler-api

Answer

First you must update the package list with apt-get update, then you can install openjdk-8. openjdk-11 isn’t available with that distribution of node. I used docker run -it node:12 /bin/bash to see what there was,

FROM node:12
RUN apt-get update && apt-get install -y openjdk-8-jdk

For example,

$ cat Dockerfile                                         
FROM node:12
RUN apt-get update && apt-get install -y openjdk-8-jdk
$ docker build --tag mynode:1.0 .
$ docker run -it mynode:1.0 /bin/bash                                    
root@d70858199dd1:/# java -version
openjdk version "1.8.0_265"
OpenJDK Runtime Environment (build 1.8.0_265-8u265-b01-0+deb9u1-b01)
OpenJDK 64-Bit Server VM (build 25.265-b01, mixed mode)
root@d70858199dd1:/# javac -version
javac 1.8.0_265
root@d70858199dd1:/#

If you really do need Java 11, there are multiple ways and places to get openjdk-11. One is bell-sw. For example,

$ cat Dockerfile
FROM node:12
RUN apt-get update && apt-get install -y libasound2 libxtst6
RUN wget https://download.bell-sw.com/java/11.0.7+10/bellsoft-jdk11.0.7+10-linux-amd64.deb && 
    apt install ./bellsoft-jdk11.0.7+10-linux-amd64.deb
$ docker build --tag mynode:1.1 .
$ docker run -it mynode:1.1 /bin/bash
root@37771ce98727:/# java -version
openjdk version "11.0.7" 2020-04-14 LTS
OpenJDK Runtime Environment (build 11.0.7+10-LTS)
OpenJDK 64-Bit Server VM (build 11.0.7+10-LTS, mixed mode)
root@37771ce98727:/# javac -version
javac 11.0.7


Source: stackoverflow