Skip to content

Add Multi-Stage Builds to the main Dockerfile to reduce image size #25

@ababaian

Description

@ababaian

Problem: Currently the palmID container image is 5.42GB which is highly bloated. The goal of this issue is to reduce down the image size to a target of sub 2GB to improve deployment and run-times of the microservice.

The sudo docker image history serratusbio/palmid:latest

IMAGE          CREATED       CREATED BY                                      SIZE      COMMENT
8d48d6a678c5   3 days ago    CMD ["/home/palmid/palmid.sh"]                  0B        buildkit.dockerfile.v0
<missing>      3 days ago    RUN |3 PROJECT=palmid TYPE=base VERSION=0.0.…   6.8kB     buildkit.dockerfile.v0
<missing>      3 days ago    COPY data/* inst/extdata/* img/* data/ # bui…   1.21MB    buildkit.dockerfile.v0
<missing>      3 days ago    COPY palmid.Rmd scripts/* ./ # buildkit         836kB     buildkit.dockerfile.v0
<missing>      3 days ago    RUN |3 PROJECT=palmid TYPE=base VERSION=0.0.…   381MB     buildkit.dockerfile.v0
<missing>      3 days ago    RUN |3 PROJECT=palmid TYPE=base VERSION=0.0.…   726kB     buildkit.dockerfile.v0
<missing>      3 days ago    RUN |3 PROJECT=palmid TYPE=base VERSION=0.0.…   186MB     buildkit.dockerfile.v0
<missing>      3 days ago    RUN |3 PROJECT=palmid TYPE=base VERSION=0.0.…   36.2MB    buildkit.dockerfile.v0
<missing>      3 days ago    RUN |3 PROJECT=palmid TYPE=base VERSION=0.0.…   1.38GB    buildkit.dockerfile.v0
<missing>      3 days ago    RUN |3 PROJECT=palmid TYPE=base VERSION=0.0.…   637MB     buildkit.dockerfile.v0
<missing>      3 days ago    RUN |3 PROJECT=palmid TYPE=base VERSION=0.0.…   1.73MB    buildkit.dockerfile.v0
<missing>      3 days ago    RUN |3 PROJECT=palmid TYPE=base VERSION=0.0.…   4.27MB    buildkit.dockerfile.v0
<missing>      3 days ago    RUN |3 PROJECT=palmid TYPE=base VERSION=0.0.…   1.06MB    buildkit.dockerfile.v0
<missing>      3 days ago    RUN |3 PROJECT=palmid TYPE=base VERSION=0.0.…   13.6MB    buildkit.dockerfile.v0
<missing>      3 days ago    RUN |3 PROJECT=palmid TYPE=base VERSION=0.0.…   2.03GB    buildkit.dockerfile.v0
<missing>      3 days ago    RUN |3 PROJECT=palmid TYPE=base VERSION=0.0.…   129MB     buildkit.dockerfile.v0
<missing>      3 days ago    RUN |3 PROJECT=palmid TYPE=base VERSION=0.0.…   35.3MB    buildkit.dockerfile.v0
<missing>      3 days ago    RUN |3 PROJECT=palmid TYPE=base VERSION=0.0.…   231MB     buildkit.dockerfile.v0
<missing>      3 days ago    RUN |3 PROJECT=palmid TYPE=base VERSION=0.0.…   51.5MB    buildkit.dockerfile.v0
<missing>      3 days ago    RUN |3 PROJECT=palmid TYPE=base VERSION=0.0.…   159MB     buildkit.dockerfile.v0
<missing>      4 days ago    LABEL tags=palmscan, diamond, muscle, R, pal…   0B        buildkit.dockerfile.v0
<missing>      4 days ago    LABEL software.license=GPLv3                    0B        buildkit.dockerfile.v0
<missing>      4 days ago    LABEL container.description=palmid-base image   0B        buildkit.dockerfile.v0
<missing>      4 days ago    LABEL container.version=0.0.6                   0B        buildkit.dockerfile.v0
<missing>      4 days ago    LABEL container.type=base                       0B        buildkit.dockerfile.v0
<missing>      4 days ago    LABEL project.website=https://github.com/aba…   0B        buildkit.dockerfile.v0
<missing>      4 days ago    LABEL project.name=palmid                       0B        buildkit.dockerfile.v0
<missing>      4 days ago    LABEL container.base.image=amazonlinux:2        0B        buildkit.dockerfile.v0
<missing>      4 days ago    LABEL author=ababaian                           0B        buildkit.dockerfile.v0
<missing>      4 days ago    ENV R=4                                         0B        buildkit.dockerfile.v0
<missing>      4 days ago    ENV PALMDBVERSION=2021-03-14                    0B        buildkit.dockerfile.v0
<missing>      4 days ago    ENV PALMSCANVERSION=1.0                         0B        buildkit.dockerfile.v0
<missing>      4 days ago    ENV MUSCLEVERSION=3.8.31                        0B        buildkit.dockerfile.v0
<missing>      4 days ago    ENV DIAMONDVERSION=2.0.6-dev                    0B        buildkit.dockerfile.v0
<missing>      4 days ago    ENV SEQKITVERSION=2.0.0                         0B        buildkit.dockerfile.v0
<missing>      4 days ago    ENV PALMIDVERSION=0.0.6                         0B        buildkit.dockerfile.v0
<missing>      4 days ago    ARG VERSION=0.0.6                               0B        buildkit.dockerfile.v0
<missing>      4 days ago    ARG TYPE=base                                   0B        buildkit.dockerfile.v0
<missing>      4 days ago    ARG PROJECT=palmid                              0B        buildkit.dockerfile.v0
<missing>      4 days ago    WORKDIR /home/palmid                            0B        buildkit.dockerfile.v0
<missing>      4 days ago    ENV BASEDIR=/home/palmid                        0B        buildkit.dockerfile.v0
<missing>      4 weeks ago   /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B        
<missing>      4 weeks ago   /bin/sh -c #(nop) COPY dir:54e5777658be1a3cc…   143MB  

The largest stages are 2.03GB and 1.38GB which correspond to installation of R on Line 182 and installation of postgres on line 101 respectively. Not sure how much these installs can be reduced directly, but certainly a stripped down second stage will be helpful without much of the installation software (like g++ etc...)

The final build should have the same name serratusbio/palmid:latest while the new build-stage should be called something like serratubio/palmid-builder:latest to keep downstream deployment simple.

Metadata

Metadata

Labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions