Рубрики
Без рубрики

Примеры приложений Docker и Java

– Примеры приложений Docker и Java

В этом уроке мы покажем вам, как настроить Java-приложение (исполняемый файл Jar).

Протестировано с

  • Докер 19.03
  • Ubuntu 19
  • Java 8
  • Знаток

В конце статьи мы создадим исполняемый файл Jar и запустим его в контейнере docker.

1. Каталог проектов

1.1 Стандартная структура проекта Maven. Смотрите файл Dockerfile в корне проекта? Нам нужен только этот Dockerfile текстовый файл для настройки Java-приложения.

Примечание .идея папки и docker-java-app.iml являются файлами конфигурации IDEA, игнорируйте их.

2. Приложение Maven и Java

Теперь мы создадим исполняемый файл Jar. Этот Jar будет использовать синтаксический анализатор HTML jsoup для поиска всех ссылок с URL-адреса или веб-страницы.

2.1 Зависимости проекта.




    4.0.0
    com.mkyong
    docker-java-app
    1.0

    docker-java-app
    https://www.mkyong.com

    
        UTF-8
        1.8
        1.8
        1.8
        1.12.1
        5.4.0
    

    

        
            org.jsoup
            jsoup
            ${jsoup.version}
        

        
            org.junit.jupiter
            junit-jupiter-params
            ${junit.version}
            test
        

    

    
        find-links
        

            
                org.apache.maven.plugins
                maven-compiler-plugin
                3.8.0
                
                    ${java.version}
                    ${java.version}
                
            

            
            
                org.apache.maven.plugins
                maven-jar-plugin
                3.2.0
                
                    
                        
                            true
                            com.mkyong.App
                            lib/
                        
                    
                
            

            
            
                org.apache.maven.plugins
                maven-dependency-plugin
                3.1.1
                
                    
                        copy-dependencies
                        package
                        
                            copy-dependencies
                        
                        
                            
                                ${project.build.directory}/lib/
                            
                        
                    
                
            

        
    

2.2 Простое приложение Java.

package com.mkyong;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import java.io.IOException;
import java.util.HashSet;
import java.util.Set;

public class App {

    public static void main(String[] args) throws IOException {

        if (args.length < 1) {
            System.err.println("[Usage] jar -jar find-links.jar ");
            return;
        }

        String url = args[0];

        for (String link : findLinks(url)) {
            System.out.println(link);
        }

    }

    private static Set findLinks(String url) throws IOException {

        Document doc = Jsoup.connect(url)
                .data("query", "Java")
                .userAgent("Mozilla")
                .cookie("auth", "token")
                .timeout(3000)
                .get();

        Set links = new HashSet<>();

        Elements elements = doc.select("a[href]");

        for (Element element : elements) {
            links.add(element.attr("href"));
        }

        return links;
    }
}

3.3 Пакет Maven и запустите его. Он создаст исполняемый файл jar по адресу target/find-links.jar , и скопируйте jsoup зависимости в целевую/lib папку

Примечание – Забудьте о зависимостях JUnit 5 , мы не собираемся создавать никаких модульных тестов.

$ cd ~/projects/docker-java-app

$ mvn package

$ tree
target
    â"œâ"€â"€ find-links.jar
    â"œâ"€â"€ lib
    â"'   â"œâ"€â"€ apiguardian-api-1.0.0.jar
    â"'   â"œâ"€â"€ jsoup-1.12.1.jar
    â"'   â"œâ"€â"€ junit-jupiter-api-5.4.0.jar
    â"'   â"œâ"€â"€ junit-jupiter-params-5.4.0.jar
    â"'   â"œâ"€â"€ junit-platform-commons-1.4.0.jar
    â"'   â""â"€â"€ opentest4j-1.1.1.jar

$ java -jar target/find-links.jar
[Usage] jar -jar find-links.jar 

$ java -jar target/find-links.jar https://google.com

https://play.google.com/?hl=en&tab=w8
https://www.google.com/calendar?tab=wc
/intl/en/about.html
https://photos.google.com/?tab=wq&pageId=none
https://drive.google.com/?tab=wo
https://translate.google.com.my/?hl=en&tab=wT
//...

