DockerFile to run a java program

前端 未结 8 1464
礼貌的吻别
礼貌的吻别 2021-02-19 16:10

Hi I\'m new to Docker and trying out to write a new image from the scratch. I am writing this dockerFile to compile and run a simple java program available in the same directory

相关标签:
8条回答
  • 2021-02-19 16:26

    Another way...

    1. you have to use "java:8" as base image or install jdk on "ubuntu" image.
    2. build the image

      docker build -t imagename .
      
    3. run it(mounting Helloworld.java to container)

      docker run -it -v ~/system-path:/javafolder imagename
      

    type these commands to execute inside container-

    cd javafolder
    
    javac HelloWorld.java
    
    java HelloWorld
    
    0 讨论(0)
  • 2021-02-19 16:29

    Explanation

    From the Dockerfile reference.

    There can only be one CMD instruction in a Dockerfile. If you list more than one CMD then only the last CMD will take effect.

    That is why the javac command is not executed and starting your container results in no such file or directory was found.

    CMD and ENTRYPOINT are used for the tasks that shall be started once you execute the container (entrypoint level).

    The main purpose of a CMD is to provide defaults for an executing container.

    That applies to the line CMD java HelloWorld, but not to CMD javac HelloWorld.java which is more of a build step. That is what RUN is for.

    Solution

    Change the second line to RUN javac HelloWorld.java.

    FROM scratch
    RUN javac HelloWorld.java
    CMD java HelloWorld
    

    The resulting committed image [from line two] will be used for the next step in the Dockerfile.

    Update

    As Diyoda pointed out, make sure that the FROM image supplies java.

    0 讨论(0)
  • 2021-02-19 16:29

    Here I am writing all commands and code that need to execute in order to run a hello world program on docker container without any build tool like gradle or maven.

    devopsrider@del1-lhp-n02552:~ sudo su
    root@del1-lhp-n02552:~# mkdir devopsrider
    root@del1-lhp-n02552:~# cd devopsrider
    root@del1-lhp-n02552:~/devopsrider# vi Test.java
    
    public class Test{
            public static void main(String args[]){
                    System.out.println("Hello World");
    
            }
    }
    
    root@del1-lhp-n02552:~# javac Test.java
    root@del1-lhp-n02552:~/devopsrider# ls
    Test.class  Test.java
    
    root@del1-lhp-n02552:~/devopsrider# vi manifest.txt
    Manifest-Version: 1.2
    Main-Class: Test
    
    root@del1-lhp-n02552:~/devopsrider# jar cvfm Test.jar manifest.txt Test.class
    added manifest
    adding: Test.class(in = 413) (out= 287)(deflated 30%)
    
    root@del1-lhp-n02552:~/devopsrider# ls
    manifest.txt  Test.class  Test.jar  Test.java
    
    root@del1-lhp-n02552:~# vi Dockerfile
    FROM openjdk:8
    ADD Test.jar Test.jar
    ENTRYPOINT ["java", "-jar", "Test.jar"]
    
    root@del1-lhp-n02552:~/devopsrider# docker build -f Dockerfile -t hello-world-image .
    
    Sending build context to Docker daemon  6.656kB
    Step 1/3 : FROM openjdk:8
    8: Pulling from library/openjdk
    Digest: sha256:c168e211f317cc5db38b19fe62641316dbc1e60e5b53ad45ee440ba8152c20b9
    Status: Downloaded newer image for openjdk:8
     ---> 57c2c2d2643d
    Step 2/3 : ADD Test.jar Test.jar
     ---> b7d512e51b60
    Step 3/3 : ENTRYPOINT ["java", "-jar", "Test.jar"]
     ---> Running in 07c871318e8a
    Removing intermediate container 07c871318e8a
     ---> 24b1a0acd314
    Successfully built 24b1a0acd314
    Successfully tagged hello-world-image:latest
    
    root@del1-lhp-n02552:~/devopsrider# docker run hello-world-image
    Hello World
    

    For complete tutorial to run java Hello World program on docker container visit http://www.devopsrider.com/2019/11/19/hello-world-java-program-on-docker-container/

    0 讨论(0)
  • 2021-02-19 16:30

    You can either use CMD or ENTRYPOINT.

    Sample :

    CMD ["sh", "-c", "java -jar Service.jar"]

    0 讨论(0)
  • 2021-02-19 16:31

    FROM java:8

    WORKDIR /
    
    ADD HelloWorld.java HelloWorld.java
    
    CMD javac HelloWorld.java
    
    ADD HelloWorld.class HelloWorld.class
    
    CMD java Test
    

    Update the above details in your Dockerfile the rebuild the docker image and run.

    0 讨论(0)
  • 2021-02-19 16:37

    Try to follow this, i have mentioned all the steps to be followed below.

    Step 1. Create a java file HelloWorld.java

    public class HelloWorld {
    
      public static void main(String[] args){
    
        System.out.println("Hello World! ");
    
      }
    

    Step 1.1 Generate class file Ex: javac HelloWorld.java

    Step 2. Create manifest.txt file

    Manifest-Version: 1.0
    Main-Class: HelloWorld
    

    Step 3. Create jar file Ex: jar cfm HelloWorld.jar manifest.txt HelloWorld.class

    Step 4. Create a file with name Dockerfile (no extension)

    FROM java:7
    
    WORKDIR /
    
    ADD HelloWorld.jar HelloWorld.jar
    
    EXPOSE 8080
    
    CMD java -jar HelloWorld.jar
    

    Step 5. Come out of the current directory For exampe: From C:/custom-docker/java-docker to C:/custom-docker and run this cmd docker build -t java-docker (use the folder name, here java-docker)

    Note: Run the command prompt as administrator for windows or prefix sudo in all commands for linux

    Step 6. Skipping (push and pull) - Optional

    Step 7. Run this cmd docker images and find the latest Image ID

    Example:

    REPOSITORY | TAG | IMAGE ID | CREATED SIZE < none > | < none > | 58df7fdecdeb | 3 minutes ago

    Step 8. Finally run this cmd docker run 58df7fdecdeb, and you could see output as

    "Hello World"

    PS. Thanks Julia Bondarchuk

    -- Happy coding :)

    0 讨论(0)
提交回复
热议问题