Статьи

Создание Docker-изображений с Maven и Gradle

Если вы используете Docker и Java , вам может понадобиться создать образ из Dockerfile в инструменте сборки ( Maven или Gradle ). В этом посте я собираюсь показать вам, как это сделать в обоих случаях.

Я собираюсь предположить, что у вас есть фактическая структура проекта с файлом Dockerfile в корне проекта.

специалист

Существует несколько плагинов Maven, которые можно использовать для создания образа Docker в Maven , но одним из наиболее часто используемых является fabric8-maven-plugin .

Для начала вам необходимо зарегистрироваться и настроить плагин в
pom.xml :

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
<build>
  <plugins>
    <plugin>
      <groupId>io.fabric8</groupId>
      <artifactId>docker-maven-plugin</artifactId>
      <version>0.16.7</version>
      <configuration>
        <images>
          <image>
            <name>arquillian/age-checker:${project.version}</name>
            <build>
              <dockerFileDir>${project.basedir}</dockerFileDir>
            </build>
          </image>
        </images>
      </configuration>
    </plugin>
  </plugins>
</build>

В разделе конфигурации вы задаете имя образа и каталог, в котором находится Dockerfile .

Любые дополнительные файлы, расположенные в каталоге dockerFileDir , также будут добавлены в контекст сборки. Поскольку Dockerfile находится в корне проекта, целевой каталог также добавляется. Проблема возникает из-за того, что этот плагин использует target / docker для генерации сборки, и если вы попытаетесь собрать его, вы получите следующее исключение: файл tar не может включать сам себя . Чтобы избежать этой проблемы, вам нужно создать файл .maven-dockerignore, в котором указывается, какой каталог следует игнорировать на том же уровне, что и
Dockerfile :

1
target/docker/

И это все, после этого вы можете сделать:

Докер пакетов mvn: сборка

Обратите внимание, что этот плагин поддерживает переменные окружения Docker, такие как DOCKER_HOST, DOCKER_CERT_PATH ,… поэтому, если ваша среда настроена правильно, вам больше ничего не нужно делать.

Gradle

Существует несколько плагинов Gradle, которые можно использовать для создания образа Docker в Gradle , но одним из наиболее часто используемых является плагин gradle-docker-plugin .

Для начала вам необходимо зарегистрироваться и настроить плагин в
build.gradle :

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
buildscript {
    repositories {
        jcenter()
    }
 
    dependencies {
        classpath 'com.bmuschko:gradle-docker-plugin:3.0.3'
    }
}
 
apply plugin: 'com.bmuschko.docker-remote-api'
import com.bmuschko.gradle.docker.tasks.image.DockerBuildImage
 
docker {
    if (System.env.containsKey('DOCKER_HOST') && System.env.containsKey('DOCKER_CERT_PATH')) {
        url = System.env.DOCKER_HOST.replace("tcp", "https")
        certPath = new File(System.env.DOCKER_CERT_PATH)
    }
}
 
task buildImage(type: DockerBuildImage) {
    dependsOn assemble
    inputDir = project.rootDir
    tag = "arquillian/game-service:${project.version}"
}

В случае Gradle необходимо настроить свойства хоста Docker, поскольку плагин не учитывает переменные среды Docker . Вам необходимо настроить их в блоке docker {} .

Наконец, вы создаете задачу типа DockerBuildImage , в которой вы устанавливаете корневой каталог Dockerfile, используя атрибут inputDir, и имя изображения, используя атрибут tag .

Выводы

  Итак, в этом посте вы увидели разные способы сделать то же самое в двух разных инструментах сборки, которые строят образ Docker из Dockerfile . Обратите внимание, что эти плагины также позволяют вам определять содержимое Dockerfile как поле конфигурации, поэтому вы не создаете файл Dockerfile, но указываете его содержимое в инструменте сборки. Вы можете прочитать больше об этой функции на https://dmp.fabric8.io/ в случае плагина Maven и https://github.com/bmuschko/gradle-docker-plugin#creating-a-dockerfile-and-building- Изображение в случае Gradle.

Мы продолжаем учиться,

Алекс.


Пчелы будут жужжать, дети будут пускать пыль из одуванчиков, И я буду делать то, что снег делает летом. Напиток в моей руке, мой снег на фоне горящего песка, Летом, наверное, великолепно загорел. (Летом — заморожено)

Ссылка: Создайте изображения Docker с Maven и Gradle от нашего партнера JCG Алекса Сото в блоге One Jar To Rule All .