Эквивалент Dockerfile VOLUME при использовании Spring Boot Paketo Buildpack

В настоящее время я работаю над переносом контейнера Spring Boot App из Dockerfile файла в Spring Boot Maven Plugin build-image.

Теперь мне интересно, как настроить том в этом сценарии. Эквивалент объявления VOLUME ["/var/store"] в Dockerfile. Я уже какое-то время гуглил, помощь оценила. СПАСИБО!


person Wildsau    schedule 03.07.2021    source источник


Ответы (1)


Это зависит от цели.

  1. Если вы хотите добавить монтирование тома во время работы сборочных пакетов, вы должны добавить <binding> в свой pom.xml.

https://docs.spring.io/spring-boot/docs/2.5.2/maven-plugin/reference/htmlsingle/#build-image.customization

Крепления привязки тома, которые должны быть подключены к контейнеру построителя при построении образа. Привязки будут переданы Docker без анализа и без проверки при создании контейнера построителя.

Привязки должны быть в одной из следующих форм:

  • <host source path>:<container destination path>[:<options>]

  • <host volume name>:<container destination path>[:<options>]

Пример: приводит к тому, что /host/workspace монтируется в /workspace при выполнении сборочных пакетов

<project>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <image>
                        <bindings>
                            <binding>/host/workspace:/workspace</binding>
                        </bindings>
                    </image>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

Это будет то же самое, что использовать флаг pack build --volume, если вы используете пакет cli вместо плагина Spring Boot Maven.

  1. Вы можете привязать тома при запуске приложения. Это просто использует стандартные инструменты и аргументы для среды выполнения вашего контейнера. Например, вы можете docker run -v и отображать в томе.

  2. Если вам нужно конкретное поведение записи VOLUME в Dockerfile (которое на самом деле не выполняет 1 или 2 выше), оно не отображается для образов, созданных с помощью Buildpacks, что и использует Spring Boot. Если это то, что вы хотите, я бы посоветовал вам прочитать эту публикацию SO о томах и подумать, действительно ли она вам нужна, на все.

person Daniel Mikusa    schedule 07.07.2021
comment
THX, за подробный ответ. На самом деле 3. я искал, и я уже предположил, что он не включен. Для меня это не проблема, потому что 2) работает нормально. Есть лишь некоторые варианты использования, в которых это может пригодиться, но я также полностью вижу его недостатки, и вы можете обойтись без него, если это необходимо. - person Wildsau; 08.07.2021