web-dev-qa-db-fra.com

Installer les paquets R en utilisant le fichier docker

J'ai installé R en utilisant la ligne ci-dessous dans mon fichier docker. S'il vous plaît suggérer comment spécifier maintenant les paquets à installer dans mon fichier docker.

RUN yum -y install R-core R-devel

Je fais quelque chose comme ça:

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/')" 

Est-ce la bonne façon de faire?

12
Ashag

Oui, votre solution devrait fonctionner. J'ai rencontré le même problème et trouvé la solution ici https://github.com/glamp/r-docker/blob/master/Dockerfile .

En bref, utilisez: RUN Rscript -e "install.packages('PACKAGENAME')". Je l'ai essayé et ça marche.

5
elevendollar

Comme suggéré par le commentaire de @Cameron Kerr, Rscript ne vous donne pas un échec de construction… .. Pour l'instant, la méthode recommandée consiste à faire ce que la question suggère.

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/')" 

Si vous êtes assez certain qu'il n'y a pas d'échec de paquet, utilisez ce one-liner -

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

EDIT: Si vous n'utilisez pas l'image Base-R, vous pouvez utiliser les images rocker-org 'r-ver ou r-studio ou tidyverse. Voici le repo . Voici un exemple de fichier Docker - 

FROM rocker/tidyverse:latest

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

L'indicateur --error est facultatif. Cela provoque install.packages() en renvoyant une erreur en cas d'échec de l'installation du package (ce qui entraînera l'échec de la commande docker build). Par défaut, install.packages() émet uniquement un avertissement, ce qui signifie qu'un fichier Dockerfile peut être généré avec succès même s'il n'a pas réussi à installer le package.

Tous les rocker-org 's fondamentalement install le paquet littler pour la fonctionnalité install2.R

4
Ic3fr0g

Vous pouvez écrire un script R avec les commandes d'installation souhaitées, puis l'exécuter à l'aide de Docker - si je lis correctement cette documentation ( 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

myscript.R contient les commandes d'installation de package appropriées.

0
Damian