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>

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


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)
Ответ на: комментарий от 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 ()
Ограничение на отправку комментариев: только для зарегистрированных пользователей