Search code examples
dockerspring-bootdocker-composedockerfiledocker-machine

Is it necessary different Docker container for different os


I am new to Docker. I have few doubts on my understandings. This is what my understanding.

Docker solves these problems by creating a lightweight, standalone, executable package of your application that includes everything needed to run it including the code, the runtime, the libraries, tools, environments, and configurations

Does that mean the same container image will run on different Operating systems? For example:

I hope the below DockerFile would create the container image and run only on CENTOS. If I want to run my applicaiton different OS, then I should have different DockerFile configuration depending on the OS. In this case what is the advantage of docker containers? Can you pleae correct my understanding?

FROM centos
ENV JAVA_VERSION 8u31
ENV BUILD_VERSION b13
# Upgrading system
RUN yum -y upgrade
RUN yum -y install wget
# Downloading & Config Java 8
RUN wget --no-cookies --no-check-certificate --header "Cookie: oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/$JAVA_VERSION-$BUILD_VERSION/jdk-$JAVA_VERSION-linux-x64.rpm" -O /tmp/jdk-8-linux-x64.rpm
RUN yum -y install /tmp/jdk-8-linux-x64.rpm
RUN alternatives --install /usr/bin/java jar /usr/java/latest/bin/java 200000
RUN alternatives --install /usr/bin/javaws javaws /usr/java/latest/bin/javaws 200000
RUN alternatives --install /usr/bin/javac javac /usr/java/latest/bin/javac 200000
EXPOSE 8080
#install Spring Boot artifact
VOLUME /tmp
ADD /maven/sfg-thymeleaf-course-0.0.1-SNAPSHOT.jar sfg-thymeleaf-course.jar
RUN sh -c 'touch /sfg-thymeleaf-course.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/sfg-thymeleaf-course.jar"]

Solution

  • The Dockerfile you have just provided will create a Docker image that can run on all Operating systems that shares the Linux kernel such as: Debian, Ubuntu, Centos, Fedora just to name a few. And this is one of the Docker purpose, to be able to run the same image on any host that run the Linux kernel.

    However, as you specify CentOs (FROM centos) inside your Dockerfile the application that would be running inside the Docker container will be using CentOS as for its Operating System.