Как сохранить изменения, сделанные зависимостью maven:go-offline в образе Docker

Я инженер по автоматизации испытаний и работаю в крупной производственной компании. Компании большой монолитный проект делятся и части уходят в облака. В рамках такой редизайн проекты Test Automation также должны стать облачными. Наш типичный проект ТА, основанный на Groovy, Selen, Testng и Maven. Теперь я хочу попробовать опцию поместить весь проект TA maven в образ \ контейнер Docker. Он работает хорошо, но при первом запуске запускает загрузку зависимостей в локальный репозиторий.m2. Я хочу ускорить выполнение этой задачи на этапе создания образа.

Вот мой ДОКЕРФИЛЬ:

FROM maven:3.3-jdk-8
LABEL description="Embedded portal-web-testing"
MAINTAINER NNN
COPY ./settings.xml  /root/.m2/
COPY ./acceptance-tests  ./acceptance-tests
WORKDIR acceptance-tests
RUN mvn dependency:go-offline --debug >log
RUN ls /root/.m2/
#RUN mvn test
ENTRYPOINT ["bash"]

А вот и журнал:

Step 1 : FROM maven:3.3-jdk-8
 ---> 7addddbdd730
Step 2 : LABEL description "Embedded portal-web-testing"
 ---> Running in 1d195ccb9c57
 ---> f5372b024ca0
Removing intermediate container 1d195ccb9c57
Step 3 : MAINTAINER NNN
 ---> Running in 03ebbffda680
 ---> cb12da3d8ec6
Removing intermediate container 03ebbffda680
Step 4 : COPY ./settings.xml /root/.m2/
 ---> 164999e1f63a
Removing intermediate container 1e1778d2533b
Step 5 : COPY ./acceptance-tests ./acceptance-tests
 ---> 7d93fff4193e
Removing intermediate container a5d04eb30591
Step 6 : WORKDIR acceptance-tests
 ---> Running in f15111475fc6
 ---> beb4d090362b
Removing intermediate container f15111475fc6
Step 7 : RUN mvn dependency:go-offline --debug >log
 ---> Running in 2c09f1869143
 ---> 62326c2bb073
Removing intermediate container 2c09f1869143
Step 8 : RUN ls /root/.m2/
 ---> Running in 91b602f529da
settings.xml
 ---> b7bc32199ab3
Removing intermediate container 91b602f529da
Step 9 : ENTRYPOINT bash
 ---> Running in 3167f5a6d923
 ---> 94b3e0b146da
Removing intermediate container 3167f5a6d923
Successfully built 94b3e0b146da

На шаге 7 файлы обязательно загружаются, но выглядит как не сохраненные. Следующая консольная команда показывает, что в локальной папке.m2 нет обновлений:

root@37f5a0d04232:/acceptance-tests# ls /root/.m2
settings.xml

Если я попытаюсь снова выполнить ту же команду из командной строки внутри контейнера (когда образ создан и контейнер запущен):

root@37f5a0d04232:/acceptance-tests# mvn dependency:go-offline

Массивные загрузки начинаются, и папка репозитория наконец появляется под.m2

root@37f5a0d04232:/acceptance-tests# ls /root/.m2
repository  settings.xml

Я изо всех сил пытаюсь понять, почему изменения, вызванные командой maven из файла Dockerbuild, не были сохранены как слой Docker.

Я использую Docker 1.12 и Maven 3.3.3

1 ответ

/root/.m2 это том, поэтому он очищается при запуске Docker-контейнера. Этого можно избежать, кэшируя содержимое в пользовательском каталоге, а затем копируя его в /root/.m2 когда контейнер запущен.

К счастью, изображение maven предварительно запекается со всей логикой копирования, поэтому вам просто нужно указать репозиторий как:

RUN mvn -B -f /tmp/pom.xml -s /usr/share/maven/ref/settings-docker.xml dependency:resolve

Точка входа позаботится о настройке локального хранилища для вас. Это помогло мне надеяться, что это поможет и вам.

Также для ознакомительного визита.

Другие вопросы по тегам