Как сохранить изменения, сделанные зависимостью 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
Точка входа позаботится о настройке локального хранилища для вас. Это помогло мне надеяться, что это поможет и вам.
Также для ознакомительного визита.