Если вы используете 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 . |