{"id":13401318,"url":"https://github.com/o2r-project/containerit","last_synced_at":"2026-01-16T13:53:01.009Z","repository":{"id":9594705,"uuid":"62705318","full_name":"o2r-project/containerit","owner":"o2r-project","description":"Package an R workspace and all dependencies as a Docker container","archived":false,"fork":false,"pushed_at":"2022-02-17T16:11:31.000Z","size":1699,"stargazers_count":291,"open_issues_count":86,"forks_count":29,"subscribers_count":10,"default_branch":"master","last_synced_at":"2025-10-25T02:48:06.455Z","etag":null,"topics":["docker","dockerfile","r","reproducible-research","reproducible-science"],"latest_commit_sha":null,"homepage":"https://o2r.info/containerit/","language":"R","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/o2r-project.png","metadata":{"files":{"readme":"README.Rmd","changelog":"NEWS.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":"codemeta.json","zenodo":null}},"created_at":"2016-07-06T08:38:31.000Z","updated_at":"2025-10-06T09:19:20.000Z","dependencies_parsed_at":"2022-08-26T13:30:33.290Z","dependency_job_id":null,"html_url":"https://github.com/o2r-project/containerit","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/o2r-project/containerit","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/o2r-project%2Fcontainerit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/o2r-project%2Fcontainerit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/o2r-project%2Fcontainerit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/o2r-project%2Fcontainerit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/o2r-project","download_url":"https://codeload.github.com/o2r-project/containerit/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/o2r-project%2Fcontainerit/sbom","scorecard":{"id":700316,"data":{"date":"2025-08-11","repo":{"name":"github.com/o2r-project/containerit","commit":"09711d2a3bb0222a59f816fce5d8434f3a540c94"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.3,"checks":[{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Code-Review","score":2,"reason":"Found 5/20 approved changesets -- score normalized to 2","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Pinned-Dependencies","score":-1,"reason":"internal error: internal error: invalid Dockerfile: Syntax error - can't find = in \"list(generator\". Must be of the form: name=value","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: GNU General Public License v3.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 17 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-22T05:04:12.050Z","repository_id":9594705,"created_at":"2025-08-22T05:04:12.050Z","updated_at":"2025-08-22T05:04:12.050Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28479034,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-16T11:59:17.896Z","status":"ssl_error","status_checked_at":"2026-01-16T11:55:55.838Z","response_time":107,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docker","dockerfile","r","reproducible-research","reproducible-science"],"created_at":"2024-07-30T19:01:01.366Z","updated_at":"2026-01-16T13:53:00.985Z","avatar_url":"https://github.com/o2r-project.png","language":"R","funding_links":[],"categories":["R","Containerization 🛍"],"sub_categories":[],"readme":"---\noutput: github_document\n---\n\u003c!-- README.md is generated from README.Rmd. Please edit that file! --\u003e\n\n```{r knitr_config, echo = FALSE}\nknitr::opts_chunk$set(\n  collapse = TRUE,\n  comment = \"#\u003e\",\n  fig.path = \"README-\"\n)\n```\n\n# containerit \u003cimg src=\"man/figures/logo.png\" align=\"right\" alt=\"containerit logo\" width=\"200\" style=\"padding: 0 0 10px 10px;\" /\u003e\n\n\u003c!-- badges: start --\u003e\n[![DOI](https://joss.theoj.org/papers/10.21105/joss.01603/status.svg)](https://doi.org/10.21105/joss.01603)\n[![Project Status: WIP - Initial development is in progress, but there has not yet been a stable, usable release suitable for the public.](https://www.repostatus.org/badges/latest/wip.svg)](https://www.repostatus.org/#wip)\n[![Travis CI build status](https://travis-ci.org/o2r-project/containerit.svg?branch=master)](https://travis-ci.org/o2r-project/containerit)\n[![Appveyor build status](https://ci.appveyor.com/api/projects/status/2242hcwagoafxaxq?svg=true)](https://ci.appveyor.com/project/nuest/containerit-rrvpq)\n[![](https://www.r-pkg.org/badges/version/containerit)](https://github.com/o2r-project/containerit/issues/68)\n[![Join the chat at https://gitter.im/o2r-project/containerit](https://badges.gitter.im/o2r-project/containerit.svg)](https://gitter.im/o2r-project/containerit)\n\u003cspan data-badge-popover=\"bottom\" data-badge-type=\"2\" data-doi=\"10.21105/joss.01603\" data-condensed=\"true\" data-hide-no-mentions=\"true\" class=\"altmetric-embed\"\u003e\u003c/span\u003e\n\u003c!-- badges: end --\u003e\n\u003cscript type='text/javascript' src='https://d1bxh8uas1mnw7.cloudfront.net/assets/embed.js'\u003e\u003c/script\u003e\n\n`containerit` packages R script/session/workspace and all dependencies as a [Docker](https://docker.com/) container by automagically generating a suitable `Dockerfile`.\nThe package's website is [https://o2r.info/containerit/](https://o2r.info/containerit/).\n\n## Prerequisites\n\n- `containerit` only fully works if you have [Docker](https://en.wikipedia.org/wiki/Docker_(software)) installed and is only tested with [Docker Engine - Community](https://docs.docker.com/install/overview/) (previously called Docker Community Edition or Docker CE).\n- `R (\u003e= 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.\n\n## Quick start\n\n### Try out `containerit` in a container\n\nYou can spin up a Docker container with `containerit` pre-installed if you want to try out the package.\nThe default of the [`containerit` images on Docker Hub](#images) is to start plain R, but you can also start an with [RStudio](https://www.rstudio.com/products/rstudio/) session in a browser.\n\n**Note**: The `geospatial` variant is used so that examples from `containerit` vignettes are likely to work.\nFor a minimal `Dockerfile` to run `containerit`, see `inst/docker/minimal/Dockerfile`.\n\n```{bash, eval=FALSE}\ndocker run --rm -it -e PASSWORD=o2r -p 8787:8787 o2rproject/containerit:geospatial /init\n```\n\nNow go to http://localhost:8787 and log in with the user `rstudio` and password `o2r`.\nContinue in section [Use](#use).\n\n### Install\n\nInstallation is only possible from GitHub:\n\n```{r, eval=FALSE}\n# install.packages(\"remotes\")\nremotes::install_github(\"o2r-project/containerit\")\n```\n\n### Use\n\n`containerit` can create `Dockerfile` objects in R and render them as `Dockerfile` instructions based on session information objects or runnable R files (`.R`, `.Rmd`).\n\n```{r use_session}\nsuppressPackageStartupMessages(library(\"containerit\"))\nmy_dockerfile \u003c- containerit::dockerfile(from = utils::sessionInfo())\n```\n\n```{r use_print}\nprint(my_dockerfile)\n```\n\nYou can disable logging:\n\n```{r disable_logger, results='hide'}\nfutile.logger::flog.threshold(futile.logger::ERROR)\n```\n\nNow we create a Dockerfile for a specific R version and a given R Markdown file.\nThe option `filter_baseimage_pkgs` is used to not add any packages already available in the base image, which can save a lot of build time.\n\n```{bash pull, include=FALSE}\ndocker pull rocker/verse:3.6.2\n```\n\n```{r use_file}\nrmd_dockerfile \u003c- containerit::dockerfile(from = \"inst/demo.Rmd\",\n                                          image = \"rocker/verse:3.5.2\",\n                                          maintainer = \"o2r\",\n                                          filter_baseimage_pkgs = TRUE)\nprint(rmd_dockerfile)\n```\n\nFor extended instructions, see the vignettes at in the directory `vignettes/`, which are readable online at https://o2r.info/containerit/articles/.\n\n## Images\n\n```{r image_names, echo=FALSE, results='hide'}\ndockerfiles_path \u003c- \"inst/docker/Dockerfile\"\nsuppressPackageStartupMessages(library(\"here\"))\ndockerfile_latest \u003c- readLines(here(dockerfiles_path))\nbase_image = sub(\".*? (.+)\", \"\\\\1\", dockerfile_latest[[2]])\ndockerfile_geospatial \u003c- readLines(here(\"inst/docker/geospatial/Dockerfile\"))\ngeospatial_base_image = sub(\".*? (.+)\", \"\\\\1\", dockerfile_geospatial[[2]])\n```\n\nImages are available starting from different base images.\nAll images are also available with version tags.\n\nThe `Dockerfile`s are available in the directory `` `r dockerfiles_path` ``.\n\n### verse\n\n```{bash, eval=FALSE}\ndocker inspect o2rproject/containerit\n```\n\nBase image: `` `r base_image` ``\n\n[![](https://images.microbadger.com/badges/version/o2rproject/containerit.svg)](https://microbadger.com/images/o2rproject/containerit \"Get your own version badge on microbadger.com\") [![](https://images.microbadger.com/badges/image/o2rproject/containerit.svg)](https://microbadger.com/images/o2rproject/containerit \"Get your own image badge on microbadger.com\") [![](https://images.microbadger.com/badges/commit/o2rproject/containerit.svg)](https://microbadger.com/images/o2rproject/containerit \"Get your own commit badge on microbadger.com\")\n\n### geospatial\n\n```{bash eval=FALSE}\ndocker inspect o2rproject/containerit:geospatial\n```\n\nBase image: `` `r geospatial_base_image` ``\n\n[![](https://images.microbadger.com/badges/version/o2rproject/containerit:geospatial.svg)](https://microbadger.com/images/o2rproject/containerit:geospatial \"Get your own version badge on microbadger.com\") [![](https://images.microbadger.com/badges/image/o2rproject/containerit:geospatial.svg)](https://microbadger.com/images/o2rproject/containerit:geospatial \"Get your own image badge on microbadger.com\") [![](https://images.microbadger.com/badges/commit/o2rproject/containerit:geospatial.svg)](https://microbadger.com/images/o2rproject/containerit:geospatial \"Get your own commit badge on microbadger.com\")\n\n## RStudio Add-in\n\n[RStudio Addins](https://rstudio.github.io/rstudioaddins/) allow to create interactive user interfaces for the RStudio development environment.\nCourtesy of a great contribution by a [group of enthusiasts](https://github.com/o2r-project/containerit/issues/27#issuecomment-440869329) at the [ROpenSci OZ Unconference 2018](https://ozunconf18.ropensci.org/), there are several forms to quickly create `Dockefile`s from different use cases, e.g. the current session, a vector of expressions, or a script file.\n\n![screenshots containerit RStudio Addin forms](https://user-images.githubusercontent.com/1325054/61534429-e1345980-aa2f-11e9-8f5d-e6f67e5d7dde.png)\n\n## Contribute\n\nAll help is welcome: asking questions, providing documentation, testing, or even development.\n\nPlease note that this project is released with a [Contributor Code of Conduct](CONDUCT.md).\nBy participating in this project you agree to abide by its terms.\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for details.\n\n## Development\n\n[r-hub builder](https://builder.r-hub.io/) is great for running checks, e.g. before submitting to CRAN and on other operating systems.\n\n```{r checking, eval=FALSE}\nlibrary(\"rhub\")\nrhub::check_for_cran()\nrhub::check_on_windows()\n```\n\nYou can build the [`pkgdown`](https://pkgdown.r-lib.org/) site with\n\n```{r pkgdown, eval=FALSE}\npkgdown::build_site()\n```\n\nYou can build the Docker images locally with the current development version using the following commands.\n\n```{bash dev_containers, eval=FALSE}\ndocker build --tag containerit:dev --file inst/docker/Dockerfile.local .\ndocker build --tag containerit:geospatial-dev --file inst/docker/geospatial/Dockerfile.local .\n```\n\nYou can use [`pre-commit` hooks](https://github.com/lorenzwalthert/pre-commit-hooks) to avoid some mistakes.\n\nA [codemeta](https://codemeta.github.io/) file, `codemeta.json`, with metadata about the package and its dependencies is generated automatically when this document is compiled.\n\n```{r codemeta, results='hide'}\ncodemetar::write_codemeta(\".\")\n```\n\n## Citation\n\n```{r citation, echo=FALSE, comment=\"\"}\ncitation(\"containerit\")\n```\n\n## License\n\ncontainerit is licensed under GNU General Public License, version 3, see file LICENSE.\n\nCopyright (C) 2019 - o2r project.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fo2r-project%2Fcontainerit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fo2r-project%2Fcontainerit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fo2r-project%2Fcontainerit/lists"}