The goal of {dockerfiler}
is to provide an easy way to create
Dockerfiles from R.
You’re reading the doc about version :
desc::desc_get_version()
#> [1] '0.2.3'
The check results are:
devtools::check(quiet = TRUE)
#> ℹ Loading dockerfiler
#> ── R CMD check results ────────────────────────────────── dockerfiler 0.2.3 ────
#> Duration: 1m 31.3s
#>
#> 0 errors ✔ | 0 warnings ✔ | 0 notes ✔
You can install dockerfiler from GitHub with:
# install.packages("remotes")
remotes::install_github("ThinkR-open/dockerfiler")
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
my_dock <- Dockerfile$new()
my_dock$MAINTAINER("Colin FAY", "[email protected]")
Wrap your raw R Code inside the r()
function to turn it into a bash
command with R -e
.
my_dock$RUN(r(install.packages("attempt", repo = "http:https://cran.irsn.fr/")))
Classical Docker stuffs:
my_dock$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 ")
See your Dockerfile :
my_dock
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
my_dock$switch_cmd(8, 7)
my_dock
You can also remove a cmd with remove_cmd
:
my_dock$remove_cmd(8)
my_dock
This also works with a vector:
my_dock$remove_cmd(5:7)
my_dock
add_after
add a command after a given line.
my_dock$add_after(
cmd = "RUN R -e 'remotes::install_cran(\"rlang\")'",
after = 3
)
Save your Dockerfile:
my_dock$write()
You can use a DESCRIPTION file to create a Dockerfile that installs the dependencies and the package.
my_dock <- dock_from_desc("DESCRIPTION")
my_dock
my_dock$CMD(r(library(dockerfiler)))
my_dock$add_after(
cmd = "RUN R -e 'remotes::install_cran(\"rlang\")'",
after = 3
)
my_dock
- Create renv.lock
dir_build <- tempfile(pattern = "renv")
dir.create(dir_build)
# Create a lockfile
the_lockfile <- file.path(dir_build, "renv.lock")
custom_packages <- c(
# attachment::att_from_description(),
"renv",
"cli",
"glue",
"golem",
"shiny",
"stats",
"utils",
"testthat",
"knitr"
)
renv::snapshot(
packages = custom_packages,
lockfile = the_lockfile,
prompt = FALSE
)
- Build Dockerfile
my_dock <- dock_from_renv(
lockfile = the_lockfile,
distro = "focal",
FROM = "rocker/verse"
)
my_dock
Questions and feedbacks welcome!
You want to contribute ? Open a PR :) If you encounter a bug or want to suggest an enhancement, please open an issue.
Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms.