Google помогает быстро контейнеризировать Java-приложения

контейнер Docker
Google помогает быстро контейнеризировать Java-приложения

Оригинальный адрес:Блог Лян Гуйчжао

адрес блога:blog.720ui.com

Добро пожаловать на официальный аккаунт: «Серверное мышление». Группа людей с одинаковой частотой растет вместе, вместе совершенствуется и преодолевает ограничения познания.

В конце 2018 года Google открыл исходный код Jib, нового инструмента Java, который упрощает контейнеризацию приложений Java. С Jib нам не нужно писать Dockerfile или устанавливать Docker, а благодаря интеграции с плагинами Maven или Gradle мы можем мгновенно контейнеризовать Java-приложения.

image.png

Адрес в открытом доступе:GitHub.com/Google с…

1. Что такое Джиб

Jib — это быстрый и простой инструмент для создания образа контейнера, который запускается как часть Maven или Gradle и не требует написания Dockerfile или запуска демона Docker. Он создает наш образ Docker из Maven или Gradle и экономит драгоценное время сборки, отправляя в реестр только измененные слои (а не все приложение). Теперь давайте сравним процесс сборки Docker с процессом сборки Jib. Процесс сборки Docker показан ниже.

Процесс сборки Jib выглядит следующим образом.

image.png

2. Настоящий бой приносит истинное знание

1. Создайте простой проект Java

Давайте напишем простой класс Java.

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello World!");
        System.out.println("http://blog.720ui.com");
    }
}

Далее мы создаем еще один файл pom.xml.

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.lianggzone.sample.lib</groupId>
	<artifactId>helloworld-samples</artifactId>
	<version>0.1</version>
	<packaging>jar</packaging>
	<name>helloworld-samples</name>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <jib-maven-plugin.version>1.0.2</jib-maven-plugin.version>
        <maven-compiler-plugin.version>3.8.0</maven-compiler-plugin.version>
    </properties>
    <dependencies>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>${maven-compiler-plugin.version}</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
            <!-- Jib -->
            <plugin>
                <groupId>com.google.cloud.tools</groupId>
                <artifactId>jib-maven-plugin</artifactId>
                <version>${jib-maven-plugin.version}</version>
                <configuration>
                    <from>
                        <image>registry.cn-hangzhou.aliyuncs.com/lianggzone/oracle_java8</image>
                    </from>
                    <to>
                        <image>registry.cn-hangzhou.aliyuncs.com/lianggzone/jib-helloworld:v1</image>
                    </to>
                    <container>
                        <jvmFlags>
                            <jvmFlag>-Xms512m</jvmFlag>
                            <jvmFlag>-Xdebug</jvmFlag>
                        </jvmFlags>
                        <mainClass>com.lianggzone.HelloWorld</mainClass>
                    </container>
                </configuration>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>build</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

