В этом уроке мы покажем вам, как настроить 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-адреса или веб-страницы.
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 с ТОЧКОЙ ВХОДА .
6.1 Как получить доступ к файловой системе или оболочке контейнера docker для отладки? A: Прокомментируйте ТОЧКА ВХОДА в Dockerfile , чтобы контейнер docker не запускал файл jar во время запуска.
Повторите его, так как мы определили 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 запущен, мы можем получить к нему прямой доступ с помощью этой команды