Skip to content
Package an R workspace and all dependencies as a Docker container
R TeX Dockerfile Other
Branch: master
Clone or download

Latest commit

Latest commit 0d59d84 Aug 22, 2019

Files

Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
R fix some tests around GitHub install and packaging DESCRIPTION files Aug 20, 2019
demo Added file path to save in fullstack demo Nov 22, 2018
docs re-render home page Aug 22, 2019
inst add social preview image (og:image) and altmetric badge Aug 22, 2019
man fix pkgdown landing page (with logo) and use https wherever possible Aug 20, 2019
tests fix some tests around GitHub install and packaging DESCRIPTION files Aug 20, 2019
vignettes fix pkgdown landing page (with logo) and use https wherever possible Aug 20, 2019
.Rbuildignore Fix DESCRIPTION and one test for COPY Jul 22, 2019
.gitignore add social preview image (og:image) and altmetric badge Aug 22, 2019
.lintr Fix linting errors Dec 12, 2017
.pre-commit-config.yaml add pre-commit config, update readme Jul 18, 2019
.travis.yml skip tests needing stevedore checking for stevedore, no vignettes on … Jul 23, 2019
CONDUCT.md reformat CONDUCT.md Nov 10, 2017
CONTRIBUTING.md fix pkgdown landing page (with logo) and use https wherever possible Aug 20, 2019
DESCRIPTION bump minor version Aug 20, 2019
LICENSE Updated License and Description (ineserted myself as autor), minor ch… Dec 19, 2016
NAMESPACE Don't export internal classes and methods Jul 23, 2019
NEWS.md add news for 0.6.0 Aug 20, 2019
README.Rmd add social preview image (og:image) and altmetric badge Aug 22, 2019
README.md add social preview image (og:image) and altmetric badge Aug 22, 2019
appveyor.yml warnings are not errors on appveyor Aug 16, 2019
codemeta.json add JOSS badge and CITATION file, update README and codemeta.json Aug 21, 2019
paper.bib Update paper.bib Aug 21, 2019
paper.md Update paper.md Aug 21, 2019

README.md

containerit containerit logo

DOI Project Status: WIP - Initial development is in progress, but there has not yet been a stable, usable release suitable for the public. Travis CI build status Appveyor build status Join the chat at https://gitter.im/o2r-project/containerit

<script type='text/javascript' src='https://d1bxh8uas1mnw7.cloudfront.net/assets/embed.js'></script>

containerit packages R script/session/workspace and all dependencies as a Docker container by automagically generating a suitable Dockerfile. The package’s website is https://o2r.info/containerit/.

Prerequisites

  • containerit only fully works if you have Docker installed and is only tested with Docker Engine - Community (previously called Docker Community Edition or Docker CE).
  • R (>= 3.5.0) is needed so that some dependencies (e.g. BiocManager) are available; older versions of R predate the development of the package and were never tested.

Quick start

Try out containerit in a container

You can spin up a Docker container with containerit pre-installed if you want to try out the package. The default of the containerit images on Docker Hub is to start plain R, but you can also start an with RStudio session in a browser.

Note: The geospatial variant is used so that examples from containerit vignettes are likely to work. For a minimal Dockerfile to run containerit, see inst/docker/minimal/Dockerfile.

docker run --rm -it -e PASSWORD=o2r -p 8787:8787 o2rproject/containerit:geospatial /init

Now go to http://localhost:8787 and log in with the user rstudio and password o2r. Continue in section Use.

Install

Installation is only possible from GitHub:

# install.packages("remotes")
remotes::install_github("o2r-project/containerit")

Use

containerit can create Dockerfile objects in R and render them as Dockerfile instructions based on session information objects or runnable R files (.R, .Rmd).

suppressPackageStartupMessages(library("containerit"))
my_dockerfile <- containerit::dockerfile(from = utils::sessionInfo())
#> INFO [2019-08-22 11:38:33] Going online? TRUE  ... to retrieve system dependencies (sysreq-api)
#> INFO [2019-08-22 11:38:33] Trying to determine system requirements for the package(s) 'assertthat,backports,crayon,curl,desc,digest,evaluate,formatR,fs,futile.logger,futile.options,htmltools,httpuv,jsonlite,knitr,lambda.r,later,magrittr,mime,miniUI,pillar,pkgconfig,promises,R6,Rcpp,rlang,rmarkdown,rprojroot,semver,shiny,shinyFiles,stevedore,stringi,stringr,tibble,versions,xfun,xtable,yaml' from sysreqs online DB
#> INFO [2019-08-22 11:38:36] Adding CRAN packages: assertthat, backports, crayon, curl, desc, digest, evaluate, formatR, fs, futile.logger, futile.options, htmltools, httpuv, jsonlite, knitr, lambda.r, later, magrittr, mime, miniUI, pillar, pkgconfig, promises, R6, Rcpp, rlang, rmarkdown, rprojroot, semver, shiny, shinyFiles, stevedore, stringi, stringr, tibble, versions, xfun, xtable, yaml
#> INFO [2019-08-22 11:38:36] Created Dockerfile-Object based on sessionInfo
print(my_dockerfile)
#> FROM rocker/r-ver:3.6.1
#> LABEL maintainer="daniel"
#> RUN export DEBIAN_FRONTEND=noninteractive; apt-get -y update \
#>   && apt-get install -y git-core \
#>  libcurl4-openssl-dev \
#>  libssl-dev \
#>  make \
#>  pandoc \
#>  pandoc-citeproc
#> RUN ["install2.r", "assertthat", "backports", "crayon", "curl", "desc", "digest", "evaluate", "formatR", "fs", "futile.logger", "futile.options", "htmltools", "httpuv", "jsonlite", "knitr", "lambda.r", "later", "magrittr", "mime", "miniUI", "pillar", "pkgconfig", "promises", "R6", "Rcpp", "rlang", "rmarkdown", "rprojroot", "semver", "shiny", "shinyFiles", "stevedore", "stringi", "stringr", "tibble", "versions", "xfun", "xtable", "yaml"]
#> WORKDIR /payload/
#> CMD ["R"]