Поскольку доступ по умолчанию к хранилищу Google gcr.io и нестабильность внутреннего доступа к gcr.io часто приводят к тайм-аутам сети, автор использует отечественный зеркальный сервис Alibaba Cloud, поэтому нет необходимости обращаться к хранилищу Google. Теперь мы выполняемmvn compile jib:buildкоманда для автоматизации сборки, она начнется с<from>Потяните зеркало и загрузите сгенерированное изображение в<to>Установленный адрес. Здесь я также установил некоторые параметры JVM через `.

mvn compile jib:build

Так же, если "Войти не удалось, не авторизован", нужно пройтиdocker loginВойти и авторизоваться. Кроме того, лучше попрактиковаться, вы можете подумать о том, чтобы ввести учетные данные в Maven.

<settings>
  ...
  <servers>
    ...
		<server>
	  	<id>registry.cn-hangzhou.aliyuncs.com</id>
	  	<username>你的阿里云账号</username>
	  	<password>你的阿里云密码</password>
		</server>
  </servers>
</settings>

Наконец, после завершения выполнения мы можем получить образ из хранилища облачных изображений Alibaba.

image.png

Вы закончили, теперь давайте проверим это. мы проходимdocker pullПотянув зеркало, и бегом.

docker pull registry.cn-hangzhou.aliyuncs.com/lianggzone/jib-helloworld:v1
docker run --name jib-helloworld -it registry.cn-hangzhou.aliyuncs.com/lianggzone/jib-helloworld:v1 /bin/bash

Результат выполнения показан ниже.

image.png

2. Создайте исполняемый Jar SpringBoot

Давайте возьмем более сложный проект и создадим проект SpringBoot. По поводу использования SpringBoot можно прочитать предыдущие статьи автора:blog.720UI.com/columns/SPR…. Теперь нам сначала нужно построить проект и создать класс запуска.

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

При этом требуется веб-интерфейс.

@RestController
public class WebController {
    @RequestMapping("/blog")
    public String index() {
        return "http://blog.720ui.com";
    }
}

Далее мы создаем еще один файл pom.xml.

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.1.2.RELEASE</version>
	</parent>

	<groupId>com.lianggzone.sample.lib</groupId>
	<artifactId>springboot-samples</artifactId>
	<version>0.1</version>
	<packaging>jar</packaging>
	<name>springboot-samples</name>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <jib-maven-plugin.version>1.0.2</jib-maven-plugin.version>
        <maven-compiler-plugin.version>3.8.0</maven-compiler-plugin.version>
    </properties>
    
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>${maven-compiler-plugin.version}</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
            <!-- Jib -->
            <plugin>
                <groupId>com.google.cloud.tools</groupId>
                <artifactId>jib-maven-plugin</artifactId>
                <version>${jib-maven-plugin.version}</version>
                <configuration>
                    <from>
                        <image>registry.cn-hangzhou.aliyuncs.com/lianggzone/oracle_java8</image>
                    </from>
                    <to>
                        <image>registry.cn-hangzhou.aliyuncs.com/lianggzone/jib-springboot:v1</image>
                    </to>
                    <container>
                        <jvmFlags>
                            <jvmFlag>-Xms512m</jvmFlag>
                            <jvmFlag>-Xdebug</jvmFlag>
                        </jvmFlags>
                    </container>
                </configuration>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>build</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

Теперь мы выполняемmvn compile jib:buildКоманда для автоматизации сборки. После завершения выполнения мы можем получить образ из хранилища облачных изображений Alibaba.

image.png

Теперь еще раз проверим. мы проходимdocker pullВытащите образ и запустите его.

docker pull registry.cn-hangzhou.aliyuncs.com/lianggzone/jib-springboot:v1
docker run -p 8080:8080 --name jib-springboot -it registry.cn-hangzhou.aliyuncs.com/lianggzone/jib-springboot:v1 /bin/bash

Результат выполнения показан ниже.

image.png

Теперь мы посещаемhttp://localhost:8080/blogМы можем вызвать интерфейс API в обычном режиме.

image.png

3. Создайте проект ВОЙНЫ

Jib также поддерживает проекты WAR. Если проект Maven использует тип упаковки war, Jib будет использовать тип по умолчаниюdistroless JettyРазверните проект как базовый образ. Чтобы использовать другой базовый образ, мы можем настроить<container><appRoot>,<container> <entrypoint> а также<container> <args>. Ниже приведен пример использования образа Tomcat.

<configuration>
  <from>
    <image>tomcat:8.5-jre8-alpine</image>
  </from>
  <container>
    <appRoot>/usr/local/tomcat/webapps/ROOT</appRoot>
  </container>
</configuration>

3. Адрес источника

Адрес источника:GitHub.com/две зоны/…

Прикрепленный: Ссылки

(Конец, перепечатка с указанием автора и источника.)

напиши в конце

[Мышление на стороне сервера]: давайте поговорим об основных технологиях на стороне сервера, а также обсудим структуру проекта и практический опыт первой линии Интернета. В то же время семья «заднего круга», в которой много технических экспертов, с нетерпением ждет вашего присоединения, группы людей с одинаковой частотой, которые вместе растут, вместе совершенствуются и ломают ограничения познания.

Еще больше интересных статей в разделе «Серверное мышление»!