Готово, далее мы начнем это find-links.jar в контейнере докера.

4. Файл настройки

Файл Dockerfile представляет собой текстовый файл, содержащий все команды для сборки образа docker.

4.1 Просмотрите команды в файле Dockerfile , он создает базу изображений docker на openjdk:8-jdk-alpine , в alpine linux с установленным openjdk-8 , изменил рабочий каталог с помощью WORKDIR и скопируйте исполняемый файл jar и его зависимости по этому пути //usr/локальный/runme/ и запустите файл jar с ТОЧКОЙ ВХОДА .

FROM openjdk:8-jdk-alpine

ARG JAR_FILE=target/find-links.jar
ARG JAR_LIB_FILE=target/lib/

# cd /usr/local/runme
WORKDIR /usr/local/runme

# copy target/find-links.jar /usr/local/runme/app.jar
COPY ${JAR_FILE} app.jar

# copy project dependencies
# cp -rf target/lib/  /usr/local/runme/lib
ADD ${JAR_LIB_FILE} lib/

# java -jar /usr/local/runme/app.jar
ENTRYPOINT ["java","-jar","app.jar"]

Примечание Мы можем найти больше базовых изображений из docker hub

5. Докеризация Java-Приложения

Теперь нам нужно выполнить команды docker, чтобы проанализировать Файл Dockerfile для сборки образа docker.

5.1 Перейдите в папку, содержащую Dockerfile .

$ cd project

$ pwd
/home/mkyong/projects/docker-java-app

$ ls -lsah

4.0K drwxr-xr-x  5 mkyong mkyong 4.0K Jan  21 18:35 .
4.0K drwxr-xr-x  6 mkyong mkyong 4.0K Jan  20 15:27 ..
4.0K -rw-r--r--  1 mkyong mkyong  352 Jan  21 18:26 Dockerfile
4.0K -rw-r--r--  1 mkyong mkyong 3.3K Jan  21 18:13 pom.xml
4.0K -rw-r--r--  1 mkyong mkyong  267 Jan  21 18:35 readme.md
4.0K drwxr-xr-x  4 mkyong mkyong 4.0K Jan  20 15:27 src
4.0K drwxr-xr-x 10 mkyong mkyong 4.0K Jan  21 18:17 target

5.2 Позвольте создать образ docker с именем sudo docker build -t:тегом.

$ pwd
/home/mkyong/projects/docker-java-app

$ sudo docker build -t docker-java:1.0 .

[sudo] password for mkyong:
Sending build context to Docker daemon  1.206MB
Step 1/7 : FROM openjdk:8-jdk-alpine
 ---> a3562aa0b991
Step 2/7 : ARG JAR_FILE=target/find-links.jar
 ---> Running in 8eaabda7c1ce
Removing intermediate container 8eaabda7c1ce
 ---> 50eedc2911be
Step 3/7 : ARG JAR_LIB_FILE=target/lib/
 ---> Running in 7a6c30690589
Removing intermediate container 7a6c30690589
 ---> 053f8ebac2a0
Step 4/7 : WORKDIR /usr/local/runme
 ---> Running in 91ab9f0f41d3
Removing intermediate container 91ab9f0f41d3
 ---> eadff9da3d5d
Step 5/7 : COPY ${JAR_FILE} app.jar
 ---> f52d6a8440c8
Step 6/7 : ADD ${JAR_LIB_FILE} lib/
 ---> fd693617a411
Step 7/7 : ENTRYPOINT ["java","-jar","app.jar"]
 ---> Running in 1dce276e93b3
Removing intermediate container 1dce276e93b3
 ---> 94b4a465425f
Successfully built 94b4a465425f
Successfully tagged docker-java:1.0

5.3 Запустите контейнер docker, запустите app.jar файл во время запуска. Когда файл Jar завершит работу, выйдите из контейнера docker.

$ sudo docker run -t docker-java:1.0 https://google.com

