Я пытаюсь развернуть наше веб-приложение на Java с помощью docker для создания гибкого beanstalk. Идея состоит в том, чтобы иметь возможность запускать контейнер локально для разработки и тестирования и, в конечном итоге, запустить его в производство с помощью git.
Я создал базовый образ, на котором установлены tomcat8 и java8, образ, который выполняет сборку gradle, наследуется от этого базового образа, ускоряя процесс сборки.
Все работает хорошо, за исключением того факта, что контейнер наследуемого приложения, который создается с помощью docker, похоже, не кэширует зависимости gradle, он загружает его каждый раз, включая gradlew. Мы создаем наше веб-приложение, используя следующую команду:
./gradlew war
Есть ли какой-нибудь способ, которым я могу кэшировать файлы в ~/.gradle
это значительно ускорит мою сборку.
Это не такая большая проблема для beanstalk, но это большая проблема для разработчиков, пытающихся создавать и запускать локально, так как это занимает много времени, как вы можете себе представить.
Базовый образ dockerfile:
FROM phusion/baseimage
EXPOSE 8080
RUN apt-get update
RUN add-apt-repository ppa:webupd8team/java
RUN apt-get update
RUN echo oracle-java8-installer shared/accepted-oracle-license-v1-1 select true | sudo /usr/bin/debconf-set-selections
RUN apt-get -y install oracle-java8-installer
RUN java -version
ENV TOMCAT_VERSION 8.0.9
RUN wget --quiet --no-cookies http://archive.apache.org/dist/tomcat/tomcat-8/v${TOMCAT_VERSION}/bin/apache-tomcat-${TOMCAT_VERSION}.tar.gz -O /tmp/catalina.tar.gz
# Unpack
RUN tar xzf /tmp/catalina.tar.gz -C /opt
RUN mv /opt/apache-tomcat-${TOMCAT_VERSION} /opt/tomcat
RUN ln -s /opt/tomcat/logs /var/log/tomcat
RUN rm /tmp/catalina.tar.gz
# Remove unneeded apps
RUN rm -rf /opt/tomcat/webapps/examples
RUN rm -rf /opt/tomcat/webapps/docs
RUN rm -rf /opt/tomcat/webapps/ROOT
ENV CATALINA_HOME /opt/tomcat
ENV PATH $PATH:$CATALINA_HOME/bin
ENV CATALINA_OPTS $PARAM1
# Start Tomcat
CMD ["/opt/tomcat/bin/catalina.sh", "run"]
Dockerfile приложения:
FROM <tag name here for base image>
RUN mkdir ~/.gradle
# run some extra stuff here to add things to gradle.properties file
# Add project Source
ADD . /var/app/myapp
# Compile and Deploy Application, this is what is downloading gradlew and all the maven dependencies every time, if only there was a way to take the changes it makes to ~/.gradle and persist it as a cache layer
RUN cd /var/app/myapp/ && ./gradlew war
RUN mv /var/app/myapp/build/libs/myapp.war /opt/tomcat/webapps/ROOT.war
# Start Tomcat
CMD ["/opt/tomcat/bin/catalina.sh", "run"]