LINUX.ORG.RU

Как научить pom.xml удалять предыдущий docker image?

 , ,


0

1

Использую com.spotify:dockerfile-maven-plugin Maven plugin для создания и деплоя докер имиджей и это работает. А как в pom.xml сказать, что во время mvn clean я хочу удалять ранее созданные докер имидж? Или, что наверное ещё лучше, удалять этот ранее созданный докер имидж сразу перед созданием нового, без связи с mvn clean.

Сейчас этот планиг работает на этапах package и deploy

<executions>
	<execution>
		<id>build-image</id>
		<phase>package</phase>
		<goals>
			<goal>build</goal>
		</goals>
	</execution>
	<execution>
		<id>push-image</id>
		<phase>deploy</phase>
		<goals>
			<goal>push</goal>
		</goals>
	</execution>
</executions>

Смена этого плагина на что-то другое так же возможна.

★

Последнее исправление: hummer (всего исправлений: 1)

mvn clean package у меня удаляет предыдущий и собирает новый jar вместо. К докеру это не имеет отношения, но принцип тот же, думаю.

Zhbert ★★★★★
()
Ответ на: комментарий от Zhbert

Вопрос не про jar, а про докер имиджи, которые затем видны командой docker images. Старые версии докер имиджей остаются, а я хочу, чтобы не оставались.

hummer ★
() автор топика
Ответ на: комментарий от izzholtik

Тогда уже лучше docker image prune сразу после создания нового имиджа запускать.

hummer ★
() автор топика

Для начала стоит определить, что такое «предыдущий». Если цель после каждой сборки иметь заранее известный образ, можно вручную назначить ему кастомный тэг, и использовать везде именно этот тэг. Тэг можно завязать на версию артефакта и/или на хэш коммита.

orm-i-auga ★★★★★
()
Ответ на: комментарий от orm-i-auga

Для начала стоит определить, что такое «предыдущий».

Предыдущая локальная сборка.

Если цель после каждой сборки иметь заранее известный образ, можно вручную назначить ему кастомный тэг, и использовать везде именно этот тэг. Тэг можно завязать на версию артефакта и/или на хэш коммита.

Это уже есть и завязано на статическую версию артифакта, скажем 0.0.1-SNAPSHOT. Имидж предыдущей сборки теряет этот флаг, который переходит к следующему имиджу. Затем я вижу старые имиджи командой docker images с <none> в колонках REPOSITORY и TAG. Их всех можно удалить одной командой docker image prune. Это временное решение и его можно интегрировать в pom.xml. Но по хорошему я бы хотел, чтобы старые имиджи удалялись сразу во время создания новых и не висели, требуя отдельного запроса на удаление.

hummer ★
() автор топика

Учитывая что доках по этому плагину ничего про удаление нет то вероятно стоит его менять. Либо загляни в код, мне лениво.

ya-betmen ★★★★★
()
Последнее исправление: ya-betmen (всего исправлений: 1)
Ответ на: комментарий от ya-betmen

Ну а на уровне самого докера, можно сделать так, чтобы docker build -t name:tag удалял предыдущий образ name:tag?

hummer ★
() автор топика
Ответ на: комментарий от hummer

Чтобы прямо удалял емнип нет (но могу и путать), более того если у тебя есть контейнер с этим образом, то ты его только вместе с контейнером можешь удалить.

ya-betmen ★★★★★
()
Ответ на: комментарий от hummer

А, ну тогда если не путаю, это стандартная проблема докера, что место занимаемое образами будет постоянно увеличиваться из-за промежуточных слоев, которые в итоге ни к какому образу не привязаны. Если так, то это видимо системная проблема, а не плагина.

orm-i-auga ★★★★★
()
Ответ на: комментарий от orm-i-auga

Решил эту проблему так:

			<plugin>
				<groupId>org.codehaus.mojo</groupId>
				<artifactId>exec-maven-plugin</artifactId>
				<version>3.0.0</version>
				<executions>
					<execution>
						<id>docker-prune</id>
						<phase>package</phase>
						<goals>
							<goal>exec</goal>
						</goals>
						<configuration>
							<executable>docker</executable>
							<arguments>
								<argument>image</argument>
								<argument>prune</argument>
								<argument>-f</argument>
							</arguments>
						</configuration>
					</execution>
				</executions>
			</plugin>
hummer ★
() автор топика
Вы не можете добавлять комментарии в эту тему: топик перемещен в архив.