Wątek przeniesiony 2021-11-16 14:55 z Java przez Patryk27.

Zoptymalizowany Dockerfile pod określone środowisko

0

Witam, jestem zupełnie początkujący w Dokerach. Moim zadaniem jest stworzenie takiego środowiska, żeby działała na nim apka w Spring Boocie i żeby był zainstalowany Heroku CLI (wykonuję w apce operacje pomiędzy bazami danych na dwóch kontach za pomocą heroku pg:copy). Co więcej, jego rozmiar powinien być jak najmniejszy żeby bez problemu obraz się zmieścił w około 500MB (a najlepiej jeszcze mniej) przypisanego do konta Heroku.

Oto mój Dockerfile:

FROM ubuntu

# Install OpenJDK-8
RUN apt-get update && \
    apt-get install -y openjdk-8-jdk && \
    apt-get install -y ant && \
    apt-get clean;
    
    
# Fix certificate issues
RUN apt-get update && \
    apt-get install ca-certificates-java && \
    apt-get clean && \
    update-ca-certificates -f;


# Install sudo
RUN apt-get update && \
      apt-get -y install sudo


# Add user and switch to it
RUN useradd -m login && echo "login:password" | chpasswd && adduser login sudo
USER login


# Install curl and use curl 
RUN echo "password" | sudo -S apt --assume-yes install curl
RUN echo "password" | sudo -S curl https://cli-assets.heroku.com/install.sh -o ~/heroku.sh


# Run Heroku script
RUN echo "password" | sudo -S sh ~/heroku.sh


# Setup JAVA_HOME -- useful for docker commandline
ENV JAVA_HOME /usr/lib/jvm/java-8-openjdk-amd64/
RUN export JAVA_HOME


# Add an app and listen on port
ADD target/project-server-1.0-SNAPSHOT.jar .
COPY project-91878452-firebase-adminsdk-dxv9z-0db48a2d01.json /
EXPOSE 8000
CMD java -jar project-server-1.0-SNAPSHOT.jar

Kod ten działa, sprawdzałem na localhoście, ale na Heroku pojawia się error, że rozmiar został znacznie przekroczony.

Co więc w nim zmienić żeby rozmiar obrazu na jego podstawie utworzonego był jak najmniejszy i żeby jednocześnie spełnił założenia z początku?

Pozdrawiam cieplutko.

0

Zredukowanie liczby warstw (liczby RUN) minimalnie też zmniejszyło rozmiar, ale nieznacznie. Pewnie anta mogę też wywalić bo w sumie na uj mi on (częściowo kod Dockerfile jest skopiowany) . Co jeszcze Panie i Panowie?

1

Jeszcze nie bawiłem się dockerem na heroku, ale piszą, że są dwie metody

Z grubsza wygląda na to, że pierwsza to wysłanie kontenera dockera na heroku, a druga to zbudowanie kontenera po stronie heroku. Mogę się mylić, nie analizowałem tego. To na chłopski rozum jak użyjesz tej drugiej, to heroku sam sobie powinien zbudować poprawnego kontenera. Być może wykryje coś w twojej konfiguracji co mu nie pasuje i da Ci jakiś bardziej adekwatny komunikat. Miałem taki przypadek, że u mnie na localhoście działało (za przeproszeniem w pythonie) żadnych komunikatów o niezgodnościach, a po wysłaniu na heroku nie pasowały mu jakieś wersje bibliotek, musiałem podać o niższej wersji, wtedy przeszło. Ma więc prawdopodobnie swój dodatkowy system weryfikacji dependencji, żeby TAM wszystko śmigało. Aczkolwiek to też może to być tylko moja fantazja, proszę nie przysyłać prawników z pozwem o odszkodowanie :D

1 użytkowników online, w tym zalogowanych: 0, gości: 1