{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,5,14]],"date-time":"2026-05-14T08:10:04Z","timestamp":1778746204393,"version":"3.51.4"},"reference-count":67,"publisher":"Public Library of Science (PLoS)","issue":"11","license":[{"start":{"date-parts":[[2020,11,10]],"date-time":"2020-11-10T00:00:00Z","timestamp":1604966400000},"content-version":"vor","delay-in-days":0,"URL":"http:\/\/creativecommons.org\/licenses\/by\/4.0\/"}],"content-domain":{"domain":["www.ploscompbiol.org"],"crossmark-restriction":false},"short-container-title":["PLoS Comput Biol"],"abstract":"<jats:p>\n                    Computational science has been greatly improved by the use of containers for packaging software and data dependencies. In a scholarly context, the main drivers for using these containers are transparency and support of reproducibility; in turn, a workflow\u2019s reproducibility can be greatly affected by the choices that are made with respect to building containers. In many cases, the build process for the container\u2019s image is created from instructions provided in a\n                    <jats:monospace>Dockerfile<\/jats:monospace>\n                    format. In support of this approach, we present a set of rules to help researchers write understandable\n                    <jats:monospace>Dockerfiles<\/jats:monospace>\n                    for typical data science workflows. By following the rules in this article, researchers can create containers suitable for sharing with fellow scientists, for including in scholarly communication such as education or scientific papers, and for effective and sustainable personal workflows.\n                  <\/jats:p>","DOI":"10.1371\/journal.pcbi.1008316","type":"journal-article","created":{"date-parts":[[2020,11,10]],"date-time":"2020-11-10T13:33:17Z","timestamp":1605015197000},"page":"e1008316","update-policy":"https:\/\/doi.org\/10.1371\/journal.pcbi.corrections_policy","source":"Crossref","is-referenced-by-count":62,"title":["Ten simple rules for writing Dockerfiles for reproducible data science"],"prefix":"10.1371","volume":"16","author":[{"ORCID":"https:\/\/orcid.org\/0000-0002-0024-5046","authenticated-orcid":true,"given":"Daniel","family":"N\u00fcst","sequence":"first","affiliation":[],"role":[{"role":"author","vocabulary":"crossref"}]},{"ORCID":"https:\/\/orcid.org\/0000-0002-4387-3819","authenticated-orcid":true,"given":"Vanessa","family":"Sochat","sequence":"additional","affiliation":[],"role":[{"role":"author","vocabulary":"crossref"}]},{"ORCID":"https:\/\/orcid.org\/0000-0001-7879-4531","authenticated-orcid":true,"given":"Ben","family":"Marwick","sequence":"additional","affiliation":[],"role":[{"role":"author","vocabulary":"crossref"}]},{"ORCID":"https:\/\/orcid.org\/0000-0001-8607-8025","authenticated-orcid":true,"given":"Stephen J.","family":"Eglen","sequence":"additional","affiliation":[],"role":[{"role":"author","vocabulary":"crossref"}]},{"given":"Tim","family":"Head","sequence":"additional","affiliation":[],"role":[{"role":"author","vocabulary":"crossref"}]},{"ORCID":"https:\/\/orcid.org\/0000-0001-6921-702X","authenticated-orcid":true,"given":"Tony","family":"Hirst","sequence":"additional","affiliation":[],"role":[{"role":"author","vocabulary":"crossref"}]},{"given":"Benjamin D.","family":"Evans","sequence":"additional","affiliation":[],"role":[{"role":"author","vocabulary":"crossref"}]}],"member":"340","published-online":{"date-parts":[[2020,11,10]]},"reference":[{"key":"pcbi.1008316.ref001","unstructured":"Marwick B. How computers broke science\u2014and what we can do to fix it [Internet]. The Conversation. 2015. https:\/\/theconversation.com\/how-computers-broke-science-and-what-we-can-do-to-fix-it-49938"},{"key":"pcbi.1008316.ref002","doi-asserted-by":"crossref","first-page":"385","DOI":"10.1093\/biostatistics\/kxq028","article-title":"An invitation to reproducible computational research","volume":"11","author":"DL Donoho","year":"2010","journal-title":"Biostatistics"},{"key":"pcbi.1008316.ref003","doi-asserted-by":"crossref","first-page":"e1001745","DOI":"10.1371\/journal.pbio.1001745","article-title":"Best practices for scientific computing","volume":"12","author":"G Wilson","year":"2014","journal-title":"PLoS Biol"},{"key":"pcbi.1008316.ref004","doi-asserted-by":"crossref","first-page":"e1005510","DOI":"10.1371\/journal.pcbi.1005510","article-title":"Good enough practices in scientific computing","volume":"13","author":"G Wilson","year":"2017","journal-title":"PLoS Comput Biol"},{"key":"pcbi.1008316.ref005","doi-asserted-by":"crossref","first-page":"e1007007","DOI":"10.1371\/journal.pcbi.1007007","article-title":"Ten simple rules for writing and sharing computational analyses in Jupyter Notebooks","volume":"15","author":"A Rule","year":"2019","journal-title":"PLoS Comput Biol"},{"key":"pcbi.1008316.ref006","doi-asserted-by":"crossref","first-page":"e1003285","DOI":"10.1371\/journal.pcbi.1003285","article-title":"Ten simple rules for reproducible computational research","volume":"9","author":"GK Sandve","year":"2013","journal-title":"PLoS Comput Biol"},{"key":"pcbi.1008316.ref007","unstructured":"N\u00fcst D. Author Carpentry: Docker for reproducible research [Internet]. 2017. https:\/\/nuest.github.io\/docker-reproducible-research\/"},{"key":"pcbi.1008316.ref008","unstructured":"Chapman P. Reproducible data science environments with Docker Phil Chapman\u2019s Blog [Internet]. 2018. https:\/\/chapmandu2.github.io\/post\/2018\/05\/26\/reproducible-data-science-environments-with-docker\/"},{"key":"pcbi.1008316.ref009","unstructured":"rOpenSci Labs. R Docker tutorial [Internet]. 2015. https:\/\/ropenscilabs.github.io\/r-docker-tutorial\/"},{"key":"pcbi.1008316.ref010","unstructured":"Udemy, Zhbanko V. Docker Containers for Data Science and Reproducible Research [Internet]. Udemy. 2019. https:\/\/www.udemy.com\/course\/docker-containers-data-science-reproducible-research\/"},{"key":"pcbi.1008316.ref011","unstructured":"Psomopoulos FE. Lesson \"Docker and Reproducibility\" in Workshop \"Reproducible analysis and Research Transparency\" [Internet]. Reproducible analysis and Research Transparency. 2017. https:\/\/reproducible-analysis-workshop.readthedocs.io\/en\/latest\/8.Intro-Docker.html"},{"key":"pcbi.1008316.ref012","doi-asserted-by":"crossref","first-page":"742","DOI":"10.12688\/f1000research.15140.2","article-title":"Recommendations for the packaging and containerizing of bioinformatics software","volume":"7","author":"B Gruening","year":"2019","journal-title":"F1000Research"},{"key":"pcbi.1008316.ref013","unstructured":"Docker Inc. Best practices for writing Dockerfiles [Internet]. Docker Documentation. 2020. https:\/\/docs.docker.com\/develop\/develop-images\/dockerfile_best-practices\/"},{"key":"pcbi.1008316.ref014","unstructured":"Vass T. Intro Guide to Dockerfile Best Practices [Internet]. Docker Blog. 2019. https:\/\/www.docker.com\/blog\/intro-guide-to-dockerfile-best-practices\/"},{"key":"pcbi.1008316.ref015","doi-asserted-by":"crossref","first-page":"e0177459","DOI":"10.1371\/journal.pone.0177459","article-title":"Singularity: Scientific containers for mobility of compute","volume":"12","author":"GM Kurtzer","year":"2017","journal-title":"PLoS ONE"},{"key":"pcbi.1008316.ref016","unstructured":"Docker Inc. Overview of Docker Compose [Internet]. Docker Documentation. 2019. https:\/\/docs.docker.com\/compose\/"},{"key":"pcbi.1008316.ref017","doi-asserted-by":"crossref","DOI":"10.1045\/january2017-nuest","article-title":"Opening the Publication Process with Executable Research Compendia","volume":"23","author":"D N\u00fcst","year":"2017","journal-title":"D-Lib Magazine"},{"key":"pcbi.1008316.ref018","article-title":"The Four Pillars of Research Software Engineering","author":"J Cohen","year":"2020","journal-title":"IEEE Softw"},{"key":"pcbi.1008316.ref019","unstructured":"Wikipedia contributors. Docker (software) [Internet]. Wikipedia. 2019. https:\/\/en.wikipedia.org\/w\/index.php?title=Docker_(software)&oldid=928441083"},{"key":"pcbi.1008316.ref020","doi-asserted-by":"crossref","first-page":"527","DOI":"10.32614\/RJ-2017-065","article-title":"An Introduction to Rocker: Docker Containers for R","volume":"9","author":"C Boettiger","year":"2017","journal-title":"The R Journal"},{"key":"pcbi.1008316.ref021","doi-asserted-by":"crossref","first-page":"113","DOI":"10.1038\/s41567-018-0342-2","article-title":"Open is not enough","volume":"15","author":"X Chen","year":"2019","journal-title":"Nat Phys"},{"key":"pcbi.1008316.ref022","article-title":"Computing environments for reproducibility: Capturing the \u201cWhole Tale\u201d","author":"A Brinckman","year":"2018","journal-title":"Futur Gener Comput Syst"},{"key":"pcbi.1008316.ref023","unstructured":"Code Ocean [Internet]. 2019. https:\/\/codeocean.com\/"},{"key":"pcbi.1008316.ref024","doi-asserted-by":"crossref","first-page":"06034","DOI":"10.1051\/epjconf\/201921406034","article-title":"REANA: A System for Reusable Research Data Analyses","volume":"214","author":"T \u0160imko","year":"2019","journal-title":"EPJ Web Conf"},{"key":"pcbi.1008316.ref025","doi-asserted-by":"crossref","unstructured":"Project Jupyter, Bussonnier M, Forde J, Freeman J, Granger B, Head T, et al. Binder 2.0\u2014Reproducible, interactive, sharable environments for science at scale. Proceedings of the 17th Python in Science Conference. 2018;113\u2013120. 10.25080\/Majora-4af1f417-011","DOI":"10.25080\/Majora-4af1f417-011"},{"key":"pcbi.1008316.ref026","unstructured":"Docker Inc. Dockerfile reference [Internet]. Docker Documentation. 2019. https:\/\/docs.docker.com\/engine\/reference\/builder\/"},{"key":"pcbi.1008316.ref027","unstructured":"Wikipedia contributors. Make (software) [Internet]. Wikipedia. 2019. https:\/\/en.wikipedia.org\/w\/index.php?title=Make_(software)&oldid=929976465"},{"key":"pcbi.1008316.ref028","doi-asserted-by":"crossref","first-page":"71","DOI":"10.1145\/2723872.2723882","article-title":"An Introduction to Docker for Reproducible Research","volume":"49","author":"C Boettiger","year":"2015","journal-title":"SIGOPS Oper Syst Rev"},{"key":"pcbi.1008316.ref029","unstructured":"Ben Marwick. 1989-excavation-report-Madjebebe. 2015. 10.6084\/m9.figshare.1297059"},{"key":"pcbi.1008316.ref030","unstructured":"Docker Inc. Official Images on Docker Hub [Internet]. Docker Documentation 2019. https:\/\/docs.docker.com\/docker-hub\/official_images\/"},{"key":"pcbi.1008316.ref031","doi-asserted-by":"crossref","first-page":"1603","DOI":"10.21105\/joss.01603","article-title":"Containerit: Generating Dockerfiles for reproducible research with R","volume":"4","author":"D N\u00fcst","year":"2019","journal-title":"J Open Source Softw"},{"key":"pcbi.1008316.ref032","unstructured":"Stencila. Stencila\/dockta [Internet]. Stencila. 2019. https:\/\/github.com\/stencila\/dockta"},{"key":"pcbi.1008316.ref033","unstructured":"Cookiecutter contributors. Cookiecutter\/cookiecutter [Internet]. cookiecutter. 2019. https:\/\/github.com\/cookiecutter\/cookiecutter"},{"key":"pcbi.1008316.ref034","unstructured":"Marwick B. Benmarwick\/rrtools [Internet]. 2019. https:\/\/github.com\/benmarwick\/rrtools"},{"key":"pcbi.1008316.ref035","unstructured":"Docker Inc. Official Images on Docker Hub [Internet]. Docker Documentation 2020. https:\/\/docs.docker.com\/docker-hub\/official_images\/"},{"key":"pcbi.1008316.ref036","doi-asserted-by":"crossref","DOI":"10.3389\/fninf.2012.00022","article-title":"Open is Not Enough. Let\u2019s Take the Next Step: An Integrated, Community-Driven Computing Platform for Neuroscience","volume":"6","author":"YO Halchenko","year":"2012","journal-title":"Front Neuroinform"},{"key":"pcbi.1008316.ref037","doi-asserted-by":"crossref","first-page":"1686","DOI":"10.21105\/joss.01686","article-title":"Welcome to the tidyverse","volume":"4","author":"H Wickham","year":"2019","journal-title":"J Open Source Softw"},{"key":"pcbi.1008316.ref038","unstructured":"Preston-Werner T. Semantic Versioning 2.0.0 [Internet]. Semantic Versioning. 2013. https:\/\/semver.org\/"},{"key":"pcbi.1008316.ref039","unstructured":"Docker Inc. Use multi-stage builds [Internet]. Docker Documentation 2020. https:\/\/docs.docker.com\/develop\/develop-images\/multistage-build\/"},{"key":"pcbi.1008316.ref040","unstructured":"Goodman A. Wagoodman\/dive [Internet]. 2019. https:\/\/github.com\/wagoodman\/dive"},{"key":"pcbi.1008316.ref041","unstructured":"Opencontainers. Opencontainers\/image-spec v1.0.1\u2014Annotations [Internet]. GitHub. 2017. https:\/\/github.com\/opencontainers\/image-spec\/blob\/v1.0.1\/annotations.md"},{"key":"pcbi.1008316.ref042","unstructured":"Docker Inc. Dockerfile reference, healthcheck [Internet]. Docker Documentation. 2020. https:\/\/docs.docker.com\/engine\/reference\/builder\/#healthcheck"},{"key":"pcbi.1008316.ref043","unstructured":"The Python Software Foundation. Requirements Files\u2014pip User Guide [Internet]. 2019. https:\/\/pip.pypa.io\/en\/stable\/user_guide\/#requirements-files"},{"key":"pcbi.1008316.ref044","unstructured":"Continuum Analytics. Managing environments\u2014conda documentation [Internet]. 2017. https:\/\/docs.conda.io\/projects\/conda\/en\/latest\/user-guide\/tasks\/manage-environments.html"},{"key":"pcbi.1008316.ref045","unstructured":"R Core Team. The DESCRIPTION file in \"writing r extensions\" [Internet]. 1999. https:\/\/cran.r-project.org\/doc\/manuals\/r-release\/R-exts.html#The-DESCRIPTION-file"},{"key":"pcbi.1008316.ref046","unstructured":"Eddelbuettel D, Horner J. Littler: R at the command-line via \u2018r\u2019 [Internet]. 2019. https:\/\/CRAN.R-project.org\/package=littler"},{"key":"pcbi.1008316.ref047","unstructured":"npm. Creating a package.json file npm Documentation [Internet]. 2019. https:\/\/docs.npmjs.com\/creating-a-package-json-file"},{"key":"pcbi.1008316.ref048","unstructured":"The Julia Language Contributors. 10. Project.Toml and Manifest.Toml Pkg.Jl [Internet]. 2019. https:\/\/julialang.github.io\/Pkg.jl\/v1\/toml-files\/"},{"key":"pcbi.1008316.ref049","doi-asserted-by":"crossref","DOI":"10.2218\/ijdc.v12i2.509","article-title":"A Framework for the Preservation of a Docker Container","volume":"12","author":"I Emsley","year":"2018","journal-title":"Int J Digit Curation"},{"key":"pcbi.1008316.ref050","unstructured":"Docker Inc. Use bind mounts [Internet]. Docker Documentation. 2019. https:\/\/docs.docker.com\/storage\/bind-mounts\/"},{"key":"pcbi.1008316.ref051","article-title":"JudithVerstegen\/PLUC_Mozambique: First release of PLUC for Mozambique","author":"JA Verstegen","year":"2019","journal-title":"Zenodo"},{"key":"pcbi.1008316.ref052","doi-asserted-by":"crossref","DOI":"10.1093\/gigascience\/giy023","article-title":"The Scientific Filesystem","volume":"7","author":"V Sochat","year":"2018","journal-title":"GigaScience"},{"key":"pcbi.1008316.ref053","doi-asserted-by":"crossref","first-page":"290","DOI":"10.3390\/rs9030290","article-title":"Reproducibility and Practical Adoption of GEOBIA with Open-Source Software in Docker Containers","volume":"9","author":"C Knoth","year":"2017","journal-title":"Remote Sens"},{"key":"pcbi.1008316.ref054","doi-asserted-by":"crossref","first-page":"1","DOI":"10.1016\/j.ascom.2018.08.003","article-title":"Kliko\u2014The scientific compute container format","volume":"25","author":"G Molenaar","year":"2018","journal-title":"Astronomy Comput"},{"key":"pcbi.1008316.ref055","unstructured":"Selenium contributors. SeleniumHQ\/selenium [Internet]. Selenium. 2019. https:\/\/github.com\/SeleniumHQ\/selenium"},{"key":"pcbi.1008316.ref056","unstructured":"Singularity. Frequently Asked Questions Singularity [Internet]. 2019. http:\/\/singularity.lbl.gov\/archive\/docs\/v2-2\/faq#can-i-run-x11-apps-through-singularity"},{"key":"pcbi.1008316.ref057","doi-asserted-by":"crossref","first-page":"1349","DOI":"10.21105\/joss.01349","article-title":"X11docker: Run GUI applications in Docker containers","volume":"4","author":"M Viereck","year":"2019","journal-title":"J Open Source Softw"},{"key":"pcbi.1008316.ref058","unstructured":"Yaremenko E. JAremko\/docker-x11-bridge [Internet]. 2019. https:\/\/github.com\/JAremko\/docker-x11-bridge"},{"key":"pcbi.1008316.ref059","unstructured":"Panda Y. Yuvipanda\/jupyter-desktop-server [Internet]. 2019. https:\/\/github.com\/yuvipanda\/jupyter-desktop-server"},{"key":"pcbi.1008316.ref060","unstructured":"Marwick B. README of 1989-excavation-report-Madjebebe. 2015. 10.6084\/m9.figshare.1297059"},{"key":"pcbi.1008316.ref061","unstructured":"A rule-based linter for dockerfiles [Internet]. 2020. https:\/\/github.com\/projectatomic\/dockerfile_lint"},{"key":"pcbi.1008316.ref062","unstructured":"Dockerfile linter [Internet]. 2020. https:\/\/hadolint.github.io\/hadolint\/"},{"key":"pcbi.1008316.ref063","doi-asserted-by":"crossref","unstructured":"Eglen S, N\u00fcst D. CODECHECK: An open-science initiative to facilitate sharing of computer programs and results presented in scientific publications. Septentrio Conference Series 2019. 10.7557\/5.4910","DOI":"10.7557\/5.4910"},{"key":"pcbi.1008316.ref064","doi-asserted-by":"crossref","first-page":"1031","DOI":"10.1038\/s41562-019-0726-z","article-title":"Training students for the Open Science future","volume":"3","author":"F Sch\u00f6nbrodt","year":"2019","journal-title":"Nat Hum Behav"},{"key":"pcbi.1008316.ref065","doi-asserted-by":"crossref","first-page":"775","DOI":"10.1042\/ETLS20180172","article-title":"Recent developments in scholarly publishing to improve research practices in the life sciences","volume":"2","author":"SJ Eglen","year":"2018","journal-title":"Emerg Top Life Sci"},{"key":"pcbi.1008316.ref066","article-title":"Before reproducibility must come preproducibility","author":"PB Stark","year":"2018","journal-title":"Nature"},{"key":"pcbi.1008316.ref067","article-title":"Ten Simple Rules for Writing Dockerfiles for Reproducible Data Science","author":"D N\u00fcst","year":"2020","journal-title":"Open Science Framework"}],"container-title":["PLOS Computational Biology"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/dx.plos.org\/10.1371\/journal.pcbi.1008316","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2020,11,10]],"date-time":"2020-11-10T13:34:12Z","timestamp":1605015252000},"score":1,"resource":{"primary":{"URL":"https:\/\/dx.plos.org\/10.1371\/journal.pcbi.1008316"}},"subtitle":[],"editor":[{"given":"Scott","family":"Markel","sequence":"first","affiliation":[],"role":[{"role":"editor","vocabulary":"crossref"}]}],"short-title":[],"issued":{"date-parts":[[2020,11,10]]},"references-count":67,"journal-issue":{"issue":"11","published-online":{"date-parts":[[2020,11,10]]}},"URL":"https:\/\/doi.org\/10.1371\/journal.pcbi.1008316","relation":{"has-preprint":[{"id-type":"doi","id":"10.31219\/osf.io\/fsd7t","asserted-by":"object"}]},"ISSN":["1553-7358"],"issn-type":[{"value":"1553-7358","type":"electronic"}],"subject":[],"published":{"date-parts":[[2020,11,10]]}}}