web-dev-qa-db-de.com

R-Pakete mithilfe der Docker-Datei installieren

Ich habe R mit der folgenden Zeile in meiner Docker-Datei installiert. Bitte schlagen Sie vor, wie ich jetzt Pakete spezifiziere, die in meiner Docker-Datei installiert werden sollen.

RUN yum -y install R-core R-devel

Ich mache so etwas:

RUN R -e "install.packages('methods',dependencies=TRUE, repos='http://cran.rstudio.com/')"\
    && R -e "install.packages('jsonlite',dependencies=TRUE, repos='http://cran.rstudio.com/')" \
    && R -e "install.packages('tseries',dependencies=TRUE, repos='http://cran.rstudio.com/')" 

Ist das der richtige Weg?

12
Ashag

Ja, Ihre Lösung sollte funktionieren. Ich bin auf das gleiche Problem gestoßen und habe hier die Lösung gefunden https://github.com/glamp/r-docker/blob/master/Dockerfile .

Kurz gesagt, verwenden Sie: RUN Rscript -e "install.packages('PACKAGENAME')". Ich habe es ausprobiert und es funktioniert.

5
elevendollar

Wie durch den Kommentar von @Cameron Kerr vorgeschlagen, gibt Rscript keinen Build-Fehler an. Die empfohlene Vorgehensweise ist ab jetzt, wie in der Frage vorgeschlagen.

RUN R -e "install.packages('methods',dependencies=TRUE, repos='http://cran.rstudio.com/')"
RUN R -e "install.packages('jsonlite',dependencies=TRUE, repos='http://cran.rstudio.com/')"
RUN R -e "install.packages('tseries',dependencies=TRUE, repos='http://cran.rstudio.com/')" 

Wenn Sie ziemlich sicher sind, dass kein Paket ausfällt, verwenden Sie diesen Einzeiler -

RUN R -e "install.packages(c('methods', 'jsonlite', 'tseries'),
                           dependencies=TRUE, 
                           repos='http://cran.rstudio.com/')"

EDIT: Wenn Sie kein Base-R-Image verwenden, können Sie rocker-orgs r-ver oder r-studio oder tidyverse verwenden. Hier ist das Repo . Hier ist ein Beispiel Dockerfile - 

FROM rocker/tidyverse:latest

# Install R packages
RUN install2.r --error \
    methods \
    jsonlite \
    tseries

Das --error-Flag ist optional. Es führt install.packages() zu einem Fehler, wenn die Paketinstallation fehlschlägt (wodurch der docker build-Befehl fehlschlägt). Standardmäßig gibt install.packages() nur eine Warnung aus. Dies bedeutet, dass eine Docker-Datei erfolgreich erstellt werden kann, auch wenn das Paket nicht installiert werden konnte.

Alle rocker-org-Pakete sind grundsätzlich install das littler-Paket für die install2.R-Funktionalität

4
Ic3fr0g

Sie könnten ein R-Skript mit den gewünschten Installationsbefehlen schreiben und es dann mit Docker ausführen - wenn ich diese Dokumentation richtig lese ( https://hub.docker.com/_/r-base/ ).

FROM r-base
COPY . /usr/local/src/myscripts
WORKDIR /usr/local/src/myscripts
CMD ["Rscript", "myscript.R"]

Build your image with the command:

$ docker build -t myscript /path/to/Dockerfile

Dabei enthält myscript.R die entsprechenden Befehle zur Paketinstallation.

0
Damian