You can disable logging:

futile.logger::flog.threshold(futile.logger::ERROR)

Now we create a Dockerfile for a specific R version and R Markdown file and do not add any packages already available in the base image:

rmd_dockerfile <- containerit::dockerfile(from = "inst/demo.Rmd",
                                          image = "rocker/verse:3.5.2",
                                          maintainer = "o2r",
                                          filter_baseimage_pkgs = TRUE)
#> Detected API version '1.40' is above max version '1.39'; downgrading
#> Detected API version '1.40' is above max version '1.39'; downgrading
print(rmd_dockerfile)
#> FROM rocker/verse:3.5.2
#> LABEL maintainer="o2r"
#> # CRAN packages skipped because they are in the base image: assertthat, backports, cli, crayon, curl, desc, digest, evaluate, formatR, fs, htmltools, httpuv, jsonlite, knitr, later, magrittr, mime, miniUI, pillar, pkgconfig, promises, R6, Rcpp, rlang, rmarkdown, rprojroot, rstudioapi, sessioninfo, shiny, stringi, stringr, tibble, withr, xfun, xtable, yaml
#> RUN ["install2.r", "fortunes", "futile.logger", "futile.options", "lambda.r", "semver", "shinyFiles", "stevedore", "versions"]
#> WORKDIR /payload/
#> CMD ["R"]

For extended instructions, see the vignettes at in the directory vignettes/, which are readable online at https://o2r.info/containerit/articles/.

Images

Images are available starting from different base images. All images are also available with version tags.

The Dockerfiles are available in the directory inst/docker/Dockerfile.

verse

docker inspect o2rproject/containerit

Base image: rocker/verse:3.5.3

geospatial

docker inspect o2rproject/containerit:geospatial

Base image: rocker/geospatial:3.5.3

RStudio Add-in

RStudio Addins allow to create interactive user interfaces for the RStudio development environment. Courtesy of a great contribution by a group of enthusiasts at the ROpenSci OZ Unconference 2018, there are several forms to quickly create Dockefiles from different use cases, e.g. the current session, a vector of expressions, or a script file.

screenshots containerit RStudio Addin forms

Contribute

All help is welcome: asking questions, providing documentation, testing, or even development.

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.

See CONTRIBUTING.md for details.

Development

r-hub builder is great for running checks, e.g. before submitting to CRAN and on other operating systems.

library("rhub")
rhub::check_for_cran()
rhub::check_on_windows()

You can build the pkgdown site with

pkgdown::build_site()

You can build the Docker images locally with the current development version using the following commands.

docker build --tag containerit:dev --file inst/docker/Dockerfile.local .
docker build --tag containerit:geospatial-dev --file inst/docker/geospatial/Dockerfile.local .

You can use pre-commit hooks to avoid some mistakes.

A codemeta file, codemeta.json, with metadata about the package and its dependencies is generated automatically when this document is compiled.

codemetar::write_codemeta("containerit")
#> Registered S3 method overwritten by 'httr':
#>   method                 from
#>   as.character.form_file crul

Citation

citation("containerit")
#> 
#> To cite containerit in publications use:
#> 
#>   Nüst, D. and Hinz, M. (2019). containerit: Generating
#>   Dockerfiles for reproducible research with R. Journal of Open
#>   Source Software, 4(40), 1603,
#>   https://doi.org/10.21105/joss.01603
#> 
#> A BibTeX entry for LaTeX users is
#> 
#>   @Article{,
#>     title = {{containerit: Generating Dockerfiles for reproducible research with R}},
#>     author = {Daniel Nüst and Matthias Hinz},
#>     journal = {{Journal of Open Source Software}},
#>     year = {2019},
#>     month = {8},
#>     volume = {4},
#>     number = {40},
#>     pages = {1603},
#>     doi = {10.21105/joss.01603},
#>     url = {https://doi.org/10.21105/joss.01603},
#>   }

License

containerit is licensed under GNU General Public License, version 3, see file LICENSE.

Copyright (C) 2019 - o2r project.

You can’t perform that action at this time.