https://play.google.com/?hl=en&tab=w8
https://www.google.com/calendar?tab=wc
/intl/en/about.html
https://photos.google.com/?tab=wq&pageId=none
https://drive.google.com/?tab=wo
https://translate.google.com.my/?hl=en&tab=wT
https://maps.google.com.my/maps?hl=en&tab=wl
https://books.google.com.my/bkshp?hl=en&tab=wp
https://mail.google.com/mail/?tab=wm
//...

Закончив, мы докеризуем Java-приложение.

6. Часто задаваемые вопросы

6.1 Как получить доступ к файловой системе или оболочке контейнера docker для отладки? A: Прокомментируйте ТОЧКА ВХОДА в Dockerfile , чтобы контейнер docker не запускал файл jar во время запуска.

#...

# cd /usr/local/runme
WORKDIR /usr/local/runme

#...

# java -jar /usr/local/runme/app.jar
# ENTRYPOINT ["java","-jar","app.jar"]

Перестройте образ docker.

$ sudo docker build -t docker-java:1.0 .

Повторите его, так как мы определили WORKDIR в файле Dockerfile контейнер docker запустит оболочку и изменит каталог на /usr/локальный/runme , начните отладку здесь.

# -i
$ sudo docker run -it docker-java:1.0

# This is docker container shell!
/usr/local/runme # ls -lsah
total 16
     4 drwxr-xr-x    1 root     root        4.0K Jan 21 10:38 .
     4 drwxr-xr-x    1 root     root        4.0K Jan 21 10:38 ..
     4 -rw-r--r--    1 root     root        3.4K Jan 21 10:17 app.jar
     4 drwxr-xr-x    2 root     root        4.0K Jan 21 10:38 lib

/usr/local/runme # cd lib
/usr/local/runme/lib # ls -lsah
     total 1128
          4 drwxr-xr-x    2 root     root        4.0K Jan 21 10:38 .
          4 drwxr-xr-x    1 root     root        4.0K Jan 21 10:38 ..
          4 -rw-r--r--    1 root     root        2.1K Jan 15 10:29 apiguardian-api-1.0.0.jar
        388 -rw-r--r--    1 root     root      387.8K Jan 15 10:28 jsoup-1.12.1.jar
        132 -rw-r--r--    1 root     root      131.0K Jan 15 10:29 junit-jupiter-api-5.4.0.jar
        500 -rw-r--r--    1 root     root      499.9K Jan 15 10:29 junit-jupiter-params-5.4.0.jar
         88 -rw-r--r--    1 root     root       87.2K Jan 15 10:29 junit-platform-commons-1.4.0.jar
          8 -rw-r--r--    1 root     root        7.0K Jan 15 10:29 opentest4j-1.1.1.jar

/usr/local/runme/lib # which java
/usr/bin/java

/usr/local/runme/lib # java -version
openjdk version "1.8.0_212"
OpenJDK Runtime Environment (IcedTea 3.12.0) (Alpine 8.212.04-r0)
OpenJDK 64-Bit Server VM (build 25.212-b04, mixed mode)

Примечание Если контейнер docker запущен, мы можем получить к нему прямой доступ с помощью этой команды

$ sudo docker exec -ti container_name /bin/bash
$ sudo docker exec -ti container_name /bin/sh

6.2 Как отправить образ docker для развертывания? A: Более быстрый способ – отправить изображение в концентратор docker и извлечь его с сервера.

# client
# tag
$ sudo docker image tag docker-java:1.0 mkyong2002/docker-java:1.0
# push
$ sudo docker image push mkyong2002/docker-java:1.0

# server
$ sudo docker pull mkyong2002/docker-java:1.0

Примечание Вам может понравиться это Примеры загрузки Docker + Spring

Скачать Исходный Код

//dockerize//создание образа докера $sudo сборка докера -t докер-java:1.0.//запустите его $sudo docker run -t докер-java:1.0 https://google.com

Рекомендации

Оригинал: “https://mkyong.com/docker/docker-and-java-application-examples/”