Easy Dockerfile Creation from R.
You can install dockerfiler from GitHub with:
# install.packages("remotes")
::install_github("colinfay/dockerfiler") remotes
Or from CRAN with :
install.packages("dockerfiler")
By default, Dockerfiles are created with
FROM "rocker/r-base"
.
You can set another FROM in new()
library(dockerfiler)
# Create a dockerfile template
<- Dockerfile$new()
my_dock $MAINTAINER("Colin FAY", "contact@colinfay.me") my_dock
Wrap your raw R Code inside the r()
function to turn it
into a bash command with R -e
.
$RUN(r(install.packages("attempt", repo = "http://cran.irsn.fr/"))) my_dock
Classical Docker stuffs:
$RUN("mkdir /usr/scripts")
my_dock$RUN("cd /usr/scripts")
my_dock$COPY("plumberfile.R", "/usr/scripts/plumber.R")
my_dock$COPY("torun.R", "/usr/scripts/torun.R")
my_dock$EXPOSE(8000)
my_dock$CMD("Rscript /usr/scripts/torun.R ") my_dock
See your Dockerfile :
my_dock#> FROM rocker/r-base
#> MAINTAINER Colin FAY <contact@colinfay.me>
#> RUN R -e 'install.packages("attempt", repo = "http://cran.irsn.fr/")'
#> RUN mkdir /usr/scripts
#> RUN cd /usr/scripts
#> COPY plumberfile.R /usr/scripts/plumber.R
#> COPY torun.R /usr/scripts/torun.R
#> EXPOSE 8000
#> CMD Rscript /usr/scripts/torun.R
If you’ve made a mistake in your script, you can switch lines with
the switch_cmd
method. This function takes as arguments the
positions of the two cmd you want to switch :
# Switch line 8 and 7
$switch_cmd(8, 7)
my_dock
my_dock#> FROM rocker/r-base
#> MAINTAINER Colin FAY <contact@colinfay.me>
#> RUN R -e 'install.packages("attempt", repo = "http://cran.irsn.fr/")'
#> RUN mkdir /usr/scripts
#> RUN cd /usr/scripts
#> COPY plumberfile.R /usr/scripts/plumber.R
#> EXPOSE 8000
#> COPY torun.R /usr/scripts/torun.R
#> CMD Rscript /usr/scripts/torun.R
You can also remove a cmd with remove_cmd
:
$remove_cmd(8)
my_dock
my_dock#> FROM rocker/r-base
#> MAINTAINER Colin FAY <contact@colinfay.me>
#> RUN R -e 'install.packages("attempt", repo = "http://cran.irsn.fr/")'
#> RUN mkdir /usr/scripts
#> RUN cd /usr/scripts
#> COPY plumberfile.R /usr/scripts/plumber.R
#> EXPOSE 8000
#> CMD Rscript /usr/scripts/torun.R
This also works with a vector:
$remove_cmd(5:7)
my_dock
my_dock#> FROM rocker/r-base
#> MAINTAINER Colin FAY <contact@colinfay.me>
#> RUN R -e 'install.packages("attempt", repo = "http://cran.irsn.fr/")'
#> RUN mkdir /usr/scripts
#> CMD Rscript /usr/scripts/torun.R
add_after
add a command after a given line.
$add_after(
my_dockcmd = "RUN R -e 'remotes::install_cran(\"rlang\")'",
after = 3
)
Save your Dockerfile:
$write() my_dock
You can use a DESCRIPTION file to create a Dockerfile that installs the dependencies and the package.
<- dock_from_desc("DESCRIPTION")
my_dock
$CMD(r(library(dockerfiler)))
my_dock
$add_after(
my_dockcmd = "RUN R -e 'remotes::install_cran(\"rlang\")'",
after = 3
)