From 697aae49c1882c3977427e286f56c154f5f87768 Mon Sep 17 00:00:00 2001 From: Falk Mielke Date: Tue, 28 Jan 2025 11:58:36 +0100 Subject: [PATCH 01/51] docker: docker build --- .../development_dockercompose/index.qmd | 317 ++++++++++++++++++ 1 file changed, 317 insertions(+) create mode 100644 content/tutorials/development_dockercompose/index.qmd diff --git a/content/tutorials/development_dockercompose/index.qmd b/content/tutorials/development_dockercompose/index.qmd new file mode 100644 index 000000000..66feb2292 --- /dev/null +++ b/content/tutorials/development_dockercompose/index.qmd @@ -0,0 +1,317 @@ +--- +title: "Development/Docker: Compose" +format: + html: + toc: true + html-math-method: katex + code-fold: true +knitr: + opts_chunk: + echo: true +--- + +TODO: screenshots + + + +In this tutorial, I demonstrate how to set up and deploy a **custom docker container** with [**docker-compose**](https://docs.docker.com/compose). +This is intended to be a rather general test case, serving for later configuration of more specific container solutions. +I follow other tutorials available online, and try to capture their essence for an INBO-context. + + +Originally, this covers the steps to be executed on an (arch) linux computer or within a WSL. +On Windows, installation is different, yet there should be a linux-like terminal in the `docker desktop` app which would allow you to run the same commands. + +I will later attempt to reproduce the steps on windows. + + + +__References:__ + +- +- +- + + +# Installation + +The installation procedure [is documented here](https://docs.docker.com/compose/install). + +Docker compose comes with the *Docker Desktop* app. +That app is probably trivial and hardly worth a tutorial. +Alternatively, you can install it as a terminal tool. + + +```{sh} +sudo apt update && sudo apt install docker docker-compose docker-buildx # debian-based +# sudo pacman -Sy docker docker-compose docker-buildx # arch linux +``` + + +For users to be able to use docker, they must be in the "docker" group. +(Insert your username at ``.) + +```{sh} +sudo usermod -a -G docker +``` + +For this change to take effect, log off en in again and restart of the docker service (see below). + + +Containers are managed by a system task ("service") which needs to be started. +Your system can start and stop that service automatically, by using `systemctl enable <...>`. +However, due to [diverse](https://docs.docker.com/engine/security) [security](https://github.com/moby/moby/issues/9976) [pitfalls](https://snyk.io/blog/top-ten-most-popular-docker-images-each-contain-at-least-30-vulnerabilities), it is good practice to not keep it activated permanently on your system. + + +On a `systemd` system, you can start and stop docker on demand via the following commands (those will ask you for `sudo` authentification if necessary). + +```{sh} +systemctl start docker + +systemctl status docker # check status + +systemctl stop docker.socket +systemctl stop docker.service +``` + + +You can check the docker installation by confirming the version at which the service is running. + +```{sh} +docker --version +``` + + +# Existing Containers: `run` + +## rationale + +Docker is about working in containers, if you like that. +You can think of this as living in a ["tiny home", or "mobile home"](https://parametric-architecture.com/tiny-house-movement). +Let's call it a fancy caravan. + +If you do not have the cash to build your own home, you can of course use someone elses'. + + +## example + +For example[^1], there are docker images with [rstudio server](https://posit.co/download/rstudio-server) pre-installed: + +- + +[^1]: I mostly follow [this tutorial](https://jsta.github.io/r-docker-tutorial/02-Launching-Docker.html). + + +Execute the following script. +If it does not find the resources locally, docker will download and extract the image from dockerhub[^2]. + +[^2]: Just like "github" is a server service to store git repositories, guess what: "docker hub" is a service to store docker containers. + +```{sh} +docker run --rm -p 8787:8787 -e PASSWORD=YOURNEWPASSWORD rocker/rstudio +``` + +The `--rm` flag makes the docker image non-permanent, i.e. disk space will be freed after you close the container. +The port specified at `-p` is the one you use to access this local container server. +The `-e` flag allows you to specify a password, but if you do not specify one, the container will provide a random password upon startup (read the terminal output). + + +You are now running (`run`) a `rocker/rstudio` server instance on your `localhost`, i.e. your computer. +You can access it via a browser, going to , with the username `rstudio` and your chosen password. + + +You can shut down the container with the keyboard shortcut `[ctrl]+[C]` (probably `[ctrl]+[Z]` on windows). + + +## file access + +The downside of this is that your container is isolated (well... at least to a certain degree). + +To store files locally, without storing the bloated container, you will have to map a virtual path on the container to a local drive on your computer. +(Linux people will be familiar with the concept of "mounting" and "linking" storage locations.) + +Docker run brings the `-v` flag for this. +Suppose you have an R project you would like to work on, stored, for example, in this path: + +- `/data/git/coding-club` + +Then you can link this to your containers' home folder via the following command. + +```{sh} +docker run --rm -p 8787:8787 -v /data/git/coding-club:/home/rstudio/coding-club rocker/rstudio +``` + +Again, navigate to , *et voilà*, you can access your project and store files back in your regular folders. + + +## limitation + +This is a simple and quick way to run R and RStudio in a container. + +However, there are limitations: + +::: {.callout-warning} +- You have to live with the R packages provided in the container, or otherwise install them each time you access it... +- ... unless you make you container permanent by omitting the `--rm` option. Note that this will cost considerable disk space, will not transfer to other computers (the original purpose of docker), and demands occasional updates (next point). +- It is good practice to keep software up to date. Occasionally re-install your docker image and R packages to get the latest versions. +- You should make sure that the containers are configured correctly and securely. This is especially important with server components which expose your machine to the internet. +- There is a performance penalty from using containers: in inaccurate laymans' terms, they emulate (parts of a) "computer" inside your computer. + +::: + + +On the performance issue: I attempted this on my local laptop with matrix multiplication. + +```{r} +# https://cran.r-project.org/web/packages/rbenchmark/rbenchmark.pdf +# install.packages("rbenchmark") + +test <- function(){ + # test from https://prdm0.github.io/ropenblas/#installation + m <- 1e4; n <- 1e3; k <- 3e2 + X <- matrix(rnorm(m*k), nrow=m); Y <- matrix(rnorm(n*k), ncol=n) + X %*% Y +} + +benchmark(test()) +``` + +In the terminal: + +``` + test replications elapsed relative user.self sys.self user.child sys.child +1 test() 100 22.391 1 83.961 65.291 0 0 +``` + +In the container: + +``` + test replications elapsed relative user.self sys.self user.child sys.child +1 test() 100 26.076 1 102.494 153.89 0 0 +``` + +Now, the *good news* is that the difference is not by orders of magnitude, which indicates that docker seems to integrate the `blas` variant I installed on my computer (`blas-openblas`). + +The *bad news* is that these are a little less than `-20%` performance, which is considerable. + + +This is just a single snapshot on a laptop. +Feel free to systematically and scientifically repeat the tests on your own machine. + + +# Custom Containers: `build` + +## rationale + +One advantage of a docker container is its mobility: you can "bring it with you" to other workstations, use cloud computing, mostly without having to worry about installation of the components. +This especially pays off in complicated server setups and distributed computing. +The container is standardized; you could share it with colleagues to make sure versions are compatible. + + +However, as mentioned above, you will require personalization. +As a use case, imagine you would like to have an RStudio server which comes with relevant inbo packages pre-installed (e.g. [`inbodb`](https://inbo.github.io/inbodb), [`watina`](https://inbo.github.io/watina)). + +I will return to this use case below. +To explore the general workings of `docker build`, let's first turn to more web-directed tasks. + + +## init: a `flask` + +[Python `flask`](https://en.wikipedia.org/wiki/Flask_(web_framework)) is a library which allows you to execute python scripts upon web access by users. +For example, you can use flask to gather information a user provides in an html form, then process and store it wherever you like. + + +I will follow the following examples and tutorials to spin up a flask container, but provide modifications and comments on the steps. + +- +- + + + +> **It all starts with a [dockerfile](https://www.geeksforgeeks.org/what-is-dockerfile).**[^3] + +[^3]: + + +As you will see, the docker file will give you all the design choices to create your own container. +I think of the docker file as a script which provides all the instructions to set up your container, starting with `FROM` (i.e. which prior container you build upon) to `RUN`ning commands. + + +A list of the official python containers is [available here](https://hub.docker.com/_/python). +Note that you build every container upon the skeleton of an operating system: I chose [alpine linux](https://en.wikipedia.org/wiki/Alpine_Linux). + + +The dockerfile resides in your working folder (yet it also defines a [`WORKDIR`](https://stackoverflow.com/a/51066379) from within which later commands are executed). + +- Navigate to a folder in which you intend to store your container(s), e.g. `cd /data/docker`. +- Create a file called `Dockerfile`: `touch Dockerfile`. +- Edit the file in your favorite text editor (`vim Dockerfile`): paste and modify the content below. + +```{dsl} +# Use the official Python image (alpine linux, python 3) +FROM python:3-alpine + +# install app dependencies +RUN apk update && apk add --no-cache python3 py3-pip +RUN pip install flask + +# install app +COPY hello.py / + +# final configuration +ENV FLASK_APP=hello +EXPOSE 8000 +CMD ["flask", "run", "--host", "0.0.0.0", "--port", "8000"] +``` + + +Note that the following `hello.py` file needs to be present in your working directory: + +```{python} +from flask import Flask +app = Flask(__name__) + +@app.route("/") +def hello(): + return "Hello, INBO!" +``` + + +With the `Dockerfile` and `hello.py` in place, you can build the container [^4]. + +```{sh} +sudo docker build -t my-flask . +``` + +[^4]: If you did not install the `docker-buildx` package, you will get a legacy warning. + + +List your available containers ("images") via the `docker images` command! + +You should now see a `python` image, which is the base alpine image we built upon. +There is also a `my-flask`. +Try it! + +```{sh} +docker run my-flask +``` + +The terminal should give you an IP and port; because the flask runs in a container, `localhost:8000` will not work out-of-the-box. +Instead, in my case, it was `http://172.17.0.2:8000`. + + +:::{.callout-note} +So far, so good. +We have used an existing image and added `flask` on top of it. +This works via writing a `Dockerfile` and building an image. +::: + + +## Multiple Images: `compose` versus `build` + +The above works fine for most cases. +However, if you want to assemble multiple images, or build on base images from multiple sources, you need a level up. + +In that case `docker compose` is [the way to go](https://docs.docker.com/compose/gettingstarted). + + From cc71aaf80fef63447bb00d602b65a05f88763074 Mon Sep 17 00:00:00 2001 From: Falk Mielke Date: Tue, 28 Jan 2025 12:40:03 +0100 Subject: [PATCH 02/51] docker: extend rocker/rstudio for inbo --- .../development_dockercompose/index.qmd | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/content/tutorials/development_dockercompose/index.qmd b/content/tutorials/development_dockercompose/index.qmd index 66feb2292..223b4400f 100644 --- a/content/tutorials/development_dockercompose/index.qmd +++ b/content/tutorials/development_dockercompose/index.qmd @@ -17,6 +17,7 @@ TODO: screenshots In this tutorial, I demonstrate how to set up and deploy a **custom docker container** with [**docker-compose**](https://docs.docker.com/compose). This is intended to be a rather general test case, serving for later configuration of more specific container solutions. I follow other tutorials available online, and try to capture their essence for an INBO-context. +Hence, this is just an assembly of other tutorials, with references - no original ideas to be found below. Originally, this covers the steps to be executed on an (arch) linux computer or within a WSL. @@ -315,3 +316,55 @@ However, if you want to assemble multiple images, or build on base images from m In that case `docker compose` is [the way to go](https://docs.docker.com/compose/gettingstarted). + +# Use Case: RStudio with Packages + +## rationale + +We should be able to apply the above to modify the `rocker/rstudio` server image for our purpose. + + +## dockerfile + +This use case is, in fact, well documented: + +- +- +- + + +Note the syntax in `FROM`: it is `rocker/:`. + +```{dsl} +# Use the rocker rstudio image +FROM rocker/rstudio:latest + +# update the system packages +RUN apt update \ + && apt upgrade --yes + +# update pre-installed R packages +RUN Rscript -e 'update.packages(ask=FALSE)' + +# install package binaries from the official debian repositories +RUN apt install -y --no-install-recommends \ + r-cran-remotes \ + && rm -rf /var/lib/apt/lists/* + +# install package via Rscript +# (a) via r-universe +RUN Rscript -e 'install.packages("watina", repos = c(inbo = "https://inbo.r-universe.dev", CRAN = "https://cloud.r-project.org"))' + +# (b) from github +RUN Rscript -e 'install.packages("remotes")' +RUN Rscript -e 'remotes::install_github("inbo/inbodb")' +``` + + + + +# TODO + +- bugfix the last RStudio variant +- useful docker commands +- PodMan is available. From f5adca7d50dd11e3bbccdc55cf0bc9ce1a4c0797 Mon Sep 17 00:00:00 2001 From: Falk Mielke Date: Tue, 28 Jan 2025 17:11:10 +0100 Subject: [PATCH 03/51] docker: tested/run modified rstudio rocker --- .../development_dockercompose/index.qmd | 58 ++++++++++++++----- 1 file changed, 43 insertions(+), 15 deletions(-) diff --git a/content/tutorials/development_dockercompose/index.qmd b/content/tutorials/development_dockercompose/index.qmd index 223b4400f..c4d9678cd 100644 --- a/content/tutorials/development_dockercompose/index.qmd +++ b/content/tutorials/development_dockercompose/index.qmd @@ -112,9 +112,9 @@ If it does not find the resources locally, docker will download and extract the docker run --rm -p 8787:8787 -e PASSWORD=YOURNEWPASSWORD rocker/rstudio ``` -The `--rm` flag makes the docker image non-permanent, i.e. disk space will be freed after you close the container. -The port specified at `-p` is the one you use to access this local container server. -The `-e` flag allows you to specify a password, but if you do not specify one, the container will provide a random password upon startup (read the terminal output). +- The `--rm` flag makes the docker image non-permanent, i.e. disk space will be freed after you close the container. +- The port specified at `-p` is the one you use to access this local container server. You have to specify it explicitly, otherwise the host system will not let your pass (`:gandalf-meme:`). +- The `-e` flag allows you to specify a password, but if you do not specify one, the container will provide a random password upon startup (read the terminal output). You are now running (`run`) a `rocker/rstudio` server instance on your `localhost`, i.e. your computer. @@ -341,30 +341,58 @@ FROM rocker/rstudio:latest # update the system packages RUN apt update \ - && apt upgrade --yes + && apt upgrade --yes -# update pre-installed R packages -RUN Rscript -e 'update.packages(ask=FALSE)' +# git2rdata requires git +RUN apt install git libgit2-dev --yes -# install package binaries from the official debian repositories -RUN apt install -y --no-install-recommends \ - r-cran-remotes \ - && rm -rf /var/lib/apt/lists/* +# update pre-installed R packages +# RUN Rscript -e 'update.packages(ask=FALSE)' # install package via Rscript # (a) via r-universe -RUN Rscript -e 'install.packages("watina", repos = c(inbo = "https://inbo.r-universe.dev", CRAN = "https://cloud.r-project.org"))' +# RUN Rscript -e 'install.packages("watina", repos = c(inbo = "https://inbo.r-universe.dev", CRAN = "https://cloud.r-project.org"))' +RUN Rscript -e 'install.packages("git2rdata")' # (b) from github -RUN Rscript -e 'install.packages("remotes")' -RUN Rscript -e 'remotes::install_github("inbo/inbodb")' +RUN R -q -e 'install.packages("remotes")' +RUN R -q -e 'remotes::install_github("inbo/INBOmd", dependencies = TRUE)' ``` +It takes some puzzle work to get the dependencies right, e.g. with the `libgit2` dependency above (try commenting out that line). +However, there is hope: (i) the error output is quite instructive (at least for linux persons), (ii) building is incremental, so you can add successively. +Remember which system powers your container (Debian/Ubuntu), find help online, and document your progress. + + +Test the image: + +```{sh} +docker build -t test-rstudio . +``` + + +Run it: + +```{sh} +docker run --rm -p 8787:8787 -e PASSWORD=YOURNEWPASSWORD test-rstudio +``` + + +It is useful to put modifications in scripts copied and executed upon installation: +https://stackoverflow.com/q/69167940 +e.g. https://rocker-project.org/use/extending.html#install2.r + +This makes them available for version control. + + +# useful commands +docker inspect # TODO -- bugfix the last RStudio variant -- useful docker commands +- [✓] bugfix the last RStudio variant +- list useful docker commands - PodMan is available. +- port to windows From 2a5c0fc59ca55ab3c288942443a7e4016f6913d9 Mon Sep 17 00:00:00 2001 From: Falk Mielke Date: Wed, 29 Jan 2025 10:54:47 +0100 Subject: [PATCH 04/51] docker: podman --- .../development_dockercompose/index.qmd | 138 +++++++++++++++++- 1 file changed, 131 insertions(+), 7 deletions(-) diff --git a/content/tutorials/development_dockercompose/index.qmd b/content/tutorials/development_dockercompose/index.qmd index c4d9678cd..12e63b926 100644 --- a/content/tutorials/development_dockercompose/index.qmd +++ b/content/tutorials/development_dockercompose/index.qmd @@ -10,9 +10,6 @@ knitr: echo: true --- -TODO: screenshots - - In this tutorial, I demonstrate how to set up and deploy a **custom docker container** with [**docker-compose**](https://docs.docker.com/compose). This is intended to be a rather general test case, serving for later configuration of more specific container solutions. @@ -387,12 +384,139 @@ This makes them available for version control. # useful commands -docker inspect +We have briefly seen `docker --version`, `docker build`, `docker run`, and there are certainly more settings and tweaks on these commands to learn about. + +There are other docker commands which might help you out of a misery. + +- `docker images` will list your images in convenient table format; the `-q` flag returns only IDs. +- `docker inspect ` brings up all the configuration details about a specific image; you can, for example, find out its docker version and network ip. +- `docker rmi ` will remove an image; `docker rmi $(docker images -q)` will remove **all** your images. Of course, you get to keep the dockerfiles. +- `docker ps` ("print status") will list all running containers; `docker stop $(docker ps -a -q)` will stop them **all**. + +There are a gazillion more to choose and use, the [docker docs](https://docs.docker.com/reference/cli/docker) are your go-to source. + + +# Podman + +## purpose + +Whales don't really carry "containers", and "images" are better hung on a wall. +Don't fall for the docker marketing! + + +There are alternatives which mitigate some of the docker limitations and disadvantages. + +The most prominent one (the only one *I* looked at, sorry) might be `podman`. +A container is a "pod", they run on a "machine", and this tool helps you manage them. +The major advantage of podman is that it can be configured to run **"rootless"**, i.e. without administrator rights [^5]. + +[^5]: Daniel J. Walsh (2019): "How does rootless Podman work?" + + +Podman is [well documented](https://podman.io/docs/installation). +Another reliable source as so often is the [arch linux wiki on podman](https://wiki.archlinux.org/title/Podman), no matter which linux you are on. +On windows, people have succeeded in running podman through a WSL. + + +## setup + +I follow the `podman` installation instructions for arch linux, to set up a **rootless container environment**. + +Installation: + +```{sh} +pacman -Sy podman podman-compose podman-docker passt +``` + +The last one, `passt` (providing `pasta`, yum!), is required for rootless network access. + + +Normally, podman will run *only if you are root*. +This has to be changed, to get *rootless* ([see also](https://man.archlinux.org/man/podman.1#Rootless_mode)) +The first step is to confirm a required kernel module: check that `unpriviledged_users_clone` is set to one. + +```{sh} +sysctl kernel.unprivileged_userns_clone +``` + +Then, configure "subordinate user IDs". +There are detail differences in each linux distro; with some luck, your username is already present in these lists: + +```{sh} +cat /etc/subuid +cat /etc/subgid +``` + +If not, you can be admitted to the club of subordinates with the command: +```{sh} +usermod --add-subuids 100000-165535 --add-subgids 100000-165535 +podman system migrate +``` + + +We note some useful commands on the way: `podman system ...` and `podman info`. +You might immediately check "native rootless overlays" (has something to do with mounting filesystems in the container): + +```{sh} +podman info | grep -i overlay +``` + + +Then, networking: pods might need to communicate to each other and to the world. +And, of course, container storage: make sure you know where your containers are stored. +These and more settings are in `/etc/containers/containers.conf` and `/etc/containers/storage.conf`; make sure to scan and edit them to your liking. + + +## usage + +You can use images from `docker.io` with podman. +For example: + +```{sh} +podman search docker.io/alpine +podman pull docker.io/alpine # download a machine +podman run -it docker.io/alpine # will connect to the container +exit +``` + + +## podman rocker + +From here, **podman is a full drop-in replacement for docker**; just that you are not forced to grant host system root privileges to containers. + +And you can use any docker image; `rocker/rstudio` [is available](https://rocker-project.org/use/rootless-podman.html) (don't forget to specify the port). + +```{sh} +podman run --rm -p 8787:8787 -e PASSWORD=YOURNEWPASSWORD -v /data/git/coding-club:/root/coding-club docker.io/rocker/rstudio +``` + +With one exception: the user to login to `rstudio` is not `rstudio`, but `root`, and you have root rights on the container. +You had those before anyways, but now they are confined to within the pod. + + + +:::{.callout-note} +To summarize: + +- **Docker's Dockerfiles like the one above will build as with docker.** +- You can even stick to the `docker` commands thanks to the `podman-docker` package. +- There is podman desktop, if you like clicking. +- Podman is everything docker is, just better. + +::: + +Kudos to the podman devs! + + +Your head might twisting in a swirl of containers by now, and will leave it here. +Thank you for reading! # TODO - [✓] bugfix the last RStudio variant -- list useful docker commands -- PodMan is available. -- port to windows +- [✓] list useful docker commands +- [✓] Podman is available. +- [ ] port to windows: (1) docker +- [ ] port to windows: (2) podman +- [ ] insert screenshots From 8bf932d84dc82a5adb69fb06165e5611f1c84bca Mon Sep 17 00:00:00 2001 From: Falk Mielke Date: Wed, 29 Jan 2025 11:05:58 +0100 Subject: [PATCH 05/51] docker: rename folder --- .../{development_dockercompose => development_docker}/index.qmd | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename content/tutorials/{development_dockercompose => development_docker}/index.qmd (100%) diff --git a/content/tutorials/development_dockercompose/index.qmd b/content/tutorials/development_docker/index.qmd similarity index 100% rename from content/tutorials/development_dockercompose/index.qmd rename to content/tutorials/development_docker/index.qmd From db7d15a67bec03028da581ef71c6e4f75af64188 Mon Sep 17 00:00:00 2001 From: Falk Mielke Date: Wed, 29 Jan 2025 12:15:01 +0100 Subject: [PATCH 06/51] docker: the windows experience --- .../tutorials/development_docker/index.qmd | 108 ++++++++++++++---- 1 file changed, 87 insertions(+), 21 deletions(-) diff --git a/content/tutorials/development_docker/index.qmd b/content/tutorials/development_docker/index.qmd index 12e63b926..be59a8b39 100644 --- a/content/tutorials/development_docker/index.qmd +++ b/content/tutorials/development_docker/index.qmd @@ -11,38 +11,69 @@ knitr: --- -In this tutorial, I demonstrate how to set up and deploy a **custom docker container** with [**docker-compose**](https://docs.docker.com/compose). +In this tutorial, I demonstrate how to set up and deploy a **custom docker container** with [**docker**](https://docs.docker.com). This is intended to be a rather general test case, serving for later configuration of more specific container solutions. +For example, you will learn how to spin up an existing `rocker/rstudio` container, and even modify it with additional system components and libraries. I follow other tutorials available online, and try to capture their essence for an INBO-context. Hence, this is just an assembly of other tutorials, with references - no original ideas to be found below. -Originally, this covers the steps to be executed on an (arch) linux computer or within a WSL. -On Windows, installation is different, yet there should be a linux-like terminal in the `docker desktop` app which would allow you to run the same commands. - -I will later attempt to reproduce the steps on windows. +On Windows, installation, configuration, and management of containers runs via the `docker desktop` app. +This tutorial also covers the terminal-centered steps to be executed on a linux computer or within a WSL. +I also present **podman** as a full replacement for docker, and recommend to give it a try. __References:__ +- +- , +- - -- +- - # Installation -The installation procedure [is documented here](https://docs.docker.com/compose/install). +The installation procedure [is documented here](https://docs.docker.com/install). + +Docker comes with the *Docker Desktop* app. +That app by itself is trivial and hardly worth a tutorial. + +## windows +Navigate to [the download site for docker on windows](https://docs.docker.com/desktop/setup/install/windows-install). +Download the "App" (newspeak for: graphical user interface to a software tool). +Install it. + + +*Note for INBO users:* you should select Hyper-V, instead of WSL, against recommendation (WSL is discouraged/disabled by enterprise settings). +However, you probably do not have admin rights, which is good: **ask our friendly ICT helpdesk for support right away.** + + +:::{.container-note} +Side rant collection: + +- Installation of Docker Desktop does not allow you to specify an install path (might have missed it). +- `&'C:\Program Files\Docker\Docker\Docker Desktop.exe'` only runs with admin privileges. +- It is bloated to more than 2GB. +- The first thing it does is prompt you for a login. +- The second thing it does is annoy you with a survey. +- It is full of uninvited ads ("Docker Build Cloud", "To access the latest features, sign in."/don't!). -Docker compose comes with the *Docker Desktop* app. -That app is probably trivial and hardly worth a tutorial. -Alternatively, you can install it as a terminal tool. +If you have some dignity, learn the terminal commands below. +::: + + +## linux + +On linux, that same `docker-desktop` [is available for installation](https://docs.docker.com/desktop/setup/install/linux/). +*Or* you could install docker as a terminal tool. ```{sh} -sudo apt update && sudo apt install docker docker-compose docker-buildx # debian-based -# sudo pacman -Sy docker docker-compose docker-buildx # arch linux +sudo apt update && sudo apt install docker docker-buildx # debian-based +# sudo pacman -Sy docker docker-buildx # arch linux ``` @@ -73,6 +104,8 @@ systemctl stop docker.service ``` +## both, *post hoc* + You can check the docker installation by confirming the version at which the service is running. ```{sh} @@ -88,7 +121,8 @@ Docker is about working in containers, if you like that. You can think of this as living in a ["tiny home", or "mobile home"](https://parametric-architecture.com/tiny-house-movement). Let's call it a fancy caravan. -If you do not have the cash to build your own home, you can of course use someone elses'. +If you do not have the cash to build your own home, you can of course use someone else's. +There are a gazillion **docker images available for you** on [docker hub](https://hub.docker.com). ## example @@ -100,7 +134,12 @@ For example[^1], there are docker images with [rstudio server](https://posit.co/ [^1]: I mostly follow [this tutorial](https://jsta.github.io/r-docker-tutorial/02-Launching-Docker.html). -Execute the following script. +:::{.callout-note} +If you run the app, simply search, pull, and run it. +::: + + +Otherwise, execute the following script (*windows*: use an administrator terminal). If it does not find the resources locally, docker will download and extract the image from dockerhub[^2]. [^2]: Just like "github" is a server service to store git repositories, guess what: "docker hub" is a service to store docker containers. @@ -199,6 +238,8 @@ Feel free to systematically and scientifically repeat the tests on your own mach # Custom Containers: `build` +(This is more advanced stuff. Nevertheless, be brave and give it a try!) + ## rationale One advantage of a docker container is its mobility: you can "bring it with you" to other workstations, use cloud computing, mostly without having to worry about installation of the components. @@ -212,6 +253,14 @@ As a use case, imagine you would like to have an RStudio server which comes with I will return to this use case below. To explore the general workings of `docker build`, let's first turn to more web-directed tasks. +:::{.callout-note} +With Docker Desktop, you have the graphical interface for "builds". +This might fall under the extended functionality which requires a login. + +Even without a login, you *can* proceed via a terminal, as below. +Once you create a `Dockerfile` and build it, it will appear in the GUI. +::: + ## init: a `flask` @@ -294,8 +343,9 @@ Try it! docker run my-flask ``` -The terminal should give you an IP and port; because the flask runs in a container, `localhost:8000` will not work out-of-the-box. +The terminal should give you an IP and port; because the flask runs in a container, `localhost:8000` will **not work** out-of-the-box. Instead, in my case, it was `http://172.17.0.2:8000`. +(Sadly, although I could build and run this container on windows, I did not get through via the browser :shrug:.) :::{.callout-note} @@ -311,6 +361,7 @@ The above works fine for most cases. However, if you want to assemble multiple images, or build on base images from multiple sources, you need a level up. In that case `docker compose` is [the way to go](https://docs.docker.com/compose/gettingstarted). +I did not have the need to try this out, yet, but will return here if that changes. @@ -388,10 +439,11 @@ We have briefly seen `docker --version`, `docker build`, `docker run`, and there There are other docker commands which might help you out of a misery. +- `docker run -it --entrypoint /bin/bash ` brings you to the shell of a container; you can update, upgrade, or just mess around. - `docker images` will list your images in convenient table format; the `-q` flag returns only IDs. - `docker inspect ` brings up all the configuration details about a specific image; you can, for example, find out its docker version and network ip. -- `docker rmi ` will remove an image; `docker rmi $(docker images -q)` will remove **all** your images. Of course, you get to keep the dockerfiles. - `docker ps` ("print status") will list all running containers; `docker stop $(docker ps -a -q)` will stop them **all**. +- `docker rmi ` will remove an image; `docker rmi $(docker images -q)` will remove **all** your images. Of course, you get to keep the dockerfiles. There are a gazillion more to choose and use, the [docker docs](https://docs.docker.com/reference/cli/docker) are your go-to source. @@ -415,7 +467,19 @@ The major advantage of podman is that it can be configured to run **"rootless"** Podman is [well documented](https://podman.io/docs/installation). Another reliable source as so often is the [arch linux wiki on podman](https://wiki.archlinux.org/title/Podman), no matter which linux you are on. -On windows, people have succeeded in running podman through a WSL. +On windows, people have succeeded in running Podman through a WSL. + +:::{.callout-note} +For windows, there is a convenient "Podman Desktop" GUI which guides you through the installation and setup. +It is intuitive, transparent (telemetry), backed by RedHat. + +Unfortunately, it relies on Windows Subsystem for Linux (WSL), which is not available at the moment. + +:`( + +::: + +The instructions below apply for linux. ## setup @@ -425,13 +489,14 @@ I follow the `podman` installation instructions for arch linux, to set up a **ro Installation: ```{sh} -pacman -Sy podman podman-compose podman-docker passt +pacman -Sy podman podman-docker passt ``` The last one, `passt` (providing `pasta`, yum!), is required for rootless network access. +Optionally, there is `podman-compose`. -Normally, podman will run *only if you are root*. +Out of the box, Podman will run *only if you are root*. This has to be changed, to get *rootless* ([see also](https://man.archlinux.org/man/podman.1#Rootless_mode)) The first step is to confirm a required kernel module: check that `unpriviledged_users_clone` is set to one. @@ -517,6 +582,7 @@ Thank you for reading! - [✓] bugfix the last RStudio variant - [✓] list useful docker commands - [✓] Podman is available. -- [ ] port to windows: (1) docker -- [ ] port to windows: (2) podman +- [✓] change intro ~~compose~~ +- [✓] port to windows: (1) docker +- [X] port to windows: (2) podman - [ ] insert screenshots From 346f6def748017e287ff7683f714073cdd0233a8 Mon Sep 17 00:00:00 2001 From: Falk Mielke Date: Wed, 29 Jan 2025 12:37:37 +0100 Subject: [PATCH 07/51] docker: screenshots and wrapup V1 --- .../development_docker/docker_build.jpg | Bin 0 -> 136482 bytes .../development_docker/docker_desktop1.jpg | Bin 0 -> 144566 bytes .../development_docker/docker_desktop2.jpg | Bin 0 -> 132561 bytes .../development_docker/docker_run.jpg | Bin 0 -> 87004 bytes .../development_docker/docker_winbuild.jpg | Bin 0 -> 295177 bytes .../tutorials/development_docker/index.qmd | 51 ++++++++++++++---- 6 files changed, 41 insertions(+), 10 deletions(-) create mode 100644 content/tutorials/development_docker/docker_build.jpg create mode 100644 content/tutorials/development_docker/docker_desktop1.jpg create mode 100644 content/tutorials/development_docker/docker_desktop2.jpg create mode 100644 content/tutorials/development_docker/docker_run.jpg create mode 100644 content/tutorials/development_docker/docker_winbuild.jpg diff --git a/content/tutorials/development_docker/docker_build.jpg b/content/tutorials/development_docker/docker_build.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d9c826a5db19ab4aa7533bbd058c7491371083e8 GIT binary patch literal 136482 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 z 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

ag+`erE%Iml9ebsNvQO| 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


E@}tbEu>jbX zL}K$vMJ5H*Cj90Q(Gk8)xe-SJ&-*wiOKhxqPqAKdqzieIyMqyMyuN;uW7(nm z2k-~j!%aEf{(1c8Nz-Zb&IZ$icbdls!-0e--mu=jfD>G7_5HcYI?CI3=N-4b zezbljJNp$j@0|Yt-~G-&=xOQxu3b*1p1gcw8AHR@AM}1O*Baga{#-QE zO6w{s8-ZIM4c@sfUKXK5z4exYvKXhMH;S{qOUg2S*;Y zKZP@udu{sFo8$ig%y!pq0CBC~_na%+{{U0?)+Lv7XRY7lGP~a*KF51Hn1vd`7TwO25yOA6RbZZZp%kLovX|xWo zC!}86^h|Cj?@6HQeeis-T4#zc{;cwaddF zPm+V0T5!4CyP;xQv589{PX;AsIfWjZ!9uW}sp|V|eIKH)R2_E%U`|-86uBUSplI|D zc|OR4Ln*1f%TrMjG^hX~r)EN-9v?BI=4$~~AR36$2Al)Vb`Q&$uC8AIpU^X@* z*74&5^0b7vfN1ITIK7K60}UDmDo}0O58a(-yGBgVSg26?V%yF~fDvtol^c$6iS7Z5 zc8JAZS&Qb7`pgEzT4Aq1KwtAgTXVA|r@NB7#*ko!tV7W{VJt;P-@rJ%QON<+ z7Og8PegzP6&m;!$$q$NEh&DzGx&xx^IJ`IkSr;wN&udHk(b+ojgE-az5YW~h$o{pP z$`OlZ$h@08ze?-T9*-GaZ;n5|eE$H?*BF8nsm1xf&(YlV^fkx7*&oq{tkv7^4So~z z&Q!ki=Wo5f{*F3OoghO^^4=mBu`aNIYL?2(nhuVzLq)!D+L~?GpX-N)zCXU-≪V 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�vV26l+hcv1_1NiA9k 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 literal 0 HcmV?d00001 diff --git a/content/tutorials/development_docker/docker_desktop1.jpg b/content/tutorials/development_docker/docker_desktop1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..eddaae0346d27d1c32b033dce017b41ccd6e5f36 GIT binary patch literal 144566 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 = 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 literal 0 HcmV?d00001 diff --git a/content/tutorials/development_docker/docker_desktop2.jpg b/content/tutorials/development_docker/docker_desktop2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..aa786399b476497f1381d18865916a312b644a76 GIT binary patch literal 132561 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 literal 0 HcmV?d00001 diff --git a/content/tutorials/development_docker/docker_run.jpg b/content/tutorials/development_docker/docker_run.jpg new file mode 100644 index 0000000000000000000000000000000000000000..683c50e69f620a5f62dc71ee6428f52a8f43ecc2 GIT binary patch literal 87004 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%0Dcqf5Uo4Le9 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 ABme*a literal 0 HcmV?d00001 diff --git a/content/tutorials/development_docker/docker_winbuild.jpg b/content/tutorials/development_docker/docker_winbuild.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d4c55067d77f10e821641d8ea74e9b322963d4f0 GIT binary patch literal 295177 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∈9J$!-Es&U@P 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 z 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 Y*xi=mj0vMdMVm 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 z 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 E0(jxumjD0& literal 0 HcmV?d00001 diff --git a/content/tutorials/development_docker/index.qmd b/content/tutorials/development_docker/index.qmd index be59a8b39..c49506ff8 100644 --- a/content/tutorials/development_docker/index.qmd +++ b/content/tutorials/development_docker/index.qmd @@ -51,6 +51,9 @@ Install it. However, you probably do not have admin rights, which is good: **ask our friendly ICT helpdesk for support right away.** +![desktop app](docker_desktop1.jpg) + + :::{.container-note} Side rant collection: @@ -72,6 +75,7 @@ On linux, that same `docker-desktop` [is available for installation](https://doc ```{sh} +#| eval: false sudo apt update && sudo apt install docker docker-buildx # debian-based # sudo pacman -Sy docker docker-buildx # arch linux ``` @@ -81,6 +85,7 @@ For users to be able to use docker, they must be in the "docker" group. (Insert your username at ``.) ```{sh} +#| eval: false sudo usermod -a -G docker ``` @@ -95,6 +100,7 @@ However, due to [diverse](https://docs.docker.com/engine/security) [security](ht On a `systemd` system, you can start and stop docker on demand via the following commands (those will ask you for `sudo` authentification if necessary). ```{sh} +#| eval: false systemctl start docker systemctl status docker # check status @@ -109,6 +115,7 @@ systemctl stop docker.service You can check the docker installation by confirming the version at which the service is running. ```{sh} +#| eval: false docker --version ``` @@ -138,6 +145,8 @@ For example[^1], there are docker images with [rstudio server](https://posit.co/ If you run the app, simply search, pull, and run it. ::: +![desktop app: run](docker_desktop2.jpg) + Otherwise, execute the following script (*windows*: use an administrator terminal). If it does not find the resources locally, docker will download and extract the image from dockerhub[^2]. @@ -145,13 +154,17 @@ If it does not find the resources locally, docker will download and extract the [^2]: Just like "github" is a server service to store git repositories, guess what: "docker hub" is a service to store docker containers. ```{sh} +#| eval: false docker run --rm -p 8787:8787 -e PASSWORD=YOURNEWPASSWORD rocker/rstudio ``` + - The `--rm` flag makes the docker image non-permanent, i.e. disk space will be freed after you close the container. - The port specified at `-p` is the one you use to access this local container server. You have to specify it explicitly, otherwise the host system will not let your pass (`:gandalf-meme:`). - The `-e` flag allows you to specify a password, but if you do not specify one, the container will provide a random password upon startup (read the terminal output). +![run](docker_run.jpg) + You are now running (`run`) a `rocker/rstudio` server instance on your `localhost`, i.e. your computer. You can access it via a browser, going to , with the username `rstudio` and your chosen password. @@ -175,6 +188,7 @@ Suppose you have an R project you would like to work on, stored, for example, in Then you can link this to your containers' home folder via the following command. ```{sh} +#| eval: false docker run --rm -p 8787:8787 -v /data/git/coding-club:/home/rstudio/coding-club rocker/rstudio ``` @@ -261,6 +275,8 @@ Even without a login, you *can* proceed via a terminal, as below. Once you create a `Dockerfile` and build it, it will appear in the GUI. ::: +![build on windows](docker_winbuild.jpg) + ## init: a `flask` @@ -327,12 +343,16 @@ def hello(): With the `Dockerfile` and `hello.py` in place, you can build the container [^4]. ```{sh} +#| eval: false sudo docker build -t my-flask . ``` [^4]: If you did not install the `docker-buildx` package, you will get a legacy warning. +![build](docker_build.jpg) + + List your available containers ("images") via the `docker images` command! You should now see a `python` image, which is the base alpine image we built upon. @@ -340,6 +360,7 @@ There is also a `my-flask`. Try it! ```{sh} +#| eval: false docker run my-flask ``` @@ -415,6 +436,7 @@ Remember which system powers your container (Debian/Ubuntu), find help online, a Test the image: ```{sh} +#| eval: false docker build -t test-rstudio . ``` @@ -422,6 +444,7 @@ docker build -t test-rstudio . Run it: ```{sh} +#| eval: false docker run --rm -p 8787:8787 -e PASSWORD=YOURNEWPASSWORD test-rstudio ``` @@ -489,6 +512,7 @@ I follow the `podman` installation instructions for arch linux, to set up a **ro Installation: ```{sh} +#| eval: false pacman -Sy podman podman-docker passt ``` @@ -501,6 +525,7 @@ This has to be changed, to get *rootless* ([see also](https://man.archlinux.org/ The first step is to confirm a required kernel module: check that `unpriviledged_users_clone` is set to one. ```{sh} +#| eval: false sysctl kernel.unprivileged_userns_clone ``` @@ -508,12 +533,14 @@ Then, configure "subordinate user IDs". There are detail differences in each linux distro; with some luck, your username is already present in these lists: ```{sh} +#| eval: false cat /etc/subuid cat /etc/subgid ``` If not, you can be admitted to the club of subordinates with the command: ```{sh} +#| eval: false usermod --add-subuids 100000-165535 --add-subgids 100000-165535 podman system migrate ``` @@ -523,6 +550,7 @@ We note some useful commands on the way: `podman system ...` and `podman info`. You might immediately check "native rootless overlays" (has something to do with mounting filesystems in the container): ```{sh} +#| eval: false podman info | grep -i overlay ``` @@ -538,6 +566,7 @@ You can use images from `docker.io` with podman. For example: ```{sh} +#| eval: false podman search docker.io/alpine podman pull docker.io/alpine # download a machine podman run -it docker.io/alpine # will connect to the container @@ -552,6 +581,7 @@ From here, **podman is a full drop-in replacement for docker**; just that you ar And you can use any docker image; `rocker/rstudio` [is available](https://rocker-project.org/use/rootless-podman.html) (don't forget to specify the port). ```{sh} +#| eval: false podman run --rm -p 8787:8787 -e PASSWORD=YOURNEWPASSWORD -v /data/git/coding-club:/root/coding-club docker.io/rocker/rstudio ``` @@ -573,16 +603,17 @@ To summarize: Kudos to the podman devs! -Your head might twisting in a swirl of containers by now, and will leave it here. -Thank you for reading! +# Summary + +In this tutorial, I demonstrated the basics of containerization with docker and podman. +There are convenient GUI apps, and sophisticated terminal commands, both of which are worth getting familiar to. -# TODO +Containerization is useful, with the advantages of modularity, configurability, transparency (open science: share your rocker file), shared use ... +There are some manageable pitfalls with respect to admin rights and resource limitation. + + +Your head might twisting in a swirl of containers by now. +I hope you find this overview instructive. +Thank you for reading! -- [✓] bugfix the last RStudio variant -- [✓] list useful docker commands -- [✓] Podman is available. -- [✓] change intro ~~compose~~ -- [✓] port to windows: (1) docker -- [X] port to windows: (2) podman -- [ ] insert screenshots From e349246b1b86b1feb3c722a6660bd669bc50795f Mon Sep 17 00:00:00 2001 From: Falk Mielke Date: Wed, 29 Jan 2025 15:46:49 +0100 Subject: [PATCH 08/51] docker: minor adjustments and additions --- .../tutorials/development_docker/index.qmd | 145 +++++++++++------- 1 file changed, 86 insertions(+), 59 deletions(-) diff --git a/content/tutorials/development_docker/index.qmd b/content/tutorials/development_docker/index.qmd index c49506ff8..7f1ba2919 100644 --- a/content/tutorials/development_docker/index.qmd +++ b/content/tutorials/development_docker/index.qmd @@ -15,15 +15,18 @@ In this tutorial, I demonstrate how to set up and deploy a **custom docker conta This is intended to be a rather general test case, serving for later configuration of more specific container solutions. For example, you will learn how to spin up an existing `rocker/rstudio` container, and even modify it with additional system components and libraries. I follow other tutorials available online, and try to capture their essence for an INBO-context. -Hence, this is just an assembly of other tutorials, with references - no original ideas to be found below. +Hence, this is just an assembly of other tutorials, with references - no original ideas to be found below, but nevertheless some guidance. On Windows, installation, configuration, and management of containers runs via the `docker desktop` app. -This tutorial also covers the terminal-centered steps to be executed on a linux computer or within a WSL. +However, this tutorial also covers (and in fact focuses on) the terminal-centered steps to be executed on a linux computer or within a WSL. I also present **podman** as a full replacement for docker, and recommend to give it a try. +Generally, it is recommended to contact and involve your ICT department for support with the setup. + + __References:__ - @@ -41,14 +44,17 @@ The installation procedure [is documented here](https://docs.docker.com/install) Docker comes with the *Docker Desktop* app. That app by itself is trivial and hardly worth a tutorial. + ## windows + Navigate to [the download site for docker on windows](https://docs.docker.com/desktop/setup/install/windows-install). Download the "App" (newspeak for: graphical user interface to a software tool). Install it. -*Note for INBO users:* you should select Hyper-V, instead of WSL, against recommendation (WSL is discouraged/disabled by enterprise settings). -However, you probably do not have admin rights, which is good: **ask our friendly ICT helpdesk for support right away.** +*Note for INBO users:* you should select Hyper-V, instead of WSL, against recommendation (WSL is discouraged/disabled by enterprise settings, see below). +However, you probably do not have admin rights, which is good. +To re-iterate: **ask our friendly ICT helpdesk for support right away.** ![desktop app](docker_desktop1.jpg) @@ -59,18 +65,19 @@ Side rant collection: - Installation of Docker Desktop does not allow you to specify an install path (might have missed it). - `&'C:\Program Files\Docker\Docker\Docker Desktop.exe'` only runs with admin privileges. -- It is bloated to more than 2GB. -- The first thing it does is prompt you for a login. -- The second thing it does is annoy you with a survey. +- It is bloated to more than 2GB (compared to the installed size of `docker` and `docker-buildx` on linux <200MB). +- The first thing it does is prompt you for an unnecessary login (smells like telemetry). +- The second thing it does is annoy you with a survey (explicit telemetry). - It is full of uninvited ads ("Docker Build Cloud", "To access the latest features, sign in."/don't!). -If you have some dignity, learn the terminal commands below. +If you want some dignity, learn and use the terminal commands below. +I label them "linux", but they are OS-agnostic. ::: ## linux -On linux, that same `docker-desktop` [is available for installation](https://docs.docker.com/desktop/setup/install/linux/). +On linux, that same `docker-desktop` [is available for installation](https://docs.docker.com/desktop/setup/install/linux). *Or* you could install docker as a terminal tool. @@ -89,12 +96,13 @@ For users to be able to use docker, they must be in the "docker" group. sudo usermod -a -G docker ``` -For this change to take effect, log off en in again and restart of the docker service (see below). +For this change to take effect, log off and log in again and restart the docker service if it was running. -Containers are managed by a system task ("service") which needs to be started. +Containers are managed by a system task ("service" and "socket") which need to be started. +Most likely, your linux uses `systemd`. Your system can start and stop that service automatically, by using `systemctl enable <...>`. -However, due to [diverse](https://docs.docker.com/engine/security) [security](https://github.com/moby/moby/issues/9976) [pitfalls](https://snyk.io/blog/top-ten-most-popular-docker-images-each-contain-at-least-30-vulnerabilities), it is good practice to not keep it activated permanently on your system. +However, due to [diverse](https://docs.docker.com/engine/security) [security](https://github.com/moby/moby/issues/9976) [pitfalls](https://snyk.io/blog/top-ten-most-popular-docker-images-each-contain-at-least-30-vulnerabilities), it is good practice to **not keep it enabled** permanently on your system. On a `systemd` system, you can start and stop docker on demand via the following commands (those will ask you for `sudo` authentification if necessary). @@ -119,16 +127,21 @@ You can check the docker installation by confirming the version at which the ser docker --version ``` +Congratulations: now the fun starts! + # Existing Containers: `run` ## rationale -Docker is about working in containers, if you like that. -You can think of this as living in a ["tiny home", or "mobile home"](https://parametric-architecture.com/tiny-house-movement). +Docker is about assembling and working in containers. +"Living" in containers. +Or, rather, you can think of this as living in a ["tiny home", or "mobile home"](https://parametric-architecture.com/tiny-house-movement). Let's call it a fancy caravan. +The good thing is that you get to pick a general design and to choose all details of the interior. + -If you do not have the cash to build your own home, you can of course use someone else's. +The best thing: if you feel like you do not have the cash, time, or talent to build your own home, you can *of course* use someone else's. There are a gazillion **docker images available for you** on [docker hub](https://hub.docker.com). @@ -142,7 +155,7 @@ For example[^1], there are docker images with [rstudio server](https://posit.co/ :::{.callout-note} -If you run the app, simply search, pull, and run it. +If you control containers via the desktop app, simply search, pull, and run it. ::: ![desktop app: run](docker_desktop2.jpg) @@ -151,7 +164,7 @@ If you run the app, simply search, pull, and run it. Otherwise, execute the following script (*windows*: use an administrator terminal). If it does not find the resources locally, docker will download and extract the image from dockerhub[^2]. -[^2]: Just like "github" is a server service to store git repositories, guess what: "docker hub" is a service to store docker containers. +[^2]: Just like "github" is a server service to store git repositories, guess what: "docker hub" is a hosting service to store docker containers. ```{sh} #| eval: false @@ -160,8 +173,8 @@ docker run --rm -p 8787:8787 -e PASSWORD=YOURNEWPASSWORD rocker/rstudio - The `--rm` flag makes the docker image non-permanent, i.e. disk space will be freed after you close the container. -- The port specified at `-p` is the one you use to access this local container server. You have to specify it explicitly, otherwise the host system will not let your pass (`:gandalf-meme:`). -- The `-e` flag allows you to specify a password, but if you do not specify one, the container will provide a random password upon startup (read the terminal output). +- The port specified at `-p` is the one you use to access this local container server. You have to specify it explicitly, otherwise the host system will not let you pass (`:gandalf-meme:`). +- The `-e` flag allows you to specify a password, but if you do not specify one, this container will provide a random password upon startup (read the terminal output). ![run](docker_run.jpg) @@ -177,10 +190,10 @@ You can shut down the container with the keyboard shortcut `[ctrl]+[C]` (probabl The downside of this is that your container is isolated (well... at least to a certain degree). -To store files locally, without storing the bloated container, you will have to map a virtual path on the container to a local drive on your computer. +To store files locally, i.e. on the host machine, without storing the bloated container, you will have to map a virtual path on the container to a local drive on your computer. (Linux people will be familiar with the concept of "mounting" and "linking" storage locations.) -Docker run brings the `-v` flag for this. +Docker `run` brings the `-v` flag for this. Suppose you have an R project you would like to work on, stored, for example, in this path: - `/data/git/coding-club` @@ -203,8 +216,8 @@ However, there are limitations: ::: {.callout-warning} - You have to live with the R packages provided in the container, or otherwise install them each time you access it... -- ... unless you make you container permanent by omitting the `--rm` option. Note that this will cost considerable disk space, will not transfer to other computers (the original purpose of docker), and demands occasional updates (next point). -- It is good practice to keep software up to date. Occasionally re-install your docker image and R packages to get the latest versions. +- ... unless you make you container permanent by omitting the `--rm` option. Note that this will cost considerable disk space, will not transfer to other computers (the original purpose of docker), and demand occasional updates. +- Speaking of updates: it is good practice to keep software up to date. Occasionally re-install your docker image and R packages to get the latest versions. - You should make sure that the containers are configured correctly and securely. This is especially important with server components which expose your machine to the internet. - There is a performance penalty from using containers: in inaccurate laymans' terms, they emulate (parts of a) "computer" inside your computer. @@ -229,49 +242,52 @@ benchmark(test()) In the terminal: -``` +```{} test replications elapsed relative user.self sys.self user.child sys.child 1 test() 100 22.391 1 83.961 65.291 0 0 ``` In the container: -``` +```{} test replications elapsed relative user.self sys.self user.child sys.child 1 test() 100 26.076 1 102.494 153.89 0 0 ``` -Now, the *good news* is that the difference is not by orders of magnitude, which indicates that docker seems to integrate the `blas` variant I installed on my computer (`blas-openblas`). -The *bad news* is that these are a little less than `-20%` performance, which is considerable. +Now, the *good news* is that the difference is not by orders of magnitude, which indicates that the chosen rocker image integrated the same good `blas` variant I installed on my computer (`blas-openblas`). + +The *bad news* is that we still still a hit of `-20%` performance, which is considerable. -This is just a single snapshot on a laptop. +This is just a single snapshot on a laptop, and putatively `blas`-confounded. Feel free to systematically and scientifically repeat the tests on your own machine. # Custom Containers: `build` -(This is more advanced stuff. Nevertheless, be brave and give it a try!) +(Here follows somewhat advanced stuff. Nevertheless, be brave and give it a read!) + ## rationale -One advantage of a docker container is its mobility: you can "bring it with you" to other workstations, use cloud computing, mostly without having to worry about installation of the components. +One advantage of a docker container is its mobility: you can "bring it with you" to other workstations, host it for others, use cloud computing, mostly without having to worry about installation of the components. This especially pays off in complicated server setups and distributed computing. The container is standardized; you could share it with colleagues to make sure versions are compatible. However, as mentioned above, you will require personalization. -As a use case, imagine you would like to have an RStudio server which comes with relevant inbo packages pre-installed (e.g. [`inbodb`](https://inbo.github.io/inbodb), [`watina`](https://inbo.github.io/watina)). +As a use case, imagine you would like to have an RStudio server which comes with relevant inbo packages pre-installed (e.g. [`inbodb`](https://inbo.github.io/inbodb), [`watina`](https://inbo.github.io/watina); *cf.* [contaINBO](https://github.com/inbo/contaINBO)). I will return to this use case below. -To explore the general workings of `docker build`, let's first turn to more web-directed tasks. +To explore the general workings of `docker build`, let's turn to more web-directed tasks for a change. + :::{.callout-note} With Docker Desktop, you have the graphical interface for "builds". This might fall under the extended functionality which requires a login. -Even without a login, you *can* proceed via a terminal, as below. +Yet even without a login, you *can* proceed via a terminal, as below. Once you create a `Dockerfile` and build it, it will appear in the GUI. ::: @@ -284,7 +300,7 @@ Once you create a `Dockerfile` and build it, it will appear in the GUI. For example, you can use flask to gather information a user provides in an html form, then process and store it wherever you like. -I will follow the following examples and tutorials to spin up a flask container, but provide modifications and comments on the steps. +I started from the following examples and tutorials to spin up a flask container, but provide modifications and comments on the steps. - - @@ -293,15 +309,18 @@ I will follow the following examples and tutorials to spin up a flask container, > **It all starts with a [dockerfile](https://www.geeksforgeeks.org/what-is-dockerfile).**[^3] -[^3]: +[^3]: Here I quoted the docs () before having read them. -As you will see, the docker file will give you all the design choices to create your own container. -I think of the docker file as a script which provides all the instructions to set up your container, starting with `FROM` (i.e. which prior container you build upon) to `RUN`ning commands. +As you will see, the docker file will give you all the design choices to create your own containers. +I think of the docker file as a script which provides all the instructions to set up your container, starting with `FROM` (i.e. which prior container you build upon) to `RUN`ning any type of commands. +Not *any* type, really: we are working on (mysterious, powerful) linux. +To our `python/flask` example. A list of the official python containers is [available here](https://hub.docker.com/_/python). Note that you build every container upon the skeleton of an operating system: I chose [alpine linux](https://en.wikipedia.org/wiki/Alpine_Linux). +It's *en vogue*. The dockerfile resides in your working folder (yet it also defines a [`WORKDIR`](https://stackoverflow.com/a/51066379) from within which later commands are executed). @@ -328,7 +347,7 @@ CMD ["flask", "run", "--host", "0.0.0.0", "--port", "8000"] ``` -Note that the following `hello.py` file needs to be present in your working directory: +Note that the following `hello.py` file needs to be present in your working directory (you will be reminded by a friendly error message): ```{python} from flask import Flask @@ -353,7 +372,7 @@ sudo docker build -t my-flask . ![build](docker_build.jpg) -List your available containers ("images") via the `docker images` command! +List your available container images via the `docker images` command. You should now see a `python` image, which is the base alpine image we built upon. There is also a `my-flask`. @@ -385,7 +404,6 @@ In that case `docker compose` is [the way to go](https://docs.docker.com/compose I did not have the need to try this out, yet, but will return here if that changes. - # Use Case: RStudio with Packages ## rationale @@ -393,6 +411,11 @@ I did not have the need to try this out, yet, but will return here if that chang We should be able to apply the above to modify the `rocker/rstudio` server image for our purpose. +Build recipes for some of the INBO packages you might want to include are collected in this repository: + +- + + ## dockerfile This use case is, in fact, well documented: @@ -401,6 +424,9 @@ This use case is, in fact, well documented: - - +In fact, the Rocker crew rocks! +They prepared quite [a lot of useful images](https://hub.docker.com/u/rocker), including for example the `tidyverse` or geospatial packages. + Note the syntax in `FROM`: it is `rocker/:`. @@ -428,8 +454,9 @@ RUN R -q -e 'install.packages("remotes")' RUN R -q -e 'remotes::install_github("inbo/INBOmd", dependencies = TRUE)' ``` -It takes some puzzle work to get the dependencies right, e.g. with the `libgit2` dependency above (try commenting out that line). +It takes some puzzle work to get the dependencies right, e.g. with the `libgit2` dependency (try commenting out that line to get a feeling for build failure). However, there is hope: (i) the error output is quite instructive (at least for linux persons), (ii) building is incremental, so you can add successively. +It just takes patience. Remember which system powers your container (Debian/Ubuntu), find help online, and document your progress. @@ -441,7 +468,7 @@ docker build -t test-rstudio . ``` -Run it: +Run it, as before: ```{sh} #| eval: false @@ -449,11 +476,9 @@ docker run --rm -p 8787:8787 -e PASSWORD=YOURNEWPASSWORD test-rstudio ``` -It is useful to put modifications in scripts copied and executed upon installation: -https://stackoverflow.com/q/69167940 -e.g. https://rocker-project.org/use/extending.html#install2.r - -This makes them available for version control. +It is good practice to extract modifications in scripts and modularly bring them in to be executed upon installation ([see here](https://stackoverflow.com/q/69167940), [and here](https://rocker-project.org/use/extending.html#install2.r)). +This makes them available for a more refined version control. +As you know, [version control is key!](https://tutorials.inbo.be/tags/git) # useful commands @@ -475,14 +500,14 @@ There are a gazillion more to choose and use, the [docker docs](https://docs.doc ## purpose -Whales don't really carry "containers", and "images" are better hung on a wall. +Whales don't really carry "containers", and "images" are better hung on walls. Don't fall for the docker marketing! There are alternatives which mitigate some of the docker limitations and disadvantages. -The most prominent one (the only one *I* looked at, sorry) might be `podman`. -A container is a "pod", they run on a "machine", and this tool helps you manage them. +The most prominent one (or rather the only one *I* looked at, sorry) might be `podman`. +A container is a "pod", they run on a "machine", and this FOSS tool helps you manage them. The major advantage of podman is that it can be configured to run **"rootless"**, i.e. without administrator rights [^5]. [^5]: Daniel J. Walsh (2019): "How does rootless Podman work?" @@ -493,22 +518,22 @@ Another reliable source as so often is the [arch linux wiki on podman](https://w On windows, people have succeeded in running Podman through a WSL. :::{.callout-note} -For windows, there is a convenient "Podman Desktop" GUI which guides you through the installation and setup. -It is intuitive, transparent (telemetry), backed by RedHat. +For windows, there is a convenient "Podman Desktop" GUI which guides you through the installation and setup, including WSL instantiation. +It is intuitive, transparent (telemetry opt-out), backed by RedHat. -Unfortunately, it relies on Windows Subsystem for Linux (WSL), which is not available at the moment. - -:`( +Unfortunately, it relies on Windows Subsystem for Linux (WSL), which is not available for INBO users at the moment. +:( ::: -The instructions below apply for linux. - ## setup +The instructions below were tested on arch linux, but generalize easily. + I follow the `podman` installation instructions for arch linux, to set up a **rootless container environment**. + Installation: ```{sh} @@ -521,7 +546,7 @@ Optionally, there is `podman-compose`. Out of the box, Podman will run *only if you are root*. -This has to be changed, to get *rootless* ([see also](https://man.archlinux.org/man/podman.1#Rootless_mode)) +This has to be changed to go *rootless* ([see also](https://man.archlinux.org/man/podman.1#Rootless_mode)) The first step is to confirm a required kernel module: check that `unpriviledged_users_clone` is set to one. ```{sh} @@ -608,8 +633,10 @@ Kudos to the podman devs! In this tutorial, I demonstrated the basics of containerization with docker and podman. There are convenient GUI apps, and sophisticated terminal commands, both of which are worth getting familiar to. +Personally, I find the concept of containerization fascinating, and was surprised how simple and useful of a trick it is. + -Containerization is useful, with the advantages of modularity, configurability, transparency (open science: share your rocker file), shared use ... +Containerization offers the advantages of modularity, configurability, transparency (open science: share your rocker file), shared use ... There are some manageable pitfalls with respect to admin rights and resource limitation. From 2297c10cabd25e963c4f2f26072af7e1aa090102 Mon Sep 17 00:00:00 2001 From: Falk Mielke Date: Thu, 30 Jan 2025 09:48:30 +0100 Subject: [PATCH 09/51] docker: installing private packages --- .../tutorials/development_docker/index.qmd | 40 ++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/content/tutorials/development_docker/index.qmd b/content/tutorials/development_docker/index.qmd index 7f1ba2919..599342f9e 100644 --- a/content/tutorials/development_docker/index.qmd +++ b/content/tutorials/development_docker/index.qmd @@ -476,10 +476,48 @@ docker run --rm -p 8787:8787 -e PASSWORD=YOURNEWPASSWORD test-rstudio ``` -It is good practice to extract modifications in scripts and modularly bring them in to be executed upon installation ([see here](https://stackoverflow.com/q/69167940), [and here](https://rocker-project.org/use/extending.html#install2.r)). +It is good practice to extract modifications in scripts and modularly bring them in to be executed upon installation ([see here](https://stackoverflow.com/q/69167940), [and here](https://rocker-project.org/use/extending.html#install2.r)), via `COPY`. This makes them available for a more refined version control. As you know, [version control is key!](https://tutorials.inbo.be/tags/git) +But, on that line, how about private repositories? +More generally, how would we get (personal) data from our host machine to the container? + + +## data exchange + +Arguably, among the rather tricky tasks when working with containers is file exchange. +There are [several options available](https://forums.docker.com/t/best-practices-for-getting-code-into-a-container-git-clone-vs-copy-vs-data-container/4077): + +- `COPY` in the Dockerfile (or `ADD` [in appropriate cases](https://www.docker.com/blog/docker-best-practices-understanding-the-differences-between-add-and-copy-instructions-in-dockerfiles)) +- ["bind mounts"](https://docs.docker.com/engine/storage/bind-mounts) +- [volumes](https://docs.docker.com/engine/storage/volumes) +- possibly R ways of + + +For the use case of [installing R packages from a private git repo](https://www.geeksforgeeks.org/how-to-clone-private-git-repo-with-dockerfile), however, there are several constraints: + +- It best happens at build time, to enable all the good stuff: `--rm`, sharing, ... +- Better keep your credentials (e.g. ssh keys, access tokens) off the container, both system side and [on the R side](https://usethis.r-lib.org/articles/git-credentials.html). +- On the other hand, updates can often happen by re-building. + + +In this (and only this) situation, the simple solution is to copy a clone of the repository to the container, and then install it. +The clone should be within the Dockerfile folder. + +```{dsl} +# copy the repo +COPY my_private_repo /opt/my_private_repo + +# manually install dependencies +RUN R -q -e 'install.packages("remotes", dependencies = TRUE)' + +# install package from folder +RUN R -q -e 'install.packages("/opt/my_private_repo", repos = NULL, type = "source", dependencies = TRUE)' +``` + +This [seems to be good practice](https://stackoverflow.com/questions/23391839/clone-private-git-repo-with-dockerfile/55761914#55761914), for being simple, secure, and well feasible. + # useful commands From bcacce9698431e41048646a0e492e0ce5929ed06 Mon Sep 17 00:00:00 2001 From: Falk Mielke Date: Tue, 4 Feb 2025 15:03:06 +0100 Subject: [PATCH 10/51] docker: minor adjustments --- .../tutorials/development_docker/index.qmd | 131 ++++++++++++------ 1 file changed, 90 insertions(+), 41 deletions(-) diff --git a/content/tutorials/development_docker/index.qmd b/content/tutorials/development_docker/index.qmd index 599342f9e..ad98efe96 100644 --- a/content/tutorials/development_docker/index.qmd +++ b/content/tutorials/development_docker/index.qmd @@ -11,7 +11,15 @@ knitr: --- -In this tutorial, I demonstrate how to set up and deploy a **custom docker container** with [**docker**](https://docs.docker.com). +You might have heard about "containerization" with [**Docker**](https://docs.docker.com). +Docker has been labeled "the *Holy Grail* of reproducibility" in [The Open Science Manual by Claudio Zandonella Callegher and Davide Massidda (2023)](https://arca-dpss.github.io/manual-open-science/docker-chapter.html). +Although containerization is an immensely useful Open Science tool worth striving for, the *Holy Grail* is an inaccurate metaphor, because +(i) Docker is easy to find and accessible; +(ii) Docker alone does not make a reproducible workflow; +(iii) Docker has issues, some of them mitigated by "Podman". + + +In this tutorial, I demonstrate step-by-step how to set up and deploy a **custom container** with Docker or Podman. This is intended to be a rather general test case, serving for later configuration of more specific container solutions. For example, you will learn how to spin up an existing `rocker/rstudio` container, and even modify it with additional system components and libraries. I follow other tutorials available online, and try to capture their essence for an INBO-context. @@ -21,10 +29,10 @@ Hence, this is just an assembly of other tutorials, with references - no origina On Windows, installation, configuration, and management of containers runs via the `docker desktop` app. However, this tutorial also covers (and in fact focuses on) the terminal-centered steps to be executed on a linux computer or within a WSL. -I also present **podman** as a full replacement for docker, and recommend to give it a try. +I also present **Podman** as a full replacement for docker, and recommend to give it a try. -Generally, it is recommended to contact and involve your ICT department for support with the setup. +Generally, if you are an INBO user, it is recommended to contact and involve your ICT department for support with the setup. __References:__ @@ -35,6 +43,7 @@ __References:__ - - - +- # Installation @@ -52,8 +61,8 @@ Download the "App" (newspeak for: graphical user interface to a software tool). Install it. -*Note for INBO users:* you should select Hyper-V, instead of WSL, against recommendation (WSL is discouraged/disabled by enterprise settings, see below). -However, you probably do not have admin rights, which is good. +*Note for INBO users:* you should select Hyper-V, instead of WSL, against recommendation (WSL is discouraged/disabled by enterprise settings; however, ICT might help). +You probably do not have admin rights, which is good. To re-iterate: **ask our friendly ICT helpdesk for support right away.** @@ -65,20 +74,27 @@ Side rant collection: - Installation of Docker Desktop does not allow you to specify an install path (might have missed it). - `&'C:\Program Files\Docker\Docker\Docker Desktop.exe'` only runs with admin privileges. -- It is bloated to more than 2GB (compared to the installed size of `docker` and `docker-buildx` on linux <200MB). +- It is bloated to more than 2GB (compared to the installed size of `docker` and `docker-buildx` on linux <200MB; What A GUI!). - The first thing it does is prompt you for an unnecessary login (smells like telemetry). - The second thing it does is annoy you with a survey (explicit telemetry). - It is full of uninvited ads ("Docker Build Cloud", "To access the latest features, sign in."/don't!). If you want some dignity, learn and use the terminal commands below. -I label them "linux", but they are OS-agnostic. +I label them "linux", but they are, in fact, OS-agnostic. ::: +On linux, that same `docker-desktop` [is available for installation](https://docs.docker.com/desktop/setup/install/linux). +But, why would you? -## linux -On linux, that same `docker-desktop` [is available for installation](https://docs.docker.com/desktop/setup/install/linux). -*Or* you could install docker as a terminal tool. +## terminal + +On the windows terminal or linux shell, you can install `docker` as a terminal tool. + +:::{.callout-note} +On windows, this comes bundled with the App; the steps below are not necessary. +However, note that you need to run a terminal *as administrator*. +::: ```{sh} @@ -118,8 +134,6 @@ systemctl stop docker.service ``` -## both, *post hoc* - You can check the docker installation by confirming the version at which the service is running. ```{sh} @@ -173,7 +187,7 @@ docker run --rm -p 8787:8787 -e PASSWORD=YOURNEWPASSWORD rocker/rstudio - The `--rm` flag makes the docker image non-permanent, i.e. disk space will be freed after you close the container. -- The port specified at `-p` is the one you use to access this local container server. You have to specify it explicitly, otherwise the host system will not let you pass (`:gandalf-meme:`). +- The port specified at `-p` is the one you use to access this local container server (the `-p` actually maps host- and container ports). You have to specify it explicitly, otherwise the host system will not let you pass (`:gandalf-meme:`). - The `-e` flag allows you to specify a password, but if you do not specify one, this container will provide a random password upon startup (read the terminal output). ![run](docker_run.jpg) @@ -183,7 +197,7 @@ You are now running (`run`) a `rocker/rstudio` server instance on your `localhos You can access it via a browser, going to , with the username `rstudio` and your chosen password. -You can shut down the container with the keyboard shortcut `[ctrl]+[C]` (probably `[ctrl]+[Z]` on windows). +You can shut down the container with the keyboard shortcut `[ctrl]+[C]` (probably `[ctrl]+[Z] [Return]` on windows). ## file access @@ -202,7 +216,11 @@ Then you can link this to your containers' home folder via the following command ```{sh} #| eval: false -docker run --rm -p 8787:8787 -v /data/git/coding-club:/home/rstudio/coding-club rocker/rstudio +# windows syntax, mapping on `D:\` +docker run --rm -p 8787:8787 -v //d/data/git/coding-club:/home/rstudio/coding-club rocker/rstudio + +# linux syntax +docker run --rm -p 8787:8787 -v /data/git/coding-club:/home/rstudio/coding-club rocker/rstudio ``` Again, navigate to , *et voilà*, you can access your project and store files back in your regular folders. @@ -216,8 +234,8 @@ However, there are limitations: ::: {.callout-warning} - You have to live with the R packages provided in the container, or otherwise install them each time you access it... -- ... unless you make you container permanent by omitting the `--rm` option. Note that this will cost considerable disk space, will not transfer to other computers (the original purpose of docker), and demand occasional updates. -- Speaking of updates: it is good practice to keep software up to date. Occasionally re-install your docker image and R packages to get the latest versions. +- ... unless you make you container permanent by omitting the `--rm` option. Note that this will cost considerable disk space, will not transfer to other computers (the original purpose of docker), and demand occasional updates. (Still the best choice.) +- Speaking of updates: it is good practice to keep software up to date. Occasionally update or simply re-install your docker image and R packages to get the latest versions. - You should make sure that the containers are configured correctly and securely. This is especially important with server components which expose your machine to the internet. - There is a performance penalty from using containers: in inaccurate laymans' terms, they emulate (parts of a) "computer" inside your computer. @@ -271,12 +289,13 @@ Feel free to systematically and scientifically repeat the tests on your own mach ## rationale -One advantage of a docker container is its mobility: you can "bring it with you" to other workstations, host it for others, use cloud computing, mostly without having to worry about installation of the components. -This especially pays off in complicated server setups and distributed computing. -The container is standardized; you could share it with colleagues to make sure versions are compatible. +One advantage of a docker container is its mobility: you can "bring it with you" to other workstations, host it for colleagues or readers, use cloud computing, mostly without having to worry about installation of the components. +This is a matter of good open science practice. +But it also pays off in complicated server setups and distributed computing. -However, as mentioned above, you will require personalization. +A standardized container from [dockerhub](https://hub.docker.com) is a good start. +However, you will probably require personalization. As a use case, imagine you would like to have an RStudio server which comes with relevant inbo packages pre-installed (e.g. [`inbodb`](https://inbo.github.io/inbodb), [`watina`](https://inbo.github.io/watina); *cf.* [contaINBO](https://github.com/inbo/contaINBO)). I will return to this use case below. @@ -314,20 +333,21 @@ I started from the following examples and tutorials to spin up a flask container As you will see, the docker file will give you all the design choices to create your own containers. I think of the docker file as a script which provides all the instructions to set up your container, starting with `FROM` (i.e. which prior container you build upon) to `RUN`ning any type of commands. -Not *any* type, really: we are working on (mysterious, powerful) linux. +Not *any* type, really: we are working on (mysterious, powerful) linux - don't fret, it's easier than you think! To our `python/flask` example. A list of the official python containers is [available here](https://hub.docker.com/_/python). Note that you build every container upon the skeleton of an operating system: I chose [alpine linux](https://en.wikipedia.org/wiki/Alpine_Linux). -It's *en vogue*. +(It's *en vogue*.) The dockerfile resides in your working folder (yet it also defines a [`WORKDIR`](https://stackoverflow.com/a/51066379) from within which later commands are executed). -- Navigate to a folder in which you intend to store your container(s), e.g. `cd /data/docker`. +- Navigate to a folder in which you intend to store your container(s), e.g. `cd C:\data\docker` (windows) or `cd /data/docker` (linux). - Create a file called `Dockerfile`: `touch Dockerfile`. -- Edit the file in your favorite text editor (`vim Dockerfile`): paste and modify the content below. +- Edit the file in your favorite text editor (`vim Dockerfile`; windows people probably use "notepad"). +- Paste and optionally modify the content below. ```{dsl} # Use the official Python image (alpine linux, python 3) @@ -363,10 +383,14 @@ With the `Dockerfile` and `hello.py` in place, you can build the container [^4]. ```{sh} #| eval: false +# on windows, you are already in an administrator terminal +docker build -t my-flask . + +# on linux, use sudo if you like or go to "Podman" (rootless) sudo docker build -t my-flask . ``` -[^4]: If you did not install the `docker-buildx` package, you will get a legacy warning. +[^4]: If you did not install the `docker-buildx` package on linux, you will get a legacy warning. ![build](docker_build.jpg) @@ -385,7 +409,7 @@ docker run my-flask The terminal should give you an IP and port; because the flask runs in a container, `localhost:8000` will **not work** out-of-the-box. Instead, in my case, it was `http://172.17.0.2:8000`. -(Sadly, although I could build and run this container on windows, I did not get through via the browser :shrug:.) +(Sadly, although I could build and run this container on windows, I did not get through via the browser :shrug: but try with port mapping `-p 8000:8000`.) :::{.callout-note} @@ -398,7 +422,7 @@ This works via writing a `Dockerfile` and building an image. ## Multiple Images: `compose` versus `build` The above works fine for most cases. -However, if you want to assemble multiple images, or build on base images from multiple sources, you need a level up. +However, if you want to assemble and combine multiple images, or build on base images from multiple sources, you need a level up. In that case `docker compose` is [the way to go](https://docs.docker.com/compose/gettingstarted). I did not have the need to try this out, yet, but will return here if that changes. @@ -415,6 +439,8 @@ Build recipes for some of the INBO packages you might want to include are collec - +Contributions are much appreciated! + ## dockerfile @@ -424,7 +450,7 @@ This use case is, in fact, well documented: - - -In fact, the Rocker crew rocks! +The Rocker crew rocks! They prepared quite [a lot of useful images](https://hub.docker.com/u/rocker), including for example the `tidyverse` or geospatial packages. @@ -459,6 +485,14 @@ However, there is hope: (i) the error output is quite instructive (at least for It just takes patience. Remember which system powers your container (Debian/Ubuntu), find help online, and document your progress. +:::{.callout-note} +Dockerfiles offer some room for optimization. +For example, every `RUN` is a "Layer"; you should put stable layers top and volatile layers later. +In principle, it is recommended to combine layers as much as possible. + +More here: +::: + Test the image: @@ -476,7 +510,7 @@ docker run --rm -p 8787:8787 -e PASSWORD=YOURNEWPASSWORD test-rstudio ``` -It is good practice to extract modifications in scripts and modularly bring them in to be executed upon installation ([see here](https://stackoverflow.com/q/69167940), [and here](https://rocker-project.org/use/extending.html#install2.r)), via `COPY`. +Another good practice is to extract modifications in scripts and modularly bring them in to be executed upon installation ([see here](https://stackoverflow.com/q/69167940), [and here](https://rocker-project.org/use/extending.html#install2.r)), via `COPY`. This makes them available for a more refined version control. As you know, [version control is key!](https://tutorials.inbo.be/tags/git) @@ -492,10 +526,10 @@ There are [several options available](https://forums.docker.com/t/best-practices - `COPY` in the Dockerfile (or `ADD` [in appropriate cases](https://www.docker.com/blog/docker-best-practices-understanding-the-differences-between-add-and-copy-instructions-in-dockerfiles)) - ["bind mounts"](https://docs.docker.com/engine/storage/bind-mounts) - [volumes](https://docs.docker.com/engine/storage/volumes) -- possibly R ways of +- R's own ways of installing from far (e.g. `remotes::install_github()`) -For the use case of [installing R packages from a private git repo](https://www.geeksforgeeks.org/how-to-clone-private-git-repo-with-dockerfile), however, there are several constraints: +For the use case of [installing R packages from a private git repo](https://www.geeksforgeeks.org/how-to-clone-private-git-repo-with-dockerfile), there are several constraints: - It best happens at build time, to enable all the good stuff: `--rm`, sharing, ... - Better keep your credentials (e.g. ssh keys, access tokens) off the container, both system side and [on the R side](https://usethis.r-lib.org/articles/git-credentials.html). @@ -523,9 +557,9 @@ This [seems to be good practice](https://stackoverflow.com/questions/23391839/cl We have briefly seen `docker --version`, `docker build`, `docker run`, and there are certainly more settings and tweaks on these commands to learn about. -There are other docker commands which might help you out of a misery. +There are other docker commands which might help you out of a temporary misery. -- `docker run -it --entrypoint /bin/bash ` brings you to the shell of a container; you can update, upgrade, or just mess around. +- `docker run -it --entrypoint /bin/bash ` or `docker run -it /bin/bash` brings you to the shell of a container; you can update, upgrade, or just mess around. Try `bash` or `bin/sh` as alternatives. - `docker images` will list your images in convenient table format; the `-q` flag returns only IDs. - `docker inspect ` brings up all the configuration details about a specific image; you can, for example, find out its docker version and network ip. - `docker ps` ("print status") will list all running containers; `docker stop $(docker ps -a -q)` will stop them **all**. @@ -534,6 +568,15 @@ There are other docker commands which might help you out of a misery. There are a gazillion more to choose and use, the [docker docs](https://docs.docker.com/reference/cli/docker) are your go-to source. +One more note on the `ENTRYPOINT`: +It defines through which terminal or script the user will access the container. +For example, `/bin/bash`, `/usr/bin/bash` or `bin/sh` are the bash (linux terminal). +Rocker images usually enter into an R console, or monitor an RStudio server. +The flask container above runs a script which hosts your website and python. +Anything is possible. +You can define an entrypoint in the Dockerfile (i.e. set a default), or overwrite it on each `run`. + + # Podman ## purpose @@ -545,7 +588,7 @@ Don't fall for the docker marketing! There are alternatives which mitigate some of the docker limitations and disadvantages. The most prominent one (or rather the only one *I* looked at, sorry) might be `podman`. -A container is a "pod", they run on a "machine", and this FOSS tool helps you manage them. +A container is a "pod", they run on a "machine", and this FOSS tool helps you to manage them. The major advantage of podman is that it can be configured to run **"rootless"**, i.e. without administrator rights [^5]. [^5]: Daniel J. Walsh (2019): "How does rootless Podman work?" @@ -562,6 +605,8 @@ It is intuitive, transparent (telemetry opt-out), backed by RedHat. Unfortunately, it relies on Windows Subsystem for Linux (WSL), which is not available for INBO users at the moment. :( + +We are working on it. ::: @@ -626,6 +671,7 @@ These and more settings are in `/etc/containers/containers.conf` and `/etc/conta ## usage You can use images from `docker.io` with podman. +The only difference from docker is the explicit mention of the source, `docker.io`. For example: ```{sh} @@ -641,20 +687,22 @@ exit From here, **podman is a full drop-in replacement for docker**; just that you are not forced to grant host system root privileges to containers. -And you can use any docker image; `rocker/rstudio` [is available](https://rocker-project.org/use/rootless-podman.html) (don't forget to specify the port). +Any `Dockerfile` should work, with the mentioned mini-adjustment to `FROM`. +And you can use any docker image; `docker.io/rocker/rstudio` [is available](https://rocker-project.org/use/rootless-podman.html) (don't forget to specify the port). +You may even write `docker` in the terminal: it will alias to `podman` (via the `podman-docker` package on linux). ```{sh} #| eval: false podman run --rm -p 8787:8787 -e PASSWORD=YOURNEWPASSWORD -v /data/git/coding-club:/root/coding-club docker.io/rocker/rstudio ``` -With one exception: the user to login to `rstudio` is not `rstudio`, but `root`, and you have root rights on the container. +There is another subtle change: the default user to login to `rstudio` is not `rstudio`, but `root`, because you need to have root rights on the container. You had those before anyways, but now they are confined to within the pod. :::{.callout-note} -To summarize: +To summarize the Podman experience: - **Docker's Dockerfiles like the one above will build as with docker.** - You can even stick to the `docker` commands thanks to the `podman-docker` package. @@ -669,7 +717,7 @@ Kudos to the podman devs! # Summary In this tutorial, I demonstrated the basics of containerization with docker and podman. -There are convenient GUI apps, and sophisticated terminal commands, both of which are worth getting familiar to. +There are convenient GUI apps, and sophisticated terminal commands, the latter is much more powerful. Personally, I find the concept of containerization fascinating, and was surprised how simple and useful of a trick it is. @@ -678,7 +726,8 @@ Containerization offers the advantages of modularity, configurability, transpare There are some manageable pitfalls with respect to admin rights and resource limitation. -Your head might twisting in a swirl of containers by now. -I hope you find this overview instructive. +This was just a quick tour; I brushed over a lot of novel vocabulary with which you will have to familiarize yourself. +Your head might be twisting in a swirl of containers by now. +I hope you find this overview useful, nevertheless. Thank you for reading! From 1e1b8623100a710f2378bef7d45afa454ff57956 Mon Sep 17 00:00:00 2001 From: Falk Mielke Date: Tue, 4 Feb 2025 15:16:47 +0100 Subject: [PATCH 11/51] docker: render quarto -> md --- .gitignore | 2 + content/tutorials/development_docker/index.md | 663 ++++++++++++++++++ .../tutorials/development_docker/index.qmd | 11 +- .../development_docker/notes_qmd.txt | 40 ++ 4 files changed, 712 insertions(+), 4 deletions(-) create mode 100644 content/tutorials/development_docker/index.md create mode 100644 content/tutorials/development_docker/notes_qmd.txt diff --git a/.gitignore b/.gitignore index 3fe07d6fe..b29b99182 100644 --- a/.gitignore +++ b/.gitignore @@ -66,3 +66,5 @@ data_gisclub/ # png images for the brms tutorial /content/tutorials/r_brms/brms_eng/*.png /content/tutorials/r_brms/brms_nl/*.png + +/.quarto/ diff --git a/content/tutorials/development_docker/index.md b/content/tutorials/development_docker/index.md new file mode 100644 index 000000000..981f0d91f --- /dev/null +++ b/content/tutorials/development_docker/index.md @@ -0,0 +1,663 @@ +--- +title: "Building Containers with Docker and Podman" +description: "Introduction to containerization and the practical use of docker-like tools." +date: "2025-02-04" +authors: [falkmielke] +categories: ["development", "open science"] +tags: ["development", "open science"] +number-sections: false +params: + math: true +format: + html: + toc: true + html-math-method: katex + hugo-md: + toc: true + preserve_yaml: true + html-math-method: katex +output: + hugo-md: + preserve_yaml: true + variant: gfm+footnotes + html: + variant: gfm+footnotes +--- + + +You might have heard about "containerization" with [**Docker**](https://docs.docker.com). +Docker has been labeled "the *Holy Grail* of reproducibility" in [The Open Science Manual by Claudio Zandonella Callegher and Davide Massidda (2023)](https://arca-dpss.github.io/manual-open-science/docker-chapter.html). +Although containerization is an immensely useful Open Science tool worth striving for, the *Holy Grail* is an inaccurate metaphor, because +(i) Docker is easy to find and accessible; +(ii) Docker alone does not make a reproducible workflow; +(iii) Docker has issues, some of them mitigated by "Podman". + +In this tutorial, I demonstrate step-by-step how to set up and deploy a **custom container** with Docker or Podman. +This is intended to be a rather general test case, serving for later configuration of more specific container solutions. +For example, you will learn how to spin up an existing `rocker/rstudio` container, and even modify it with additional system components and libraries. +I follow other tutorials available online, and try to capture their essence for an INBO-context. +Hence, this is just an assembly of other tutorials, with references - no original ideas to be found below, but nevertheless some guidance. + +On Windows, installation, configuration, and management of containers runs via the `docker desktop` app. +However, this tutorial also covers (and in fact focuses on) the terminal-centered steps to be executed on a linux computer or within a WSL. + +I also present **Podman** as a full replacement for docker, and recommend to give it a try. + +Generally, if you are an INBO user, it is recommended to contact and involve your ICT department for support with the setup. + +**References:** + +- +- , +- +- +- +- +- + +# Installation + +The installation procedure [is documented here](https://docs.docker.com/install). + +Docker comes with the *Docker Desktop* app. +That app by itself is trivial and hardly worth a tutorial. + +## windows + +Navigate to [the download site for docker on windows](https://docs.docker.com/desktop/setup/install/windows-install). +Download the "App" (newspeak for: graphical user interface to a software tool). +Install it. + +*Note for INBO users:* you should select Hyper-V, instead of WSL, against recommendation (WSL is discouraged/disabled by enterprise settings; however, ICT might help). +You probably do not have admin rights, which is good. +To re-iterate: **ask our friendly ICT helpdesk for support right away.** + +
    +desktop app + +
    + +Side rant collection: + +- Installation of Docker Desktop does not allow you to specify an install path (might have missed it). +- `&'C:\Program Files\Docker\Docker\Docker Desktop.exe'` only runs with admin privileges. +- It is bloated to more than 2GB (compared to the installed size of `docker` and `docker-buildx` on linux \<200MB; What A GUI!). +- The first thing it does is prompt you for an unnecessary login (smells like telemetry). +- The second thing it does is annoy you with a survey (explicit telemetry). +- It is full of uninvited ads ("Docker Build Cloud", "To access the latest features, sign in."/don't!). + +If you want some dignity, learn and use the terminal commands below. +I label them "linux", but they are, in fact, OS-agnostic. + +On linux, that same `docker-desktop` [is available for installation](https://docs.docker.com/desktop/setup/install/linux). +But, why would you? + +## terminal + +On the windows terminal or linux shell, you can install `docker` as a terminal tool. + + +{{% callout note %}} +On windows, this comes bundled with the App; the steps below are not necessary. +However, note that you need to run a terminal *as administrator*. +{{% /callout %}} + +``` sh +sudo apt update && sudo apt install docker docker-buildx # debian-based +# sudo pacman -Sy docker docker-buildx # arch linux +``` + +For users to be able to use docker, they must be in the "docker" group. +(Insert your username at ``.) + +``` sh +sudo usermod -a -G docker +``` + +For this change to take effect, log off and log in again and restart the docker service if it was running. + +Containers are managed by a system task ("service" and "socket") which need to be started. +Most likely, your linux uses `systemd`. +Your system can start and stop that service automatically, by using `systemctl enable <...>`. +However, due to [diverse](https://docs.docker.com/engine/security) [security](https://github.com/moby/moby/issues/9976) [pitfalls](https://snyk.io/blog/top-ten-most-popular-docker-images-each-contain-at-least-30-vulnerabilities), it is good practice to **not keep it enabled** permanently on your system. + +On a `systemd` system, you can start and stop docker on demand via the following commands (those will ask you for `sudo` authentification if necessary). + +``` sh +systemctl start docker + +systemctl status docker # check status + +systemctl stop docker.socket +systemctl stop docker.service +``` + +You can check the docker installation by confirming the version at which the service is running. + +``` sh +docker --version +``` + +Congratulations: now the fun starts! + +# Existing Containers: `run` + +## rationale + +Docker is about assembling and working in containers. +"Living" in containers. +Or, rather, you can think of this as living in a ["tiny home", or "mobile home"](https://parametric-architecture.com/tiny-house-movement). +Let's call it a fancy caravan. +The good thing is that you get to pick a general design and to choose all details of the interior. + +The best thing: if you feel like you do not have the cash, time, or talent to build your own home, you can *of course* use someone else's. +There are a gazillion **docker images available for you** on [docker hub](https://hub.docker.com). + +## example + +For example[^1], there are docker images with [rstudio server](https://posit.co/download/rstudio-server) pre-installed: + +- + +{{% callout note %}} +If you control containers via the desktop app, simply search, pull, and run it. +{{% /callout %}} + +
    +desktop app: run + +
    + +Otherwise, execute the following script (*windows*: use an administrator terminal). +If it does not find the resources locally, docker will download and extract the image from dockerhub[^2]. + +``` sh +docker run --rm -p 8787:8787 -e PASSWORD=YOURNEWPASSWORD rocker/rstudio +``` + +- The `--rm` flag makes the docker image non-permanent, i.e. disk space will be freed after you close the container. +- The port specified at `-p` is the one you use to access this local container server (the `-p` actually maps host- and container ports). You have to specify it explicitly, otherwise the host system will not let you pass (`:gandalf-meme:`). +- The `-e` flag allows you to specify a password, but if you do not specify one, this container will provide a random password upon startup (read the terminal output). + +
    +run + +
    + +You are now running (`run`) a `rocker/rstudio` server instance on your `localhost`, i.e. your computer. +You can access it via a browser, going to , with the username `rstudio` and your chosen password. + +You can shut down the container with the keyboard shortcut `[ctrl]+[C]` (probably `[ctrl]+[Z] [Return]` on windows). + +## file access + +The downside of this is that your container is isolated (well... at least to a certain degree). + +To store files locally, i.e. on the host machine, without storing the bloated container, you will have to map a virtual path on the container to a local drive on your computer. +(Linux people will be familiar with the concept of "mounting" and "linking" storage locations.) + +Docker `run` brings the `-v` flag for this. +Suppose you have an R project you would like to work on, stored, for example, in this path: + +- `/data/git/coding-club` + +Then you can link this to your containers' home folder via the following command. + +``` sh +# windows syntax, mapping on `D:\` +docker run --rm -p 8787:8787 -v //d/data/git/coding-club:/home/rstudio/coding-club rocker/rstudio + +# linux syntax +docker run --rm -p 8787:8787 -v /data/git/coding-club:/home/rstudio/coding-club rocker/rstudio +``` + +Again, navigate to , *et voilà*, you can access your project and store files back in your regular folders. + +## limitation + +This is a simple and quick way to run R and RStudio in a container. + +However, there are limitations: + +> **Warning** +> +> - You have to live with the R packages provided in the container, or otherwise install them each time you access it... +> - ... unless you make you container permanent by omitting the `--rm` option. Note that this will cost considerable disk space, will not transfer to other computers (the original purpose of docker), and demand occasional updates. (Still the best choice.) +> - Speaking of updates: it is good practice to keep software up to date. Occasionally update or simply re-install your docker image and R packages to get the latest versions. +> - You should make sure that the containers are configured correctly and securely. This is especially important with server components which expose your machine to the internet. +> - There is a performance penalty from using containers: in inaccurate laymans' terms, they emulate (parts of a) "computer" inside your computer. + +On the performance issue: I attempted this on my local laptop with matrix multiplication. + +``` r +# https://cran.r-project.org/web/packages/rbenchmark/rbenchmark.pdf +# install.packages("rbenchmark") + +test <- function(){ + # test from https://prdm0.github.io/ropenblas/#installation + m <- 1e4; n <- 1e3; k <- 3e2 + X <- matrix(rnorm(m*k), nrow=m); Y <- matrix(rnorm(n*k), ncol=n) + X %*% Y +} + +benchmark(test()) +``` + +In the terminal: + + test replications elapsed relative user.self sys.self user.child sys.child + 1 test() 100 22.391 1 83.961 65.291 0 0 + +In the container: + + test replications elapsed relative user.self sys.self user.child sys.child + 1 test() 100 26.076 1 102.494 153.89 0 0 + +Now, the *good news* is that the difference is not by orders of magnitude, which indicates that the chosen rocker image integrated the same good `blas` variant I installed on my computer (`blas-openblas`). + +The *bad news* is that we still still a hit of `-20%` performance, which is considerable. + +This is just a single snapshot on a laptop, and putatively `blas`-confounded. +Feel free to systematically and scientifically repeat the tests on your own machine. + +# Custom Containers: `build` + +(Here follows somewhat advanced stuff. Nevertheless, be brave and give it a read!) + +## rationale + +One advantage of a docker container is its mobility: you can "bring it with you" to other workstations, host it for colleagues or readers, use cloud computing, mostly without having to worry about installation of the components. +This is a matter of good open science practice. +But it also pays off in complicated server setups and distributed computing. + +A standardized container from [dockerhub](https://hub.docker.com) is a good start. +However, you will probably require personalization. +As a use case, imagine you would like to have an RStudio server which comes with relevant inbo packages pre-installed (e.g. [`inbodb`](https://inbo.github.io/inbodb), [`watina`](https://inbo.github.io/watina); *cf.* [contaINBO](https://github.com/inbo/contaINBO)). + +I will return to this use case below. +To explore the general workings of `docker build`, let's turn to more web-directed tasks for a change. + +{{% callout note %}} +With Docker Desktop, you have the graphical interface for "builds". +This might fall under the extended functionality which requires a login. + +Yet even without a login, you *can* proceed via a terminal, as below. +Once you create a `Dockerfile` and build it, it will appear in the GUI. +{{% /callout %}} + +
    +build on windows + +
    + +## init: a `flask` + +[Python `flask`](https://en.wikipedia.org/wiki/Flask_(web_framework)) is a library which allows you to execute python scripts upon web access by users. +For example, you can use flask to gather information a user provides in an html form, then process and store it wherever you like. + +I started from the following examples and tutorials to spin up a flask container, but provide modifications and comments on the steps. + +- +- + +> **It all starts with a [dockerfile](https://www.geeksforgeeks.org/what-is-dockerfile).**[^3] + +As you will see, the docker file will give you all the design choices to create your own containers. +I think of the docker file as a script which provides all the instructions to set up your container, starting with `FROM` (i.e. which prior container you build upon) to `RUN`ning any type of commands. +Not *any* type, really: we are working on (mysterious, powerful) linux - don't fret, it's easier than you think! + +To our `python/flask` example. +A list of the official python containers is [available here](https://hub.docker.com/_/python). +Note that you build every container upon the skeleton of an operating system: I chose [alpine linux](https://en.wikipedia.org/wiki/Alpine_Linux). +(It's *en vogue*.) + +The dockerfile resides in your working folder (yet it also defines a [`WORKDIR`](https://stackoverflow.com/a/51066379) from within which later commands are executed). + +- Navigate to a folder in which you intend to store your container(s), e.g. `cd C:\data\docker` (windows) or `cd /data/docker` (linux). +- Create a file called `Dockerfile`: `touch Dockerfile`. +- Edit the file in your favorite text editor (`vim Dockerfile`; windows people probably use "notepad"). +- Paste and optionally modify the content below. + + + + # Use the official Python image (alpine linux, python 3) + FROM python:3-alpine + + # install app dependencies + RUN apk update && apk add --no-cache python3 py3-pip + RUN pip install flask + + # install app + COPY hello.py / + + # final configuration + ENV FLASK_APP=hello + EXPOSE 8000 + CMD ["flask", "run", "--host", "0.0.0.0", "--port", "8000"] + +Note that the following `hello.py` file needs to be present in your working directory (you will be reminded by a friendly error message): + +``` python +from flask import Flask +app = Flask(__name__) + +@app.route("/") +def hello(): + return "Hello, INBO!" +``` + +With the `Dockerfile` and `hello.py` in place, you can build the container [^4]. + +``` sh +# on windows, you are already in an administrator terminal +docker build -t my-flask . + +# on linux, use sudo if you like or go to "Podman" (rootless) +sudo docker build -t my-flask . +``` + +
    +build + +
    + +List your available container images via the `docker images` command. + +You should now see a `python` image, which is the base alpine image we built upon. +There is also a `my-flask`. +Try it! + +``` sh +docker run my-flask +``` + +The terminal should give you an IP and port; because the flask runs in a container, `localhost:8000` will **not work** out-of-the-box. +Instead, in my case, it was `http://172.17.0.2:8000`. +(Sadly, although I could build and run this container on windows, I did not get through via the browser :shrug: but try with port mapping `-p 8000:8000`.) + +{{% callout note %}} +So far, so good. +We have used an existing image and added `flask` on top of it. +This works via writing a `Dockerfile` and building an image. +{{% /callout %}} + +## Multiple Images: `compose` versus `build` + +The above works fine for most cases. +However, if you want to assemble and combine multiple images, or build on base images from multiple sources, you need a level up. + +In that case `docker compose` is [the way to go](https://docs.docker.com/compose/gettingstarted). +I did not have the need to try this out, yet, but will return here if that changes. + +# Use Case: RStudio with Packages + +## rationale + +We should be able to apply the above to modify the `rocker/rstudio` server image for our purpose. + +Build recipes for some of the INBO packages you might want to include are collected in this repository: + +- + +Contributions are much appreciated! + +## dockerfile + +This use case is, in fact, well documented: + +- +- +- + +The Rocker crew rocks! +They prepared quite [a lot of useful images](https://hub.docker.com/u/rocker), including for example the `tidyverse` or geospatial packages. + +Note the syntax in `FROM`: it is `rocker/:`. + + # Use the rocker rstudio image + FROM rocker/rstudio:latest + + # update the system packages + RUN apt update \ + && apt upgrade --yes + + # git2rdata requires git + RUN apt install git libgit2-dev --yes + + # update pre-installed R packages + # RUN Rscript -e 'update.packages(ask=FALSE)' + + # install package via Rscript + # (a) via r-universe + # RUN Rscript -e 'install.packages("watina", repos = c(inbo = "https://inbo.r-universe.dev", CRAN = "https://cloud.r-project.org"))' + RUN Rscript -e 'install.packages("git2rdata")' + + # (b) from github + RUN R -q -e 'install.packages("remotes")' + RUN R -q -e 'remotes::install_github("inbo/INBOmd", dependencies = TRUE)' + +It takes some puzzle work to get the dependencies right, e.g. with the `libgit2` dependency (try commenting out that line to get a feeling for build failure). +However, there is hope: (i) the error output is quite instructive (at least for linux persons), (ii) building is incremental, so you can add successively. +It just takes patience. +Remember which system powers your container (Debian/Ubuntu), find help online, and document your progress. + +{{% callout note %}} +Dockerfiles offer some room for optimization. +For example, every `RUN` is a "Layer"; you should put stable layers top and volatile layers later. +In principle, it is recommended to combine layers as much as possible. + +More here: +{{% /callout %}} + +Test the image: + +``` sh +docker build -t test-rstudio . +``` + +Run it, as before: + +``` sh +docker run --rm -p 8787:8787 -e PASSWORD=YOURNEWPASSWORD test-rstudio +``` + +Another good practice is to extract modifications in scripts and modularly bring them in to be executed upon installation ([see here](https://stackoverflow.com/q/69167940), [and here](https://rocker-project.org/use/extending.html#install2.r)), via `COPY`. +This makes them available for a more refined version control. +As you know, [version control is key!](https://tutorials.inbo.be/tags/git) + +But, on that line, how about private repositories? +More generally, how would we get (personal) data from our host machine to the container? + +## data exchange + +Arguably, among the rather tricky tasks when working with containers is file exchange. +There are [several options available](https://forums.docker.com/t/best-practices-for-getting-code-into-a-container-git-clone-vs-copy-vs-data-container/4077): + +- `COPY` in the Dockerfile (or `ADD` [in appropriate cases](https://www.docker.com/blog/docker-best-practices-understanding-the-differences-between-add-and-copy-instructions-in-dockerfiles)) +- ["bind mounts"](https://docs.docker.com/engine/storage/bind-mounts) +- [volumes](https://docs.docker.com/engine/storage/volumes) +- R's own ways of installing from far (e.g. `remotes::install_github()`) + +For the use case of [installing R packages from a private git repo](https://www.geeksforgeeks.org/how-to-clone-private-git-repo-with-dockerfile), there are several constraints: + +- It best happens at build time, to enable all the good stuff: `--rm`, sharing, ... +- Better keep your credentials (e.g. ssh keys, access tokens) off the container, both system side and [on the R side](https://usethis.r-lib.org/articles/git-credentials.html). +- On the other hand, updates can often happen by re-building. + +In this (and only this) situation, the simple solution is to copy a clone of the repository to the container, and then install it. +The clone should be within the Dockerfile folder. + + # copy the repo + COPY my_private_repo /opt/my_private_repo + + # manually install dependencies + RUN R -q -e 'install.packages("remotes", dependencies = TRUE)' + + # install package from folder + RUN R -q -e 'install.packages("/opt/my_private_repo", repos = NULL, type = "source", dependencies = TRUE)' + +This [seems to be good practice](https://stackoverflow.com/questions/23391839/clone-private-git-repo-with-dockerfile/55761914#55761914), for being simple, secure, and well feasible. + +# useful commands + +We have briefly seen `docker --version`, `docker build`, `docker run`, and there are certainly more settings and tweaks on these commands to learn about. + +There are other docker commands which might help you out of a temporary misery. + +- `docker run -it --entrypoint /bin/bash ` or `docker run -it /bin/bash` brings you to the shell of a container; you can update, upgrade, or just mess around. Try `bash` or `bin/sh` as alternatives. +- `docker images` will list your images in convenient table format; the `-q` flag returns only IDs. +- `docker inspect ` brings up all the configuration details about a specific image; you can, for example, find out its docker version and network ip. +- `docker ps` ("print status") will list all running containers; `docker stop $(docker ps -a -q)` will stop them **all**. +- `docker rmi ` will remove an image; `docker rmi $(docker images -q)` will remove **all** your images. Of course, you get to keep the dockerfiles. + +There are a gazillion more to choose and use, the [docker docs](https://docs.docker.com/reference/cli/docker) are your go-to source. + +One more note on the `ENTRYPOINT`: +It defines through which terminal or script the user will access the container. +For example, `/bin/bash`, `/usr/bin/bash` or `bin/sh` are the bash (linux terminal). +Rocker images usually enter into an R console, or monitor an RStudio server. +The flask container above runs a script which hosts your website and python. +Anything is possible. +You can define an entrypoint in the Dockerfile (i.e. set a default), or overwrite it on each `run`. + +# Podman + +## purpose + +Whales don't really carry "containers", and "images" are better hung on walls. +Don't fall for the docker marketing! + +There are alternatives which mitigate some of the docker limitations and disadvantages. + +The most prominent one (or rather the only one *I* looked at, sorry) might be `podman`. +A container is a "pod", they run on a "machine", and this FOSS tool helps you to manage them. +The major advantage of podman is that it can be configured to run **"rootless"**, i.e. without administrator rights [^5]. + +Podman is [well documented](https://podman.io/docs/installation). +Another reliable source as so often is the [arch linux wiki on podman](https://wiki.archlinux.org/title/Podman), no matter which linux you are on. +On windows, people have succeeded in running Podman through a WSL. + +{{% callout note %}} +For windows, there is a convenient "Podman Desktop" GUI which guides you through the installation and setup, including WSL instantiation. +It is intuitive, transparent (telemetry opt-out), backed by RedHat. + +Unfortunately, it relies on Windows Subsystem for Linux (WSL), which is not available for INBO users at the moment. + +:( + +We are working on it. +{{% /callout %}} + +## setup + +The instructions below were tested on arch linux, but generalize easily. + +I follow the `podman` installation instructions for arch linux, to set up a **rootless container environment**. + +Installation: + +``` sh +pacman -Sy podman podman-docker passt +``` + +The last one, `passt` (providing `pasta`, yum!), is required for rootless network access. +Optionally, there is `podman-compose`. + +Out of the box, Podman will run *only if you are root*. +This has to be changed to go *rootless* ([see also](https://man.archlinux.org/man/podman.1#Rootless_mode)) +The first step is to confirm a required kernel module: check that `unpriviledged_users_clone` is set to one. + +``` sh +sysctl kernel.unprivileged_userns_clone +``` + +Then, configure "subordinate user IDs". +There are detail differences in each linux distro; with some luck, your username is already present in these lists: + +``` sh +cat /etc/subuid +cat /etc/subgid +``` + +If not, you can be admitted to the club of subordinates with the command: + +``` sh +usermod --add-subuids 100000-165535 --add-subgids 100000-165535 +podman system migrate +``` + +We note some useful commands on the way: `podman system ...` and `podman info`. +You might immediately check "native rootless overlays" (has something to do with mounting filesystems in the container): + +``` sh +podman info | grep -i overlay +``` + +Then, networking: pods might need to communicate to each other and to the world. +And, of course, container storage: make sure you know where your containers are stored. +These and more settings are in `/etc/containers/containers.conf` and `/etc/containers/storage.conf`; make sure to scan and edit them to your liking. + +## usage + +You can use images from `docker.io` with podman. +The only difference from docker is the explicit mention of the source, `docker.io`. +For example: + +``` sh +podman search docker.io/alpine +podman pull docker.io/alpine # download a machine +podman run -it docker.io/alpine # will connect to the container +exit +``` + +## podman rocker + +From here, **podman is a full drop-in replacement for docker**; just that you are not forced to grant host system root privileges to containers. + +Any `Dockerfile` should work, with the mentioned mini-adjustment to `FROM`. +And you can use any docker image; `docker.io/rocker/rstudio` [is available](https://rocker-project.org/use/rootless-podman.html) (don't forget to specify the port). +You may even write `docker` in the terminal: it will alias to `podman` (via the `podman-docker` package on linux). + +``` sh +podman run --rm -p 8787:8787 -e PASSWORD=YOURNEWPASSWORD -v /data/git/coding-club:/root/coding-club docker.io/rocker/rstudio +``` + +There is another subtle change: the default user to login to `rstudio` is not `rstudio`, but `root`, because you need to have root rights on the container. +You had those before anyways, but now they are confined to within the pod. + +{{% callout note %}} +To summarize the Podman experience: + +- **Docker's Dockerfiles like the one above will build as with docker.** +- You can even stick to the `docker` commands thanks to the `podman-docker` package. +- There is podman desktop, if you like clicking. +- Podman is everything docker is, just better. + +{{% /callout %}} + +Kudos to the podman devs! + +# Summary + +In this tutorial, I demonstrated the basics of containerization with docker and podman. +There are convenient GUI apps, and sophisticated terminal commands, the latter is much more powerful. + +Personally, I find the concept of containerization fascinating, and was surprised how simple and useful of a trick it is. + +Containerization offers the advantages of modularity, configurability, transparency (open science: share your rocker file), shared use ... +There are some manageable pitfalls with respect to admin rights and resource limitation. + +This was just a quick tour; I brushed over a lot of novel vocabulary with which you will have to familiarize yourself. +Your head might be twisting in a swirl of containers by now. +I hope you find this overview useful, nevertheless. +Thank you for reading! + +[^1]: I mostly follow [this tutorial](https://jsta.github.io/r-docker-tutorial/02-Launching-Docker.html). + +[^2]: Just like "github" is a server service to store git repositories, guess what: "docker hub" is a hosting service to store docker containers. + +[^3]: Here I quoted the docs () before having read them. + +[^4]: If you did not install the `docker-buildx` package on linux, you will get a legacy warning. + +[^5]: Daniel J. Walsh (2019): "How does rootless Podman work?" diff --git a/content/tutorials/development_docker/index.qmd b/content/tutorials/development_docker/index.qmd index ad98efe96..2227930c4 100644 --- a/content/tutorials/development_docker/index.qmd +++ b/content/tutorials/development_docker/index.qmd @@ -244,7 +244,8 @@ However, there are limitations: On the performance issue: I attempted this on my local laptop with matrix multiplication. -```{r} +```{r eval=FALSE} +#| eval: false # https://cran.r-project.org/web/packages/rbenchmark/rbenchmark.pdf # install.packages("rbenchmark") @@ -349,7 +350,7 @@ The dockerfile resides in your working folder (yet it also defines a [`WORKDIR`] - Edit the file in your favorite text editor (`vim Dockerfile`; windows people probably use "notepad"). - Paste and optionally modify the content below. -```{dsl} +```{} # Use the official Python image (alpine linux, python 3) FROM python:3-alpine @@ -370,6 +371,7 @@ CMD ["flask", "run", "--host", "0.0.0.0", "--port", "8000"] Note that the following `hello.py` file needs to be present in your working directory (you will be reminded by a friendly error message): ```{python} +#| eval: false from flask import Flask app = Flask(__name__) @@ -456,7 +458,7 @@ They prepared quite [a lot of useful images](https://hub.docker.com/u/rocker), i Note the syntax in `FROM`: it is `rocker/:`. -```{dsl} +```{} # Use the rocker rstudio image FROM rocker/rstudio:latest @@ -539,7 +541,7 @@ For the use case of [installing R packages from a private git repo](https://www. In this (and only this) situation, the simple solution is to copy a clone of the repository to the container, and then install it. The clone should be within the Dockerfile folder. -```{dsl} +```{} # copy the repo COPY my_private_repo /opt/my_private_repo @@ -647,6 +649,7 @@ cat /etc/subgid ``` If not, you can be admitted to the club of subordinates with the command: + ```{sh} #| eval: false usermod --add-subuids 100000-165535 --add-subgids 100000-165535 diff --git a/content/tutorials/development_docker/notes_qmd.txt b/content/tutorials/development_docker/notes_qmd.txt new file mode 100644 index 000000000..ddd78dcfd --- /dev/null +++ b/content/tutorials/development_docker/notes_qmd.txt @@ -0,0 +1,40 @@ + +steps to get a qmd to hugo markdown: + ++ export hugo-md: + quarto render .qmd --to hugo-md + ++ include yaml + preserve_yaml: true + + + ++ callouts: https://rossabaker.com/configs/website/shortcodes/callout/ +{{% callout note %}} +{{% /callout %}} + + + ++ section crosslinks: +##
    Section + ++ figure captions + +
    Figure 1: Caption text.

    + ++ equations + in yaml header: + params: + math: true + replace $s$ -> \\(s\\), $$\ldots$$ -> \\[\ldots\\] + cf. math https://gohugo.io/content-management/mathematics/ + eqn with \\(\\) and \\[\\] + ++ preview procedure: + rm tutorials -rf + unzip + python -m http.server 8887 + From 0767adfdecd36f4acbe3a410ef37c772148ec09c Mon Sep 17 00:00:00 2001 From: Falk Mielke Date: Tue, 4 Feb 2025 15:40:14 +0100 Subject: [PATCH 12/51] docker: image references to static --- content/tutorials/development_docker/index.md | 10 +++++----- .../tutorials/development_docker/docker_build.jpg | Bin .../development_docker/docker_desktop1.jpg | Bin .../development_docker/docker_desktop2.jpg | Bin .../tutorials/development_docker/docker_run.jpg | Bin .../development_docker/docker_winbuild.jpg | Bin 6 files changed, 5 insertions(+), 5 deletions(-) rename {content => static/images}/tutorials/development_docker/docker_build.jpg (100%) rename {content => static/images}/tutorials/development_docker/docker_desktop1.jpg (100%) rename {content => static/images}/tutorials/development_docker/docker_desktop2.jpg (100%) rename {content => static/images}/tutorials/development_docker/docker_run.jpg (100%) rename {content => static/images}/tutorials/development_docker/docker_winbuild.jpg (100%) diff --git a/content/tutorials/development_docker/index.md b/content/tutorials/development_docker/index.md index 981f0d91f..872b8f526 100644 --- a/content/tutorials/development_docker/index.md +++ b/content/tutorials/development_docker/index.md @@ -73,7 +73,7 @@ You probably do not have admin rights, which is good. To re-iterate: **ask our friendly ICT helpdesk for support right away.**
    -desktop app +desktop app
    @@ -164,7 +164,7 @@ If you control containers via the desktop app, simply search, pull, and run it. {{% /callout %}}
    -desktop app: run +desktop app: run
    @@ -180,7 +180,7 @@ docker run --rm -p 8787:8787 -e PASSWORD=YOURNEWPASSWORD rocker/rstudio - The `-e` flag allows you to specify a password, but if you do not specify one, this container will provide a random password upon startup (read the terminal output).
    -run +run
    @@ -286,7 +286,7 @@ Once you create a `Dockerfile` and build it, it will appear in the GUI. {{% /callout %}}
    -build on windows +build on windows
    @@ -357,7 +357,7 @@ sudo docker build -t my-flask . ```
    -build +build
    diff --git a/content/tutorials/development_docker/docker_build.jpg b/static/images/tutorials/development_docker/docker_build.jpg similarity index 100% rename from content/tutorials/development_docker/docker_build.jpg rename to static/images/tutorials/development_docker/docker_build.jpg diff --git a/content/tutorials/development_docker/docker_desktop1.jpg b/static/images/tutorials/development_docker/docker_desktop1.jpg similarity index 100% rename from content/tutorials/development_docker/docker_desktop1.jpg rename to static/images/tutorials/development_docker/docker_desktop1.jpg diff --git a/content/tutorials/development_docker/docker_desktop2.jpg b/static/images/tutorials/development_docker/docker_desktop2.jpg similarity index 100% rename from content/tutorials/development_docker/docker_desktop2.jpg rename to static/images/tutorials/development_docker/docker_desktop2.jpg diff --git a/content/tutorials/development_docker/docker_run.jpg b/static/images/tutorials/development_docker/docker_run.jpg similarity index 100% rename from content/tutorials/development_docker/docker_run.jpg rename to static/images/tutorials/development_docker/docker_run.jpg diff --git a/content/tutorials/development_docker/docker_winbuild.jpg b/static/images/tutorials/development_docker/docker_winbuild.jpg similarity index 100% rename from content/tutorials/development_docker/docker_winbuild.jpg rename to static/images/tutorials/development_docker/docker_winbuild.jpg From e09a3820d881ac510923f45cbc91927c68541b58 Mon Sep 17 00:00:00 2001 From: Falk Mielke Date: Tue, 4 Feb 2025 15:48:50 +0100 Subject: [PATCH 13/51] docker: pasting in CSS for callout boxes (duplicate with branch `variograms`) --- static/css/custom.css | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/static/css/custom.css b/static/css/custom.css index 8236045f0..78b935ba0 100644 --- a/static/css/custom.css +++ b/static/css/custom.css @@ -1,5 +1,38 @@ /* Custom CSS */ +/* callout boxes */ +/* cf. https://rossabaker.com/configs/website/shortcodes/callout/ */ +.callout { + margin: 1.5rem 0; + padding: 1em; + border-inline-start: .25em solid; +} + +.callout-title { + font-weight: bolder; + margin-bottom: 1em; +} + +.callout-note { + border-color: #366196; + background: #b4c9e4; +} + +.callout-emphasize { + border-color: #993368; + background: #e6b2cd; +} + +/* captions */ +/* cf. https://thesynack.com/posts/markdown-captions */ +figcaption { + font-style: italic; + font-size: small; + padding: 0px; + text-align: center; +} + + /* SIDEBAR */ /* Add gray background to sidebar */ From 3cd97b3ebddea4e85ecf9a8aa899d28c91f70cfb Mon Sep 17 00:00:00 2001 From: Falk Mielke Date: Tue, 4 Feb 2025 15:51:51 +0100 Subject: [PATCH 14/51] docker: hugo shortcode for callouts --- layouts/shortcodes/callout.html | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 layouts/shortcodes/callout.html diff --git a/layouts/shortcodes/callout.html b/layouts/shortcodes/callout.html new file mode 100644 index 000000000..67e6997fb --- /dev/null +++ b/layouts/shortcodes/callout.html @@ -0,0 +1,4 @@ +
    +
    {{ printf "callouts.%s" (.Get 0) | i18n | strings.FirstUpper }}
    + {{ .Inner | markdownify | emojify }} +
    From 1367a8d8f32a131d3acf49319dde95bf61250120 Mon Sep 17 00:00:00 2001 From: Falk Mielke Date: Mon, 10 Feb 2025 18:13:06 +0100 Subject: [PATCH 15/51] docker (wip): review comments by @florisvdh see https://github.com/inbo/tutorials/pull/356 --- .../tutorials/development_docker/index.qmd | 91 ++++++++++++------- .../development_docker/notes_qmd.txt | 2 +- 2 files changed, 57 insertions(+), 36 deletions(-) diff --git a/content/tutorials/development_docker/index.qmd b/content/tutorials/development_docker/index.qmd index 2227930c4..7e4fb2072 100644 --- a/content/tutorials/development_docker/index.qmd +++ b/content/tutorials/development_docker/index.qmd @@ -1,13 +1,27 @@ --- -title: "Development/Docker: Compose" +title: "Building Containers with Docker and Podman" +description: "Introduction to containerization and the practical use of docker-like tools." +date: "2025-02-04" +authors: [falkmielke] +categories: ["development", "open science"] +tags: ["development", "open science"] +number-sections: false +params: + math: true format: html: toc: true html-math-method: katex - code-fold: true -knitr: - opts_chunk: - echo: true + hugo-md: + toc: true + preserve_yaml: true + html-math-method: katex +output: + hugo-md: + preserve_yaml: true + variant: gfm+footnotes + html: + variant: gfm+footnotes --- @@ -68,23 +82,15 @@ To re-iterate: **ask our friendly ICT helpdesk for support right away.** ![desktop app](docker_desktop1.jpg) +Using a convenient app is possible with Docker Desktop. +On windows, you can download and install it with administrator rights. +On linux, that same `docker-desktop` [is available for installation](https://docs.docker.com/desktop/setup/install/linux). +Yet while automating some aspects, the app is not entirely transparent on telemetry and advertisement; some anti-features are included (e.g. required login). +This is unfortunate, because it makes the app less open for more privacy-concerned users. -:::{.container-note} -Side rant collection: - -- Installation of Docker Desktop does not allow you to specify an install path (might have missed it). -- `&'C:\Program Files\Docker\Docker\Docker Desktop.exe'` only runs with admin privileges. -- It is bloated to more than 2GB (compared to the installed size of `docker` and `docker-buildx` on linux <200MB; What A GUI!). -- The first thing it does is prompt you for an unnecessary login (smells like telemetry). -- The second thing it does is annoy you with a survey (explicit telemetry). -- It is full of uninvited ads ("Docker Build Cloud", "To access the latest features, sign in."/don't!). - -If you want some dignity, learn and use the terminal commands below. -I label them "linux", but they are, in fact, OS-agnostic. -::: -On linux, that same `docker-desktop` [is available for installation](https://docs.docker.com/desktop/setup/install/linux). -But, why would you? +The terminal aspect of docker is entirely free and open source, and universally accessible. +This is why the rest of this tutorial will focus on terminal access. ## terminal @@ -204,15 +210,19 @@ You can shut down the container with the keyboard shortcut `[ctrl]+[C]` (probabl The downside of this is that your container is isolated (well... at least to a certain degree). -To store files locally, i.e. on the host machine, without storing the bloated container, you will have to map a virtual path on the container to a local drive on your computer. -(Linux people will be familiar with the concept of "mounting" and "linking" storage locations.) +Images can take up considerable storage space. +Storing files locally, i.e. on the host machine, without storing an unneccessarily filled container, might be a good strategy. +This can be achieved by mapping a virtual path on the container to a local drive on your computer. +(Linux users will be familiar with the concept of "mounting" and "linking" storage locations.) +Note that the technique is equally relevant when running the container locally, hence not exclusive to remote hosts. + -Docker `run` brings the `-v` flag for this. +Docker `run` brings the `-v` flag for mounting volumes. Suppose you have an R project you would like to work on, stored, for example, in this path: - `/data/git/coding-club` -Then you can link this to your containers' home folder via the following command. +Then you can link this to your container's home folder via the following command. ```{sh} #| eval: false @@ -234,7 +244,7 @@ However, there are limitations: ::: {.callout-warning} - You have to live with the R packages provided in the container, or otherwise install them each time you access it... -- ... unless you make you container permanent by omitting the `--rm` option. Note that this will cost considerable disk space, will not transfer to other computers (the original purpose of docker), and demand occasional updates. (Still the best choice.) +- ... unless you make your container permanent by omitting the `--rm` option. Note that this will cost considerable disk space, will not transfer to other computers (the original purpose of docker), and demand occasional updates. (Still the best choice.) - Speaking of updates: it is good practice to keep software up to date. Occasionally update or simply re-install your docker image and R packages to get the latest versions. - You should make sure that the containers are configured correctly and securely. This is especially important with server components which expose your machine to the internet. - There is a performance penalty from using containers: in inaccurate laymans' terms, they emulate (parts of a) "computer" inside your computer. @@ -274,9 +284,10 @@ In the container: ``` -Now, the *good news* is that the difference is not by orders of magnitude, which indicates that the chosen rocker image integrated the same good `blas` variant I installed on my computer (`blas-openblas`). +Now, the *good news* is that the difference is not by orders of magnitude. +This indicates that the chosen rocker image integrated the more performant `blas` variant which is [recommended](https://pbs-assess.github.io/sdmTMB/index.html#installation) [elsewhere](https://prdm0.github.io/ropenblas/#installation) (`blas-openblas`). -The *bad news* is that we still still a hit of `-20%` performance, which is considerable. +The *bad news* is that we still a hit of `-20%` performance, which is considerable. This is just a single snapshot on a laptop, and putatively `blas`-confounded. @@ -347,7 +358,7 @@ The dockerfile resides in your working folder (yet it also defines a [`WORKDIR`] - Navigate to a folder in which you intend to store your container(s), e.g. `cd C:\data\docker` (windows) or `cd /data/docker` (linux). - Create a file called `Dockerfile`: `touch Dockerfile`. -- Edit the file in your favorite text editor (`vim Dockerfile`; windows people probably use "notepad"). +- Edit the file in your favorite text editor (`vim Dockerfile`; windows users probably use "notepad"). - Paste and optionally modify the content below. ```{} @@ -388,8 +399,9 @@ With the `Dockerfile` and `hello.py` in place, you can build the container [^4]. # on windows, you are already in an administrator terminal docker build -t my-flask . -# on linux, use sudo if you like or go to "Podman" (rootless) -sudo docker build -t my-flask . +# on linux, use sudo if the user is not in the `docker` group. +# sudo docker build -t my-flask . +docker build -t my-flask . ``` [^4]: If you did not install the `docker-buildx` package on linux, you will get a legacy warning. @@ -485,6 +497,7 @@ RUN R -q -e 'remotes::install_github("inbo/INBOmd", dependencies = TRUE)' It takes some puzzle work to get the dependencies right, e.g. with the `libgit2` dependency (try commenting out that line to get a feeling for build failure). However, there is hope: (i) the error output is quite instructive (at least for linux persons), (ii) building is incremental, so you can add successively. It just takes patience. +As a shortcut, consider using `pak` (from R) or `r2u` (apt repository) to implicitly deal with the system dependencies. Remember which system powers your container (Debian/Ubuntu), find help online, and document your progress. :::{.callout-note} @@ -561,6 +574,7 @@ We have briefly seen `docker --version`, `docker build`, `docker run`, and there There are other docker commands which might help you out of a temporary misery. +- `docker --help` will list the available commands and options. - `docker run -it --entrypoint /bin/bash ` or `docker run -it /bin/bash` brings you to the shell of a container; you can update, upgrade, or just mess around. Try `bash` or `bin/sh` as alternatives. - `docker images` will list your images in convenient table format; the `-q` flag returns only IDs. - `docker inspect ` brings up all the configuration details about a specific image; you can, for example, find out its docker version and network ip. @@ -583,10 +597,6 @@ You can define an entrypoint in the Dockerfile (i.e. set a default), or overwrit ## purpose -Whales don't really carry "containers", and "images" are better hung on walls. -Don't fall for the docker marketing! - - There are alternatives which mitigate some of the docker limitations and disadvantages. The most prominent one (or rather the only one *I* looked at, sorry) might be `podman`. @@ -598,7 +608,7 @@ The major advantage of podman is that it can be configured to run **"rootless"** Podman is [well documented](https://podman.io/docs/installation). Another reliable source as so often is the [arch linux wiki on podman](https://wiki.archlinux.org/title/Podman), no matter which linux you are on. -On windows, people have succeeded in running Podman through a WSL. +Windows users have succeeded in running Podman through a WSL. :::{.callout-note} For windows, there is a convenient "Podman Desktop" GUI which guides you through the installation and setup, including WSL instantiation. @@ -734,3 +744,14 @@ Your head might be twisting in a swirl of containers by now. I hope you find this overview useful, nevertheless. Thank you for reading! + +# TODO Review + +- Add text on @FV question: "Generally, I think it is good practice to treat containers as volatile to keep them hostmachine-independent." + +- https://github.com/inbo/tutorials/pull/356#discussion_r1949162627 +- what does containerd do? https://github.com/inbo/tutorials/pull/356#discussion_r1949167299 + +- https://github.com/inbo/tutorials/pull/356#discussion_r1949270329 + +- podman --box "The requirements below seem to be met out of the box in an Ubuntu environment. Then am I right that the 'out of the box' statement here does not hold?" diff --git a/content/tutorials/development_docker/notes_qmd.txt b/content/tutorials/development_docker/notes_qmd.txt index ddd78dcfd..7091fd58c 100644 --- a/content/tutorials/development_docker/notes_qmd.txt +++ b/content/tutorials/development_docker/notes_qmd.txt @@ -6,7 +6,7 @@ steps to get a qmd to hugo markdown: + include yaml preserve_yaml: true - +but double-check the yaml header: it does not always copy correctly. + callouts: https://rossabaker.com/configs/website/shortcodes/callout/ From 2ec9d3635280cad9c589b9d204e711c320af9ec3 Mon Sep 17 00:00:00 2001 From: Falk Mielke Date: Tue, 11 Feb 2025 15:25:37 +0100 Subject: [PATCH 16/51] docker: review comments incorporated highlights: - general language and consistency - container permanence (`--rm`) - confusion with version control and virtual envs - rootless docker --- .../tutorials/development_docker/index.qmd | 391 ++++++++++++------ 1 file changed, 273 insertions(+), 118 deletions(-) diff --git a/content/tutorials/development_docker/index.qmd b/content/tutorials/development_docker/index.qmd index 7e4fb2072..60f7e22f1 100644 --- a/content/tutorials/development_docker/index.qmd +++ b/content/tutorials/development_docker/index.qmd @@ -1,6 +1,6 @@ --- title: "Building Containers with Docker and Podman" -description: "Introduction to containerization and the practical use of docker-like tools." +description: "Introduction to containerization and the practical use of Docker-like tools." date: "2025-02-04" authors: [falkmielke] categories: ["development", "open science"] @@ -28,22 +28,22 @@ output: You might have heard about "containerization" with [**Docker**](https://docs.docker.com). Docker has been labeled "the *Holy Grail* of reproducibility" in [The Open Science Manual by Claudio Zandonella Callegher and Davide Massidda (2023)](https://arca-dpss.github.io/manual-open-science/docker-chapter.html). Although containerization is an immensely useful Open Science tool worth striving for, the *Holy Grail* is an inaccurate metaphor, because -(i) Docker is easy to find and accessible; -(ii) Docker alone does not make a reproducible workflow; -(iii) Docker has issues, some of them mitigated by "Podman". +(i) Unlike The Grail, Docker is easy to find and accessible. +(ii) Docker alone does not make a reproducible workflow; some of its capability is occasionally confused with package version management. +(iii) Docker has issues, some of them mitigated by configuration adjustment or switching to "Podman". In this tutorial, I demonstrate step-by-step how to set up and deploy a **custom container** with Docker or Podman. This is intended to be a rather general test case, serving for later configuration of more specific container solutions. For example, you will learn how to spin up an existing `rocker/rstudio` container, and even modify it with additional system components and libraries. -I follow other tutorials available online, and try to capture their essence for an INBO-context. +I follow other tutorials available online, and try to capture their essence for an INBO context. Hence, this is just an assembly of other tutorials, with references - no original ideas to be found below, but nevertheless some guidance. On Windows, installation, configuration, and management of containers runs via the `docker desktop` app. -However, this tutorial also covers (and in fact focuses on) the terminal-centered steps to be executed on a linux computer or within a WSL. +However, this tutorial also covers (and in fact focuses on) the terminal-centered steps to be executed on a Linux computer or within a WSL. -I also present **Podman** as a full replacement for docker, and recommend to give it a try. +I also present **Podman** as a full replacement for Docker, and recommend to give it a try. Generally, if you are an INBO user, it is recommended to contact and involve your ICT department for support with the setup. @@ -68,49 +68,59 @@ Docker comes with the *Docker Desktop* app. That app by itself is trivial and hardly worth a tutorial. -## windows +## Microsoft Windows -Navigate to [the download site for docker on windows](https://docs.docker.com/desktop/setup/install/windows-install). +Navigate to [the download site for Docker on Windows](https://docs.docker.com/desktop/setup/install/windows-install). Download the "App" (newspeak for: graphical user interface to a software tool). Install it. -*Note for INBO users:* you should select Hyper-V, instead of WSL, against recommendation (WSL is discouraged/disabled by enterprise settings; however, ICT might help). +*Note for INBO users:* you might choose to select Hyper-V, instead of WSL, against Docker's recommendation (WSL is not working in our enterprise environment; however, we are trying to improve and ICT might help). You probably do not have admin rights, which is good. To re-iterate: **ask our friendly ICT helpdesk for support right away.** ![desktop app](docker_desktop1.jpg) -Using a convenient app is possible with Docker Desktop. -On windows, you can download and install it with administrator rights. -On linux, that same `docker-desktop` [is available for installation](https://docs.docker.com/desktop/setup/install/linux). +Using a convenient app is possible with "Docker Desktop". +On Windows, you can download and install it with administrator rights. +On Linux, that same `docker-desktop` [is available for installation](https://docs.docker.com/desktop/setup/install/linux). Yet while automating some aspects, the app is not entirely transparent on telemetry and advertisement; some anti-features are included (e.g. required login). This is unfortunate, because it makes the app less open for more privacy-concerned users. -The terminal aspect of docker is entirely free and open source, and universally accessible. +The terminal aspect of Docker is entirely free and open source, and universally accessible. This is why the rest of this tutorial will focus on terminal access. -## terminal +## Terminal -On the windows terminal or linux shell, you can install `docker` as a terminal tool. +On the Windows terminal or Linux shell, you can install `docker` as a terminal tool. :::{.callout-note} -On windows, this comes bundled with the App; the steps below are not necessary. +On Windows, this comes bundled with the App[^7]; the steps below are not necessary. However, note that you need to run a terminal *as administrator*. ::: +[^7]: I saw several ways online to get around the Desktop App, either via WSL2 or using [a windows package manager called Chocolatey](https://en.wikipedia.org/wiki/Chocolatey). + + +More info on the debian installation [can be found here](https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository). +The procedure requires you to add an extra repository, [some caution is warranted](https://wiki.debian.org/DontBreakDebian). ```{sh} #| eval: false -sudo apt update && sudo apt install docker docker-buildx # debian-based -# sudo pacman -Sy docker docker-buildx # arch linux +sudo apt update && sudo apt install docker-ce docker-buildx-plugin # debian-based +# sudo pacman -Sy docker docker-buildx # Arch Linux ``` -For users to be able to use docker, they must be in the "docker" group. +As you will notice, this installs a "CE" version of Docker, `docker-ce`. +CE stands for "community edition", as opposed to "enterprise edition" ([cf. here](https://www.geeksforgeeks.org/docker-community-edition-vs-enterprise-edition)). +Many features which you would take for granted in this kind of software (security, consistency, scalability) are handled differently in the two editions, thus it is worth knowing the difference and considering the alternatives. + + +For users to be able to use Docker, they must be in the "docker" group. (Insert your username at ``.) ```{sh} @@ -118,16 +128,16 @@ For users to be able to use docker, they must be in the "docker" group. sudo usermod -a -G docker ``` -For this change to take effect, log off and log in again and restart the docker service if it was running. +For this change to take effect, log off and log in again and restart the Docker service if it was running. Containers are managed by a system task ("service" and "socket") which need to be started. -Most likely, your linux uses `systemd`. +Most likely, your Linux uses `systemd`. Your system can start and stop that service automatically, by using `systemctl enable <...>`. However, due to [diverse](https://docs.docker.com/engine/security) [security](https://github.com/moby/moby/issues/9976) [pitfalls](https://snyk.io/blog/top-ten-most-popular-docker-images-each-contain-at-least-30-vulnerabilities), it is good practice to **not keep it enabled** permanently on your system. -On a `systemd` system, you can start and stop docker on demand via the following commands (those will ask you for `sudo` authentification if necessary). +On a `systemd` system, you can start and stop Docker on demand via the following commands (those will ask you for `sudo` authentification if necessary). ```{sh} #| eval: false @@ -140,7 +150,11 @@ systemctl stop docker.service ``` -You can check the docker installation by confirming the version at which the service is running. +For aficionados: docker actually runs multiple services: the docker service, the docker socket, and the [container daemon](https://www.docker.com/blog/containerd-vs-docker) `containerd`. + + + +You can check the Docker installation by confirming the version at which the service is running. ```{sh} #| eval: false @@ -152,7 +166,7 @@ Congratulations: now the fun starts! # Existing Containers: `run` -## rationale +## Rationale Docker is about assembling and working in containers. "Living" in containers. @@ -162,12 +176,12 @@ The good thing is that you get to pick a general design and to choose all detail The best thing: if you feel like you do not have the cash, time, or talent to build your own home, you can *of course* use someone else's. -There are a gazillion **docker images available for you** on [docker hub](https://hub.docker.com). +There are a gazillion **Docker images available for you** on [Docker Hub](https://hub.docker.com). -## example +## Example -For example[^1], there are docker images with [rstudio server](https://posit.co/download/rstudio-server) pre-installed: +For example[^1], there are Docker images with [rstudio server](https://posit.co/download/rstudio-server) pre-installed: - @@ -181,10 +195,10 @@ If you control containers via the desktop app, simply search, pull, and run it. ![desktop app: run](docker_desktop2.jpg) -Otherwise, execute the following script (*windows*: use an administrator terminal). -If it does not find the resources locally, docker will download and extract the image from dockerhub[^2]. +Otherwise, execute the following script (*Windows*: use an administrator terminal). +If it does not find the resources locally, Docker will download and extract the image from Docker Hub[^2]. -[^2]: Just like "github" is a server service to store git repositories, guess what: "docker hub" is a hosting service to store docker containers. +[^2]: Just like "Github" is a server service to store git repositories, guess what: "Docker Hub" is a hosting service to store Docker containers. ```{sh} #| eval: false @@ -192,7 +206,7 @@ docker run --rm -p 8787:8787 -e PASSWORD=YOURNEWPASSWORD rocker/rstudio ``` -- The `--rm` flag makes the docker image non-permanent, i.e. disk space will be freed after you close the container. +- The `--rm` flag makes the Docker image non-permanent, i.e. disk space will be freed after you close the container ([@sec-permanence]). - The port specified at `-p` is the one you use to access this local container server (the `-p` actually maps host- and container ports). You have to specify it explicitly, otherwise the host system will not let you pass (`:gandalf-meme:`). - The `-e` flag allows you to specify a password, but if you do not specify one, this container will provide a random password upon startup (read the terminal output). @@ -203,10 +217,10 @@ You are now running (`run`) a `rocker/rstudio` server instance on your `localhos You can access it via a browser, going to , with the username `rstudio` and your chosen password. -You can shut down the container with the keyboard shortcut `[ctrl]+[C]` (probably `[ctrl]+[Z] [Return]` on windows). +You can shut down the container with the keyboard shortcut `[ctrl]+[C]` (probably `[ctrl]+[Z] [Return]` on Windows). -## file access +## File Access {#sec-mounting} The downside of this is that your container is isolated (well... at least to a certain degree). @@ -222,21 +236,22 @@ Suppose you have an R project you would like to work on, stored, for example, in - `/data/git/coding-club` + Then you can link this to your container's home folder via the following command. ```{sh} #| eval: false -# windows syntax, mapping on `D:\` +# Windows syntax, mapping on `D:\data` docker run --rm -p 8787:8787 -v //d/data/git/coding-club:/home/rstudio/coding-club rocker/rstudio -# linux syntax +# Linux syntax docker run --rm -p 8787:8787 -v /data/git/coding-club:/home/rstudio/coding-club rocker/rstudio ``` Again, navigate to , *et voilà*, you can access your project and store files back in your regular folders. -## limitation +## Limitations This is a simple and quick way to run R and RStudio in a container. @@ -244,8 +259,8 @@ However, there are limitations: ::: {.callout-warning} - You have to live with the R packages provided in the container, or otherwise install them each time you access it... -- ... unless you make your container permanent by omitting the `--rm` option. Note that this will cost considerable disk space, will not transfer to other computers (the original purpose of docker), and demand occasional updates. (Still the best choice.) -- Speaking of updates: it is good practice to keep software up to date. Occasionally update or simply re-install your docker image and R packages to get the latest versions. +- ... unless you make your container permanent by omitting the `--rm` option. Note that this will cost considerable disk space, will not transfer to other computers (the original purpose of Docker), and demand occasional updates ([@sec-permanence]). +- Speaking of updates: it is good practice to keep software up to date. Occasionally update or simply re-install your Docker image and R packages to get the latest versions. - You should make sure that the containers are configured correctly and securely. This is especially important with server components which expose your machine to the internet. - There is a performance penalty from using containers: in inaccurate laymans' terms, they emulate (parts of a) "computer" inside your computer. @@ -294,24 +309,81 @@ This is just a single snapshot on a laptop, and putatively `blas`-confounded. Feel free to systematically and scientifically repeat the tests on your own machine. +## Container Permanence: The `--rm` Option {#sec-permanence} + +As briefly touched above, `docker run` comes with the `--rm` option. +This basically enables two separate workflows, i.e. usage paradigms. + + +The first option, which is the default, is that your container is stored on the system permanently. +This counts for the upstream images, which are downloaded upon first invocation of a container. +But also, changes you apply while working in the container are persistently stored until you log in again, using hard drive space of the host. +Images may still be removed by manually running `docker rmi [...]` [@sec-commands]. + + +In contrast, with the second option, `docker run --rm [...]`, ad-hoc changes in the container are removed when the container is finished. +Unless, of course, you mount a local volume with `docker run --rm -v [...]` ([@sec-mounting]). +However, contrary to a rather general intuition, starting a container with `--rm` will not require dependency download a second time. + + +You might want to test this for yourself. +Consider the following series of commands to create a test file in the Docker home directory: + +```{sh} +docker run --name testing_permanence --rm -it docker.io/rocker/r-base +echo "testing permanence." > ~/test.txt +exit +``` + + +Re-connecting is instantateous. +However, + +```{sh} +docker run --name testing_permanence --rm -it docker.io/rocker/r-base bash +cat ~/test.txt +``` + +will return: +> cat: /root/test.txt: No such file or directory + + +This behavior is desired (in the second workflow above): if you start up a fresh environment each time you work in Docker, you **assure that your work pipeline is independent of prior changes on the system**. +Whether this makes sense as a workflow has to be evaluated with respect to with hard drive space requirement, updates, the option to build upon a customized Dockerfile, reproducibility potential. + + +You can "link in" folders for working files (note how you have to specify the full path to `new_home`, and that this container uses the root user by default): + +```{sh} +mkdir new_home +docker run --name testing_permanence -v /data/containers/new_home:/root --rm -it docker.io/rocker/r-base bash +echo "testing permanence." > ~/test.txt +``` + + +Using `--rm` might not be desirable in every case. +However, it is a valuable option for testing, good to have when disk space is sparse, or as a final check before publishing. +Generally, I would consider it good practice to treat containers as volatile, thereby keeping them hostmachine-independent as much as possible. + + # Custom Containers: `build` (Here follows somewhat advanced stuff. Nevertheless, be brave and give it a read!) -## rationale +## Rationale -One advantage of a docker container is its mobility: you can "bring it with you" to other workstations, host it for colleagues or readers, use cloud computing, mostly without having to worry about installation of the components. +One advantage of a Docker container is its mobility: you can "bring it with you" to other workstations, host it for colleagues or readers, use cloud computing, mostly without having to worry about installation of the components. This is a matter of good open science practice. But it also pays off in complicated server setups and distributed computing. -A standardized container from [dockerhub](https://hub.docker.com) is a good start. +A standardized container from [Docker Hub](https://hub.docker.com) is a good start. However, you will probably require personalization. As a use case, imagine you would like to have an RStudio server which comes with relevant inbo packages pre-installed (e.g. [`inbodb`](https://inbo.github.io/inbodb), [`watina`](https://inbo.github.io/watina); *cf.* [contaINBO](https://github.com/inbo/contaINBO)). I will return to this use case below. -To explore the general workings of `docker build`, let's turn to more web-directed tasks for a change. +To explore the general workings of `docker build`, let us turn to more web-directed tasks for a change. :::{.callout-note} @@ -322,12 +394,12 @@ Yet even without a login, you *can* proceed via a terminal, as below. Once you create a `Dockerfile` and build it, it will appear in the GUI. ::: -![build on windows](docker_winbuild.jpg) +![build on Windows](docker_winbuild.jpg) -## init: a `flask` +## Init: a `flask` -[Python `flask`](https://en.wikipedia.org/wiki/Flask_(web_framework)) is a library which allows you to execute python scripts upon web access by users. +[Python `flask`](https://en.wikipedia.org/wiki/Flask_(web_framework)) is a library which allows you to execute Python scripts upon web access by users. For example, you can use flask to gather information a user provides in an html form, then process and store it wherever you like. @@ -338,31 +410,31 @@ I started from the following examples and tutorials to spin up a flask container -> **It all starts with a [dockerfile](https://www.geeksforgeeks.org/what-is-dockerfile).**[^3] +> **It all starts with a [Dockerfile](https://www.geeksforgeeks.org/what-is-dockerfile).**[^3] [^3]: Here I quoted the docs () before having read them. -As you will see, the docker file will give you all the design choices to create your own containers. -I think of the docker file as a script which provides all the instructions to set up your container, starting with `FROM` (i.e. which prior container you build upon) to `RUN`ning any type of commands. -Not *any* type, really: we are working on (mysterious, powerful) linux - don't fret, it's easier than you think! +As you will see, the Docker file will give you all the design choices to create your own containers. +I think of the Docker file as a script which provides all the instructions to set up your container, starting with `FROM` (i.e. which prior container you build upon) to `RUN`ning any type of commands. +Not *any* type, really: we are working on (mysterious, powerful) Linux - don't fret, it is easier than you think! To our `python/flask` example. A list of the official python containers is [available here](https://hub.docker.com/_/python). -Note that you build every container upon the skeleton of an operating system: I chose [alpine linux](https://en.wikipedia.org/wiki/Alpine_Linux). +Note that you build every container upon the skeleton of an operating system: I chose [Alpine Linux](https://en.wikipedia.org/wiki/Alpine_Linux). (It's *en vogue*.) -The dockerfile resides in your working folder (yet it also defines a [`WORKDIR`](https://stackoverflow.com/a/51066379) from within which later commands are executed). +The Dockerfile resides in your working folder (yet it also defines a [`WORKDIR`](https://stackoverflow.com/a/51066379) from within which later commands are executed). -- Navigate to a folder in which you intend to store your container(s), e.g. `cd C:\data\docker` (windows) or `cd /data/docker` (linux). +- Navigate to a folder in which you intend to store your container(s), e.g. `cd C:\data\docker` (Windows) or `cd /data/docker` (Linux). - Create a file called `Dockerfile`: `touch Dockerfile`. -- Edit the file in your favorite text editor (`vim Dockerfile`; windows users probably use "notepad"). +- Edit the file in your favorite text editor (`vim Dockerfile`; Windows users probably use "notepad"). - Paste and optionally modify the content below. ```{} -# Use the official Python image (alpine linux, python 3) +# Use the official Python image (Alpine Linux, Python 3) FROM python:3-alpine # install app dependencies @@ -396,20 +468,24 @@ With the `Dockerfile` and `hello.py` in place, you can build the container [^4]. ```{sh} #| eval: false -# on windows, you are already in an administrator terminal +# on Windows, you are already in an administrator terminal docker build -t my-flask . -# on linux, use sudo if the user is not in the `docker` group. -# sudo docker build -t my-flask . docker build -t my-flask . ``` -[^4]: If you did not install the `docker-buildx` package on linux, you will get a legacy warning. + +[^4]: If you did not install the `buildx` package on Linux, you will read a legacy warning. ![build](docker_build.jpg) +on Linux, you might need to use `sudo` if the user is not in the `docker` group, like so: `sudo docker build -t my-flask`. +Also, some variants can omit the final dot ("."), others require it; the dot is just a Linux shorthand reference to the current working directory (i.e. where your Dockerfile resides). + + + List your available container images via the `docker images` command. You should now see a `python` image, which is the base alpine image we built upon. @@ -429,22 +505,81 @@ Instead, in my case, it was `http://172.17.0.2:8000`. :::{.callout-note} So far, so good. We have used an existing image and added `flask` on top of it. -This works via writing a `Dockerfile` and building an image. +This works via writing a Dockerfile and building an image. ::: -## Multiple Images: `compose` versus `build` +## Multiple Images: `compose` Versus `build` The above works fine for most cases. However, if you want to assemble and combine multiple images, or build on base images from multiple sources, you need a level up. In that case `docker compose` is [the way to go](https://docs.docker.com/compose/gettingstarted). +On Debian, this extra functionality comes with the `docker-compose-plugin`. I did not have the need to try this out, yet, but will return here if that changes. -# Use Case: RStudio with Packages +## Confusion with Version Control and Version Management + +Back to the initial paradigma of reproducibility: +*What exactly is the Open Science aspect of containerization?* + +This question might have led to some confusion, and I would like to throw in a paragraph of clarification. -## rationale + +One purpose of a container may be that you document the exact components of your system environment. +You might start at a base image (e.g. a `rocker`) and add all necessary software via a Dockerfile. +This is good practice, and encouraged: if you publish an analysis, provide a tested container recipe with it. + + +However, this does not solve the problem of version conflicts. +Documenting the versions of packages you used is an extra step, for which [other tools are available](https://doi.org/10.1038/d41586-023-01469-0). + +- Version control such as `git` will track the changes within your own scripts and texts. +- It is good practice to report the exact versions of the software used upon publication ([see here, for example](https://arca-dpss.github.io/manual-open-science/requirements-chapter.html)). + + +The first point, **version control**, is a fantastic tool to enable open science, and avoid personal trouble. +You will [find starting points and help in other tutorials on this website](https://tutorials.inbo.be/tags/git). +The second point, version documentation, is ideally handled by **virtual environments**. +Those exist for R ([renv](https://rstudio.github.io/renv/articles/renv.html)) or Python ([venv](https://docs.python.org/3/library/venv.html)). +Then there is the integration of R, Python and system packages in `conda`-like tools ([e.g. micromamba](https://mamba.readthedocs.io/en/latest)). + +A simple, less effective basic solution to version reproducibility is the manual storage of currently installed versions via `sessionInfo()` in R, or `pip freeze > versions.txt` for Python. + + +You can find Docker images of (recent) older versions of working environments on Docker Hub. +You might think that this is how Docker supports version reproducibility. +However, those will fail to build once the binary dependencies get removed. +Furthermore, Docker itself does not fix the versions of installed system components by default. +Ideally, you want to implement **version control and virtual environments within the container**, to be a "full stack open science developer". + + +## "Because Roots Are Important"[^6]: Rootless Mode {#sec-rootless} + +[^6]: Reference to the film "La Grande Bellezza". + +One of the main criticism about Docker is the necessity to run in a privileged user environment, which is indeed a security issue. +This may refer to the system process requiring elevated privileges, or users in the `docker` system group [effectively having superuser privileges](https://github.com/moby/moby/issues/9976). +Because of the risk of privilege escalation in case of a container breakout, this situation would worsen existing vulnerabilities, [of which there are some](https://snyk.io/blog/top-5-docker-security-vulnerabilities) in [Docker containers](https://www.docker.com/blog/container-security-and-why-it-matters). + + +Historically, Docker could not run "rootless", i.e. without elevated privileges. +[This seems to have changed](https://docs.docker.com/engine/security/rootless), according to Docker. +Some caution is still warranted: the setup procedure requires downloading and running shell scripts (which must be checked); the deamon still builds on `systemd` (*usually* root level); some functionality is limited. + + +On the other hand, there is Podman ([@sec-podman]). +It *used to* require almost the same extra steps as the `docker-rootless` to work rootless, but we found that these requirements are now met per default. +It seems that, at the time of writing, Docker and Podman have identical capabilities in terms of rootless containerization. +The remaining difference is that Podman seems to have more sensible default settings. + +It might therefore be worth considering and exchanging both tools. + + +# Use Case: RStudio With Packages + +## Rationale We should be able to apply the above to modify the `rocker/rstudio` server image for our purpose. @@ -456,7 +591,7 @@ Build recipes for some of the INBO packages you might want to include are collec Contributions are much appreciated! -## dockerfile +## Dockerfile This use case is, in fact, well documented: @@ -495,10 +630,11 @@ RUN R -q -e 'remotes::install_github("inbo/INBOmd", dependencies = TRUE)' ``` It takes some puzzle work to get the dependencies right, e.g. with the `libgit2` dependency (try commenting out that line to get a feeling for build failure). -However, there is hope: (i) the error output is quite instructive (at least for linux persons), (ii) building is incremental, so you can add successively. +However, there is hope: (i) the error output is quite instructive (at least for Linux users), (ii) building is incremental, so you can add successively. It just takes patience. -As a shortcut, consider using `pak` (from R) or `r2u` (apt repository) to implicitly deal with the system dependencies. -Remember which system powers your container (Debian/Ubuntu), find help online, and document your progress. +As a shortcut, consider using `pak` ([from r-lib](https://pak.r-lib.org)) or `r2u` ([apt repository](https://github.com/eddelbuettel/r2u)) to implicitly deal with the system dependencies. +Generally, remember which system powers your container (Debian/Ubuntu), find help online, and document your progress. + :::{.callout-note} Dockerfiles offer some room for optimization. @@ -526,14 +662,15 @@ docker run --rm -p 8787:8787 -e PASSWORD=YOURNEWPASSWORD test-rstudio Another good practice is to extract modifications in scripts and modularly bring them in to be executed upon installation ([see here](https://stackoverflow.com/q/69167940), [and here](https://rocker-project.org/use/extending.html#install2.r)), via `COPY`. -This makes them available for a more refined version control. +This exposes them to a more refined version control on the host machine. As you know, [version control is key!](https://tutorials.inbo.be/tags/git) + But, on that line, how about private repositories? More generally, how would we get (personal) data from our host machine to the container? -## data exchange +## Data Exchange Arguably, among the rather tricky tasks when working with containers is file exchange. There are [several options available](https://forums.docker.com/t/best-practices-for-getting-code-into-a-container-git-clone-vs-copy-vs-data-container/4077): @@ -552,7 +689,8 @@ For the use case of [installing R packages from a private git repo](https://www. In this (and only this) situation, the simple solution is to copy a clone of the repository to the container, and then install it. -The clone should be within the Dockerfile folder. +The `git clone` should reside within the Dockerfile folder. +Then the Dockerfile section can look like the following: ```{} # copy the repo @@ -565,53 +703,59 @@ RUN R -q -e 'install.packages("remotes", dependencies = TRUE)' RUN R -q -e 'install.packages("/opt/my_private_repo", repos = NULL, type = "source", dependencies = TRUE)' ``` -This [seems to be good practice](https://stackoverflow.com/questions/23391839/clone-private-git-repo-with-dockerfile/55761914#55761914), for being simple, secure, and well feasible. +This way of handling private repositories [seems to be good practice](https://stackoverflow.com/questions/23391839/clone-private-git-repo-with-dockerfile/55761914#55761914), for being simple, secure, and generally most feasible. + +The next best alternative would be mounting the `~/.ssh` folder from the host to the container via `-v`. -# useful commands +# Useful Commands {#sec-commands} We have briefly seen `docker --version`, `docker build`, `docker run`, and there are certainly more settings and tweaks on these commands to learn about. -There are other docker commands which might help you out of a temporary misery. -- `docker --help` will list the available commands and options. +There are other Docker commands which might help you out of a temporary misery. + +- First and foremost, `docker --help` will list the available commands and options. - `docker run -it --entrypoint /bin/bash ` or `docker run -it /bin/bash` brings you to the shell of a container; you can update, upgrade, or just mess around. Try `bash` or `bin/sh` as alternatives. - `docker images` will list your images in convenient table format; the `-q` flag returns only IDs. -- `docker inspect ` brings up all the configuration details about a specific image; you can, for example, find out its docker version and network ip. +- `docker inspect ` brings up all the configuration details about a specific image; you can, for example, find out its Docker version and network IP address. - `docker ps` ("print status") will list all running containers; `docker stop $(docker ps -a -q)` will stop them **all**. -- `docker rmi ` will remove an image; `docker rmi $(docker images -q)` will remove **all** your images. Of course, you get to keep the dockerfiles. +- `docker rmi ` will remove an image; `docker rmi $(docker images -q)` will remove **all** your images. The command `docker system prune` provides an interactive cleanup. Of course, you get to keep the Dockerfiles. +- `docker commit` and `docker diff` support the creation and maintenance of snapshots of processed images, which you could keep locally, or upload them to an online storage such as Docker Hub. -There are a gazillion more to choose and use, the [docker docs](https://docs.docker.com/reference/cli/docker) are your go-to source. +There are a gazillion more to choose and use, the [Docker docs](https://docs.docker.com/reference/cli/docker) are your go-to source. One more note on the `ENTRYPOINT`: It defines through which terminal or script the user will access the container. -For example, `/bin/bash`, `/usr/bin/bash` or `bin/sh` are the bash (linux terminal). -Rocker images usually enter into an R console, or monitor an RStudio server. -The flask container above runs a script which hosts your website and python. +For example, `/bin/bash`, `/usr/bin/bash` or `bin/sh` are the bash (Linux terminal on the container). +Rocker images usually enter into an R console, or monitor an RStudio server, via an `/init` script. +The flask container above runs a script which hosts your website and Python. Anything is possible. You can define an entrypoint in the Dockerfile (i.e. set a default), or overwrite it on each `run`. -# Podman +# Podman {#sec-podman} -## purpose +## Purpose -There are alternatives which mitigate some of the docker limitations and disadvantages. +There are alternative approaches to containerization which mitigate some of the Docker limitations and disadvantages. The most prominent one (or rather the only one *I* looked at, sorry) might be `podman`. -A container is a "pod", they run on a "machine", and this FOSS tool helps you to manage them. -The major advantage of podman is that it can be configured to run **"rootless"**, i.e. without administrator rights [^5]. +Vocabulary is marginally different: a container is a "pod", they run on a "machine", and this FOSS tool helps you to manage them. +One major advantage of Podman is that it can be configured to run **"rootless"**, i.e. without administrator rights [^5]. +A second advantage is that it is "all community", full Free and Open Source: it does not promote and "enterprise edition". + [^5]: Daniel J. Walsh (2019): "How does rootless Podman work?" Podman is [well documented](https://podman.io/docs/installation). -Another reliable source as so often is the [arch linux wiki on podman](https://wiki.archlinux.org/title/Podman), no matter which linux you are on. +Another reliable source as so often is the [Arch Linux wiki on Podman](https://wiki.archlinux.org/title/Podman), no matter which Linux you are on. Windows users have succeeded in running Podman through a WSL. :::{.callout-note} -For windows, there is a convenient "Podman Desktop" GUI which guides you through the installation and setup, including WSL instantiation. +For Windows, there is a convenient "Podman Desktop" GUI which guides you through the installation and setup, including WSL instantiation. It is intuitive, transparent (telemetry opt-out), backed by RedHat. Unfortunately, it relies on Windows Subsystem for Linux (WSL), which is not available for INBO users at the moment. @@ -622,11 +766,11 @@ We are working on it. ::: -## setup +## Setup -The instructions below were tested on arch linux, but generalize easily. +The instructions below were tested on Arch Linux, but generalize easily. -I follow the `podman` installation instructions for arch linux, to set up a **rootless container environment**. +I follow the `podman` installation instructions for Arch Linux, to set up a **rootless container environment**. Installation: @@ -640,8 +784,11 @@ The last one, `passt` (providing `pasta`, yum!), is required for rootless networ Optionally, there is `podman-compose`. -Out of the box, Podman will run *only if you are root*. -This has to be changed to go *rootless* ([see also](https://man.archlinux.org/man/podman.1#Rootless_mode)) +Originally, Podman was designed to run *only if you are root*, just like Docker. +However, we experienced that it now comes in *rootless* configuration per default ([further instructions](https://man.archlinux.org/man/podman.1#Rootless_mode)). +Just to be safe, I briefly list the major configuration steps. + + The first step is to confirm a required kernel module: check that `unpriviledged_users_clone` is set to one. ```{sh} @@ -650,7 +797,7 @@ sysctl kernel.unprivileged_userns_clone ``` Then, configure "subordinate user IDs". -There are detail differences in each linux distro; with some luck, your username is already present in these lists: +There are detail differences in each Linux distribution; with some luck, your username is already present in these lists: ```{sh} #| eval: false @@ -681,10 +828,10 @@ And, of course, container storage: make sure you know where your containers are These and more settings are in `/etc/containers/containers.conf` and `/etc/containers/storage.conf`; make sure to scan and edit them to your liking. -## usage +## Usage -You can use images from `docker.io` with podman. -The only difference from docker is the explicit mention of the source, `docker.io`. +You can use images from `docker.io` with Podman. +The only difference from Docker is the explicit mention of the source, `docker.io`. For example: ```{sh} @@ -696,41 +843,58 @@ exit ``` -## podman rocker +## Limitations + +Note that at least some `docker.io` images will not work: I actually experienced issues with the "rootless Docker image": + +```{sh} +#| eval: false +# podman run --rm -it docker.io/docker:25.0-dind-rootless +``` + +However, it is logical that that one does not work: it builds a (root-level, [@sec-rootless]) Docker which is supposed to contain a rootless Docker. +The outer Docker layer requires root, which Podman cannot provide. + +This is a logical case; if you understand it, congratulations: you have achieved a basic understanding of containers and user privileges :) +There might be yet other images which do not work by default and require additional tinkering in Podman, due to its altered design. +Most use cases are covered, for example a containerized R environment. + -From here, **podman is a full drop-in replacement for docker**; just that you are not forced to grant host system root privileges to containers. +## Podman Rocker -Any `Dockerfile` should work, with the mentioned mini-adjustment to `FROM`. -And you can use any docker image; `docker.io/rocker/rstudio` [is available](https://rocker-project.org/use/rootless-podman.html) (don't forget to specify the port). -You may even write `docker` in the terminal: it will alias to `podman` (via the `podman-docker` package on linux). +From here, **Podman is a full drop-in replacement for Docker**; just that you are not forced to grant host system root privileges to containers. + +Any Dockerfile should work, with the mentioned mini-adjustment to `FROM`. +And you can use any Docker image; `docker.io/rocker/rstudio` [is available](https://rocker-project.org/use/rootless-podman.html) (don't forget to specify the port). +You may even write `docker` in the terminal: it will alias to `podman` (via the `podman-docker` package on Linux, or an alias). ```{sh} #| eval: false podman run --rm -p 8787:8787 -e PASSWORD=YOURNEWPASSWORD -v /data/git/coding-club:/root/coding-club docker.io/rocker/rstudio ``` -There is another subtle change: the default user to login to `rstudio` is not `rstudio`, but `root`, because you need to have root rights on the container. +There is another subtle change: the default user to login to `rstudio` is not `rstudio`, but `root`, because for some reason RStudio needs to have root rights on the container. You had those before anyways, but now they are confined to within the pod. - +There might be workarounds, which I will explore. :::{.callout-note} To summarize the Podman experience: -- **Docker's Dockerfiles like the one above will build as with docker.** +- **Docker's Dockerfiles like the one above will build equally well on Podman, except for micro-adjustments compared to Docker.** - You can even stick to the `docker` commands thanks to the `podman-docker` package. -- There is podman desktop, if you like clicking. -- Podman is everything docker is, just better. +- There is Podman Desktop, if you like clicking. +- Podman is everything Docker is, just minimally different, and more secure, full FOSS. ::: -Kudos to the podman devs! +Kudos to the Podman devs! # Summary -In this tutorial, I demonstrated the basics of containerization with docker and podman. -There are convenient GUI apps, and sophisticated terminal commands, the latter is much more powerful. +In this tutorial, I demonstrated the basics of containerization with Docker and Podman. +There are convenient GUI apps, and sophisticated terminal commands, the latter are much more powerful. Personally, I find the concept of containerization fascinating, and was surprised how simple and useful of a trick it is. @@ -745,13 +909,4 @@ I hope you find this overview useful, nevertheless. Thank you for reading! -# TODO Review - -- Add text on @FV question: "Generally, I think it is good practice to treat containers as volatile to keep them hostmachine-independent." - -- https://github.com/inbo/tutorials/pull/356#discussion_r1949162627 -- what does containerd do? https://github.com/inbo/tutorials/pull/356#discussion_r1949167299 - -- https://github.com/inbo/tutorials/pull/356#discussion_r1949270329 -- podman --box "The requirements below seem to be met out of the box in an Ubuntu environment. Then am I right that the 'out of the box' statement here does not hold?" From 4a94915ce9f547fe8bec3c0dc93f0aac140cad89 Mon Sep 17 00:00:00 2001 From: Falk Mielke Date: Tue, 11 Feb 2025 15:43:56 +0100 Subject: [PATCH 17/51] docker: review changes to markdown --- content/tutorials/development_docker/index.md | 421 ++++++++++++------ .../tutorials/development_docker/index.qmd | 5 +- .../development_docker/notes_qmd.txt | 2 +- 3 files changed, 284 insertions(+), 144 deletions(-) diff --git a/content/tutorials/development_docker/index.md b/content/tutorials/development_docker/index.md index 872b8f526..753b86e52 100644 --- a/content/tutorials/development_docker/index.md +++ b/content/tutorials/development_docker/index.md @@ -1,7 +1,7 @@ --- -title: "Building Containers with Docker and Podman" -description: "Introduction to containerization and the practical use of docker-like tools." -date: "2025-02-04" +title: Building Containers with Docker and Podman +description: Introduction to containerization and the practical use of Docker-like tools. +date: "2025-02-11" authors: [falkmielke] categories: ["development", "open science"] tags: ["development", "open science"] @@ -25,23 +25,24 @@ output: --- + You might have heard about "containerization" with [**Docker**](https://docs.docker.com). Docker has been labeled "the *Holy Grail* of reproducibility" in [The Open Science Manual by Claudio Zandonella Callegher and Davide Massidda (2023)](https://arca-dpss.github.io/manual-open-science/docker-chapter.html). Although containerization is an immensely useful Open Science tool worth striving for, the *Holy Grail* is an inaccurate metaphor, because -(i) Docker is easy to find and accessible; -(ii) Docker alone does not make a reproducible workflow; -(iii) Docker has issues, some of them mitigated by "Podman". +(i) Unlike The Grail, Docker is easy to find and accessible. +(ii) Docker alone does not make a reproducible workflow; some of its capability is occasionally confused with package version management. +(iii) Docker has issues, some of them mitigated by configuration adjustment or switching to "Podman". In this tutorial, I demonstrate step-by-step how to set up and deploy a **custom container** with Docker or Podman. This is intended to be a rather general test case, serving for later configuration of more specific container solutions. For example, you will learn how to spin up an existing `rocker/rstudio` container, and even modify it with additional system components and libraries. -I follow other tutorials available online, and try to capture their essence for an INBO-context. +I follow other tutorials available online, and try to capture their essence for an INBO context. Hence, this is just an assembly of other tutorials, with references - no original ideas to be found below, but nevertheless some guidance. On Windows, installation, configuration, and management of containers runs via the `docker desktop` app. -However, this tutorial also covers (and in fact focuses on) the terminal-centered steps to be executed on a linux computer or within a WSL. +However, this tutorial also covers (and in fact focuses on) the terminal-centered steps to be executed on a Linux computer or within a WSL. -I also present **Podman** as a full replacement for docker, and recommend to give it a try. +I also present **Podman** as a full replacement for Docker, and recommend to give it a try. Generally, if you are an INBO user, it is recommended to contact and involve your ICT department for support with the setup. @@ -62,66 +63,66 @@ The installation procedure [is documented here](https://docs.docker.com/install) Docker comes with the *Docker Desktop* app. That app by itself is trivial and hardly worth a tutorial. -## windows +## Microsoft Windows -Navigate to [the download site for docker on windows](https://docs.docker.com/desktop/setup/install/windows-install). +Navigate to [the download site for Docker on Windows](https://docs.docker.com/desktop/setup/install/windows-install). Download the "App" (newspeak for: graphical user interface to a software tool). Install it. -*Note for INBO users:* you should select Hyper-V, instead of WSL, against recommendation (WSL is discouraged/disabled by enterprise settings; however, ICT might help). +*Note for INBO users:* you might choose to select Hyper-V, instead of WSL, against Docker's recommendation (WSL is not working in our enterprise environment; however, we are trying to improve and ICT might help). You probably do not have admin rights, which is good. To re-iterate: **ask our friendly ICT helpdesk for support right away.**
    desktop app - +
    -Side rant collection: - -- Installation of Docker Desktop does not allow you to specify an install path (might have missed it). -- `&'C:\Program Files\Docker\Docker\Docker Desktop.exe'` only runs with admin privileges. -- It is bloated to more than 2GB (compared to the installed size of `docker` and `docker-buildx` on linux \<200MB; What A GUI!). -- The first thing it does is prompt you for an unnecessary login (smells like telemetry). -- The second thing it does is annoy you with a survey (explicit telemetry). -- It is full of uninvited ads ("Docker Build Cloud", "To access the latest features, sign in."/don't!). - -If you want some dignity, learn and use the terminal commands below. -I label them "linux", but they are, in fact, OS-agnostic. - -On linux, that same `docker-desktop` [is available for installation](https://docs.docker.com/desktop/setup/install/linux). -But, why would you? +Using a convenient app is possible with "Docker Desktop". +On Windows, you can download and install it with administrator rights. +On Linux, that same `docker-desktop` [is available for installation](https://docs.docker.com/desktop/setup/install/linux). +Yet while automating some aspects, the app is not entirely transparent on telemetry and advertisement; some anti-features are included (e.g. required login). +This is unfortunate, because it makes the app less open for more privacy-concerned users. -## terminal +The terminal aspect of Docker is entirely free and open source, and universally accessible. +This is why the rest of this tutorial will focus on terminal access. -On the windows terminal or linux shell, you can install `docker` as a terminal tool. +## Terminal +On the Windows terminal or Linux shell, you can install `docker` as a terminal tool. {{% callout note %}} -On windows, this comes bundled with the App; the steps below are not necessary. +On Windows, this comes bundled with the App[^1]; the steps below are not necessary. However, note that you need to run a terminal *as administrator*. {{% /callout %}} +More info on the debian installation [can be found here](https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository). +The procedure requires you to add an extra repository, [some caution is warranted](https://wiki.debian.org/DontBreakDebian). + ``` sh -sudo apt update && sudo apt install docker docker-buildx # debian-based -# sudo pacman -Sy docker docker-buildx # arch linux +sudo apt update && sudo apt install docker-ce docker-buildx-plugin # debian-based +# sudo pacman -Sy docker docker-buildx # Arch Linux ``` -For users to be able to use docker, they must be in the "docker" group. +As you will notice, this installs a "CE" version of Docker, `docker-ce`. +CE stands for "community edition", as opposed to "enterprise edition" ([cf. here](https://www.geeksforgeeks.org/docker-community-edition-vs-enterprise-edition)). +Many features which you would take for granted in this kind of software (security, consistency, scalability) are handled differently in the two editions, thus it is worth knowing the difference and considering the alternatives. + +For users to be able to use Docker, they must be in the "docker" group. (Insert your username at ``.) ``` sh sudo usermod -a -G docker ``` -For this change to take effect, log off and log in again and restart the docker service if it was running. +For this change to take effect, log off and log in again and restart the Docker service if it was running. Containers are managed by a system task ("service" and "socket") which need to be started. -Most likely, your linux uses `systemd`. +Most likely, your Linux uses `systemd`. Your system can start and stop that service automatically, by using `systemctl enable <...>`. However, due to [diverse](https://docs.docker.com/engine/security) [security](https://github.com/moby/moby/issues/9976) [pitfalls](https://snyk.io/blog/top-ten-most-popular-docker-images-each-contain-at-least-30-vulnerabilities), it is good practice to **not keep it enabled** permanently on your system. -On a `systemd` system, you can start and stop docker on demand via the following commands (those will ask you for `sudo` authentification if necessary). +On a `systemd` system, you can start and stop Docker on demand via the following commands (those will ask you for `sudo` authentification if necessary). ``` sh systemctl start docker @@ -132,7 +133,9 @@ systemctl stop docker.socket systemctl stop docker.service ``` -You can check the docker installation by confirming the version at which the service is running. +For aficionados: docker actually runs multiple services: the docker service, the docker socket, and the [container daemon](https://www.docker.com/blog/containerd-vs-docker) `containerd`. + +You can check the Docker installation by confirming the version at which the service is running. ``` sh docker --version @@ -142,7 +145,7 @@ Congratulations: now the fun starts! # Existing Containers: `run` -## rationale +## Rationale Docker is about assembling and working in containers. "Living" in containers. @@ -151,11 +154,11 @@ Let's call it a fancy caravan. The good thing is that you get to pick a general design and to choose all details of the interior. The best thing: if you feel like you do not have the cash, time, or talent to build your own home, you can *of course* use someone else's. -There are a gazillion **docker images available for you** on [docker hub](https://hub.docker.com). +There are a gazillion **Docker images available for you** on [Docker Hub](https://hub.docker.com). -## example +## Example -For example[^1], there are docker images with [rstudio server](https://posit.co/download/rstudio-server) pre-installed: +For example[^2], there are Docker images with [rstudio server](https://posit.co/download/rstudio-server) pre-installed: - @@ -165,67 +168,71 @@ If you control containers via the desktop app, simply search, pull, and run it.
    desktop app: run - +
    -Otherwise, execute the following script (*windows*: use an administrator terminal). -If it does not find the resources locally, docker will download and extract the image from dockerhub[^2]. +Otherwise, execute the following script (*Windows*: use an administrator terminal). +If it does not find the resources locally, Docker will download and extract the image from Docker Hub[^3]. ``` sh docker run --rm -p 8787:8787 -e PASSWORD=YOURNEWPASSWORD rocker/rstudio ``` -- The `--rm` flag makes the docker image non-permanent, i.e. disk space will be freed after you close the container. +- The `--rm` flag makes the Docker image non-permanent, i.e. disk space will be freed after you close the container (Section 2.5). - The port specified at `-p` is the one you use to access this local container server (the `-p` actually maps host- and container ports). You have to specify it explicitly, otherwise the host system will not let you pass (`:gandalf-meme:`). - The `-e` flag allows you to specify a password, but if you do not specify one, this container will provide a random password upon startup (read the terminal output).
    run - +
    You are now running (`run`) a `rocker/rstudio` server instance on your `localhost`, i.e. your computer. You can access it via a browser, going to , with the username `rstudio` and your chosen password. -You can shut down the container with the keyboard shortcut `[ctrl]+[C]` (probably `[ctrl]+[Z] [Return]` on windows). +You can shut down the container with the keyboard shortcut `[ctrl]+[C]` (probably `[ctrl]+[Z] [Return]` on Windows). + -## file access +## File Access The downside of this is that your container is isolated (well... at least to a certain degree). -To store files locally, i.e. on the host machine, without storing the bloated container, you will have to map a virtual path on the container to a local drive on your computer. -(Linux people will be familiar with the concept of "mounting" and "linking" storage locations.) +Images can take up considerable storage space. +Storing files locally, i.e. on the host machine, without storing an unneccessarily filled container, might be a good strategy. +This can be achieved by mapping a virtual path on the container to a local drive on your computer. +(Linux users will be familiar with the concept of "mounting" and "linking" storage locations.) +Note that the technique is equally relevant when running the container locally, hence not exclusive to remote hosts. -Docker `run` brings the `-v` flag for this. +Docker `run` brings the `-v` flag for mounting volumes. Suppose you have an R project you would like to work on, stored, for example, in this path: - `/data/git/coding-club` -Then you can link this to your containers' home folder via the following command. +Then you can link this to your container's home folder via the following command. ``` sh -# windows syntax, mapping on `D:\` +# Windows syntax, mapping on `D:\data` docker run --rm -p 8787:8787 -v //d/data/git/coding-club:/home/rstudio/coding-club rocker/rstudio -# linux syntax +# Linux syntax docker run --rm -p 8787:8787 -v /data/git/coding-club:/home/rstudio/coding-club rocker/rstudio ``` Again, navigate to , *et voilà*, you can access your project and store files back in your regular folders. -## limitation +## Limitations This is a simple and quick way to run R and RStudio in a container. However, there are limitations: -> **Warning** -> -> - You have to live with the R packages provided in the container, or otherwise install them each time you access it... -> - ... unless you make you container permanent by omitting the `--rm` option. Note that this will cost considerable disk space, will not transfer to other computers (the original purpose of docker), and demand occasional updates. (Still the best choice.) -> - Speaking of updates: it is good practice to keep software up to date. Occasionally update or simply re-install your docker image and R packages to get the latest versions. -> - You should make sure that the containers are configured correctly and securely. This is especially important with server components which expose your machine to the internet. -> - There is a performance penalty from using containers: in inaccurate laymans' terms, they emulate (parts of a) "computer" inside your computer. +{{% callout emphasize %}} +- You have to live with the R packages provided in the container, or otherwise install them each time you access it... +- ... unless you make your container permanent by omitting the `--rm` option. Note that this will cost considerable disk space, will not transfer to other computers (the original purpose of Docker), and demand occasional updates (Section 2.5). +- Speaking of updates: it is good practice to keep software up to date. Occasionally update or simply re-install your Docker image and R packages to get the latest versions. +- You should make sure that the containers are configured correctly and securely. This is especially important with server components which expose your machine to the internet. +- There is a performance penalty from using containers: in inaccurate laymans' terms, they emulate (parts of a) "computer" inside your computer. +{{% /callout %}} On the performance issue: I attempted this on my local laptop with matrix multiplication. @@ -253,29 +260,80 @@ In the container: test replications elapsed relative user.self sys.self user.child sys.child 1 test() 100 26.076 1 102.494 153.89 0 0 -Now, the *good news* is that the difference is not by orders of magnitude, which indicates that the chosen rocker image integrated the same good `blas` variant I installed on my computer (`blas-openblas`). +Now, the *good news* is that the difference is not by orders of magnitude. +This indicates that the chosen rocker image integrated the more performant `blas` variant which is [recommended](https://pbs-assess.github.io/sdmTMB/index.html#installation) [elsewhere](https://prdm0.github.io/ropenblas/#installation) (`blas-openblas`). -The *bad news* is that we still still a hit of `-20%` performance, which is considerable. +The *bad news* is that we still a hit of `-20%` performance, which is considerable. This is just a single snapshot on a laptop, and putatively `blas`-confounded. Feel free to systematically and scientifically repeat the tests on your own machine. + +## Container Permanence: The `--rm` Option + +As briefly touched above, `docker run` comes with the `--rm` option. +This basically enables two separate workflows, i.e. usage paradigms. + +The first option, which is the default, is that your container is stored on the system permanently. +This counts for the upstream images, which are downloaded upon first invocation of a container. +But also, changes you apply while working in the container are persistently stored until you log in again, using hard drive space of the host. +Images may still be removed by manually running `docker rmi [...]` Section 5. + +In contrast, with the second option, `docker run --rm [...]`, ad-hoc changes in the container are removed when the container is finished. +Unless, of course, you mount a local volume with `docker run --rm -v [...]` (Section 2.3). +However, contrary to a rather general intuition, starting a container with `--rm` will not require dependency download a second time. + +You might want to test this for yourself. +Consider the following series of commands to create a test file in the Docker home directory: + +``` sh +docker run --name testing_permanence --rm -it docker.io/rocker/r-base +echo "testing permanence." > ~/test.txt +exit +``` + +Re-connecting is instantateous. +However, + +``` sh +docker run --name testing_permanence --rm -it docker.io/rocker/r-base bash +cat ~/test.txt +``` + +will return: +\> cat: /root/test.txt: No such file or directory + +This behavior is desired (in the second workflow above): if you start up a fresh environment each time you work in Docker, you **assure that your work pipeline is independent of prior changes on the system**. +Whether this makes sense as a workflow has to be evaluated with respect to with hard drive space requirement, updates, the option to build upon a customized Dockerfile, reproducibility potential. + +You can "link in" folders for working files (note how you have to specify the full path to `new_home`, and that this container uses the root user by default): + +``` sh +mkdir new_home +docker run --name testing_permanence -v /data/containers/new_home:/root --rm -it docker.io/rocker/r-base bash +echo "testing permanence." > ~/test.txt +``` + +Using `--rm` might not be desirable in every case. +However, it is a valuable option for testing, good to have when disk space is sparse, or as a final check before publishing. +Generally, I would consider it good practice to treat containers as volatile, thereby keeping them hostmachine-independent as much as possible. + # Custom Containers: `build` (Here follows somewhat advanced stuff. Nevertheless, be brave and give it a read!) -## rationale +## Rationale -One advantage of a docker container is its mobility: you can "bring it with you" to other workstations, host it for colleagues or readers, use cloud computing, mostly without having to worry about installation of the components. +One advantage of a Docker container is its mobility: you can "bring it with you" to other workstations, host it for colleagues or readers, use cloud computing, mostly without having to worry about installation of the components. This is a matter of good open science practice. But it also pays off in complicated server setups and distributed computing. -A standardized container from [dockerhub](https://hub.docker.com) is a good start. +A standardized container from [Docker Hub](https://hub.docker.com) is a good start. However, you will probably require personalization. As a use case, imagine you would like to have an RStudio server which comes with relevant inbo packages pre-installed (e.g. [`inbodb`](https://inbo.github.io/inbodb), [`watina`](https://inbo.github.io/watina); *cf.* [contaINBO](https://github.com/inbo/contaINBO)). I will return to this use case below. -To explore the general workings of `docker build`, let's turn to more web-directed tasks for a change. +To explore the general workings of `docker build`, let us turn to more web-directed tasks for a change. {{% callout note %}} With Docker Desktop, you have the graphical interface for "builds". @@ -286,13 +344,13 @@ Once you create a `Dockerfile` and build it, it will appear in the GUI. {{% /callout %}}
    -build on windows - +build on Windows +
    -## init: a `flask` +## Init: a `flask` -[Python `flask`](https://en.wikipedia.org/wiki/Flask_(web_framework)) is a library which allows you to execute python scripts upon web access by users. +[Python `flask`](https://en.wikipedia.org/wiki/Flask_(web_framework)) is a library which allows you to execute Python scripts upon web access by users. For example, you can use flask to gather information a user provides in an html form, then process and store it wherever you like. I started from the following examples and tutorials to spin up a flask container, but provide modifications and comments on the steps. @@ -300,27 +358,27 @@ I started from the following examples and tutorials to spin up a flask container - - -> **It all starts with a [dockerfile](https://www.geeksforgeeks.org/what-is-dockerfile).**[^3] +> **It all starts with a [Dockerfile](https://www.geeksforgeeks.org/what-is-dockerfile).**[^4] -As you will see, the docker file will give you all the design choices to create your own containers. -I think of the docker file as a script which provides all the instructions to set up your container, starting with `FROM` (i.e. which prior container you build upon) to `RUN`ning any type of commands. -Not *any* type, really: we are working on (mysterious, powerful) linux - don't fret, it's easier than you think! +As you will see, the Docker file will give you all the design choices to create your own containers. +I think of the Docker file as a script which provides all the instructions to set up your container, starting with `FROM` (i.e. which prior container you build upon) to `RUN`ning any type of commands. +Not *any* type, really: we are working on (mysterious, powerful) Linux - don't fret, it is easier than you think! To our `python/flask` example. A list of the official python containers is [available here](https://hub.docker.com/_/python). -Note that you build every container upon the skeleton of an operating system: I chose [alpine linux](https://en.wikipedia.org/wiki/Alpine_Linux). +Note that you build every container upon the skeleton of an operating system: I chose [Alpine Linux](https://en.wikipedia.org/wiki/Alpine_Linux). (It's *en vogue*.) -The dockerfile resides in your working folder (yet it also defines a [`WORKDIR`](https://stackoverflow.com/a/51066379) from within which later commands are executed). +The Dockerfile resides in your working folder (yet it also defines a [`WORKDIR`](https://stackoverflow.com/a/51066379) from within which later commands are executed). -- Navigate to a folder in which you intend to store your container(s), e.g. `cd C:\data\docker` (windows) or `cd /data/docker` (linux). +- Navigate to a folder in which you intend to store your container(s), e.g. `cd C:\data\docker` (Windows) or `cd /data/docker` (Linux). - Create a file called `Dockerfile`: `touch Dockerfile`. -- Edit the file in your favorite text editor (`vim Dockerfile`; windows people probably use "notepad"). +- Edit the file in your favorite text editor (`vim Dockerfile`; Windows users probably use "notepad"). - Paste and optionally modify the content below. - # Use the official Python image (alpine linux, python 3) + # Use the official Python image (Alpine Linux, Python 3) FROM python:3-alpine # install app dependencies @@ -346,21 +404,23 @@ def hello(): return "Hello, INBO!" ``` -With the `Dockerfile` and `hello.py` in place, you can build the container [^4]. +With the `Dockerfile` and `hello.py` in place, you can build the container [^5]. ``` sh -# on windows, you are already in an administrator terminal +# on Windows, you are already in an administrator terminal docker build -t my-flask . -# on linux, use sudo if you like or go to "Podman" (rootless) -sudo docker build -t my-flask . +docker build -t my-flask . ```
    build - +
    +on Linux, you might need to use `sudo` if the user is not in the `docker` group, like so: `sudo docker build -t my-flask`. +Also, some variants can omit the final dot ("."), others require it; the dot is just a Linux shorthand reference to the current working directory (i.e. where your Dockerfile resides). + List your available container images via the `docker images` command. You should now see a `python` image, which is the base alpine image we built upon. @@ -378,20 +438,70 @@ Instead, in my case, it was `http://172.17.0.2:8000`. {{% callout note %}} So far, so good. We have used an existing image and added `flask` on top of it. -This works via writing a `Dockerfile` and building an image. +This works via writing a Dockerfile and building an image. {{% /callout %}} -## Multiple Images: `compose` versus `build` +## Multiple Images: `compose` Versus `build` The above works fine for most cases. However, if you want to assemble and combine multiple images, or build on base images from multiple sources, you need a level up. In that case `docker compose` is [the way to go](https://docs.docker.com/compose/gettingstarted). +On Debian, this extra functionality comes with the `docker-compose-plugin`. I did not have the need to try this out, yet, but will return here if that changes. -# Use Case: RStudio with Packages +## Confusion with Version Control and Version Management + +Back to the initial paradigma of reproducibility: +*What exactly is the Open Science aspect of containerization?* + +This question might have led to some confusion, and I would like to throw in a paragraph of clarification. + +One purpose of a container may be that you document the exact components of your system environment. +You might start at a base image (e.g. a `rocker`) and add all necessary software via a Dockerfile. +This is good practice, and encouraged: if you publish an analysis, provide a tested container recipe with it. + +However, this does not solve the problem of version conflicts. +Documenting the versions of packages you used is an extra step, for which [other tools are available](https://doi.org/10.1038/d41586-023-01469-0). + +- Version control such as `git` will track the changes within your own scripts and texts. +- It is good practice to report the exact versions of the software used upon publication ([see here, for example](https://arca-dpss.github.io/manual-open-science/requirements-chapter.html)). + +The first point, **version control**, is a fantastic tool to enable open science, and avoid personal trouble. +You will [find starting points and help in other tutorials on this website](https://tutorials.inbo.be/tags/git). +The second point, version documentation, is ideally handled by **virtual environments**. +Those exist for R ([renv](https://rstudio.github.io/renv/articles/renv.html)) or Python ([venv](https://docs.python.org/3/library/venv.html)). +Then there is the integration of R, Python and system packages in `conda`-like tools ([e.g. micromamba](https://mamba.readthedocs.io/en/latest)). + +A simple, less effective basic solution to version reproducibility is the manual storage of currently installed versions via `sessionInfo()` in R, or `pip freeze > versions.txt` for Python. + +You can find Docker images of (recent) older versions of working environments on Docker Hub. +You might think that this is how Docker supports version reproducibility. +However, those will fail to build once the binary dependencies get removed. +Furthermore, Docker itself does not fix the versions of installed system components by default. +Ideally, you want to implement **version control and virtual environments within the container**, to be a "full stack open science developer". + + +## "Because Roots Are Important"[^6]: Rootless Mode + +One of the main criticism about Docker is the necessity to run in a privileged user environment, which is indeed a security issue. +This may refer to the system process requiring elevated privileges, or users in the `docker` system group [effectively having superuser privileges](https://github.com/moby/moby/issues/9976). +Because of the risk of privilege escalation in case of a container breakout, this situation would worsen existing vulnerabilities, [of which there are some](https://snyk.io/blog/top-5-docker-security-vulnerabilities) in [Docker containers](https://www.docker.com/blog/container-security-and-why-it-matters). + +Historically, Docker could not run "rootless", i.e. without elevated privileges. +[This seems to have changed](https://docs.docker.com/engine/security/rootless), according to Docker. +Some caution is still warranted: the setup procedure requires downloading and running shell scripts (which must be checked); the deamon still builds on `systemd` (*usually* root level); some functionality is limited. + +On the other hand, there is Podman (Section 6). +It *used to* require almost the same extra steps as the `docker-rootless` to work rootless, but we found that these requirements are now met per default. +It seems that, at the time of writing, Docker and Podman have identical capabilities in terms of rootless containerization. +The remaining difference is that Podman seems to have more sensible default settings. -## rationale +It might therefore be worth considering and exchanging both tools. + +# Use Case: RStudio With Packages + +## Rationale We should be able to apply the above to modify the `rocker/rstudio` server image for our purpose. @@ -401,7 +511,7 @@ Build recipes for some of the INBO packages you might want to include are collec Contributions are much appreciated! -## dockerfile +## Dockerfile This use case is, in fact, well documented: @@ -437,9 +547,10 @@ Note the syntax in `FROM`: it is `rocker/:`. RUN R -q -e 'remotes::install_github("inbo/INBOmd", dependencies = TRUE)' It takes some puzzle work to get the dependencies right, e.g. with the `libgit2` dependency (try commenting out that line to get a feeling for build failure). -However, there is hope: (i) the error output is quite instructive (at least for linux persons), (ii) building is incremental, so you can add successively. +However, there is hope: (i) the error output is quite instructive (at least for Linux users), (ii) building is incremental, so you can add successively. It just takes patience. -Remember which system powers your container (Debian/Ubuntu), find help online, and document your progress. +As a shortcut, consider using `pak` ([from r-lib](https://pak.r-lib.org)) or `r2u` ([apt repository](https://github.com/eddelbuettel/r2u)) to implicitly deal with the system dependencies. +Generally, remember which system powers your container (Debian/Ubuntu), find help online, and document your progress. {{% callout note %}} Dockerfiles offer some room for optimization. @@ -462,13 +573,13 @@ docker run --rm -p 8787:8787 -e PASSWORD=YOURNEWPASSWORD test-rstudio ``` Another good practice is to extract modifications in scripts and modularly bring them in to be executed upon installation ([see here](https://stackoverflow.com/q/69167940), [and here](https://rocker-project.org/use/extending.html#install2.r)), via `COPY`. -This makes them available for a more refined version control. +This exposes them to a more refined version control on the host machine. As you know, [version control is key!](https://tutorials.inbo.be/tags/git) But, on that line, how about private repositories? More generally, how would we get (personal) data from our host machine to the container? -## data exchange +## Data Exchange Arguably, among the rather tricky tasks when working with containers is file exchange. There are [several options available](https://forums.docker.com/t/best-practices-for-getting-code-into-a-container-git-clone-vs-copy-vs-data-container/4077): @@ -485,7 +596,8 @@ For the use case of [installing R packages from a private git repo](https://www. - On the other hand, updates can often happen by re-building. In this (and only this) situation, the simple solution is to copy a clone of the repository to the container, and then install it. -The clone should be within the Dockerfile folder. +The `git clone` should reside within the Dockerfile folder. +Then the Dockerfile section can look like the following: # copy the repo COPY my_private_repo /opt/my_private_repo @@ -496,49 +608,53 @@ The clone should be within the Dockerfile folder. # install package from folder RUN R -q -e 'install.packages("/opt/my_private_repo", repos = NULL, type = "source", dependencies = TRUE)' -This [seems to be good practice](https://stackoverflow.com/questions/23391839/clone-private-git-repo-with-dockerfile/55761914#55761914), for being simple, secure, and well feasible. +This way of handling private repositories [seems to be good practice](https://stackoverflow.com/questions/23391839/clone-private-git-repo-with-dockerfile/55761914#55761914), for being simple, secure, and generally most feasible. + +The next best alternative would be mounting the `~/.ssh` folder from the host to the container via `-v`. + -# useful commands +# Useful Commands We have briefly seen `docker --version`, `docker build`, `docker run`, and there are certainly more settings and tweaks on these commands to learn about. -There are other docker commands which might help you out of a temporary misery. +There are other Docker commands which might help you out of a temporary misery. +- First and foremost, `docker --help` will list the available commands and options. - `docker run -it --entrypoint /bin/bash ` or `docker run -it /bin/bash` brings you to the shell of a container; you can update, upgrade, or just mess around. Try `bash` or `bin/sh` as alternatives. - `docker images` will list your images in convenient table format; the `-q` flag returns only IDs. -- `docker inspect ` brings up all the configuration details about a specific image; you can, for example, find out its docker version and network ip. +- `docker inspect ` brings up all the configuration details about a specific image; you can, for example, find out its Docker version and network IP address. - `docker ps` ("print status") will list all running containers; `docker stop $(docker ps -a -q)` will stop them **all**. -- `docker rmi ` will remove an image; `docker rmi $(docker images -q)` will remove **all** your images. Of course, you get to keep the dockerfiles. +- `docker rmi ` will remove an image; `docker rmi $(docker images -q)` will remove **all** your images. The command `docker system prune` provides an interactive cleanup. Of course, you get to keep the Dockerfiles. +- `docker commit` and `docker diff` support the creation and maintenance of snapshots of processed images, which you could keep locally, or upload them to an online storage such as Docker Hub. -There are a gazillion more to choose and use, the [docker docs](https://docs.docker.com/reference/cli/docker) are your go-to source. +There are a gazillion more to choose and use, the [Docker docs](https://docs.docker.com/reference/cli/docker) are your go-to source. One more note on the `ENTRYPOINT`: It defines through which terminal or script the user will access the container. -For example, `/bin/bash`, `/usr/bin/bash` or `bin/sh` are the bash (linux terminal). -Rocker images usually enter into an R console, or monitor an RStudio server. -The flask container above runs a script which hosts your website and python. +For example, `/bin/bash`, `/usr/bin/bash` or `bin/sh` are the bash (Linux terminal on the container). +Rocker images usually enter into an R console, or monitor an RStudio server, via an `/init` script. +The flask container above runs a script which hosts your website and Python. Anything is possible. You can define an entrypoint in the Dockerfile (i.e. set a default), or overwrite it on each `run`. -# Podman -## purpose +# Podman -Whales don't really carry "containers", and "images" are better hung on walls. -Don't fall for the docker marketing! +## Purpose -There are alternatives which mitigate some of the docker limitations and disadvantages. +There are alternative approaches to containerization which mitigate some of the Docker limitations and disadvantages. The most prominent one (or rather the only one *I* looked at, sorry) might be `podman`. -A container is a "pod", they run on a "machine", and this FOSS tool helps you to manage them. -The major advantage of podman is that it can be configured to run **"rootless"**, i.e. without administrator rights [^5]. +Vocabulary is marginally different: a container is a "pod", they run on a "machine", and this FOSS tool helps you to manage them. +One major advantage of Podman is that it can be configured to run **"rootless"**, i.e. without administrator rights [^7]. +A second advantage is that it is "all community", full Free and Open Source: it does not promote and "enterprise edition". Podman is [well documented](https://podman.io/docs/installation). -Another reliable source as so often is the [arch linux wiki on podman](https://wiki.archlinux.org/title/Podman), no matter which linux you are on. -On windows, people have succeeded in running Podman through a WSL. +Another reliable source as so often is the [Arch Linux wiki on Podman](https://wiki.archlinux.org/title/Podman), no matter which Linux you are on. +Windows users have succeeded in running Podman through a WSL. {{% callout note %}} -For windows, there is a convenient "Podman Desktop" GUI which guides you through the installation and setup, including WSL instantiation. +For Windows, there is a convenient "Podman Desktop" GUI which guides you through the installation and setup, including WSL instantiation. It is intuitive, transparent (telemetry opt-out), backed by RedHat. Unfortunately, it relies on Windows Subsystem for Linux (WSL), which is not available for INBO users at the moment. @@ -548,11 +664,11 @@ Unfortunately, it relies on Windows Subsystem for Linux (WSL), which is not avai We are working on it. {{% /callout %}} -## setup +## Setup -The instructions below were tested on arch linux, but generalize easily. +The instructions below were tested on Arch Linux, but generalize easily. -I follow the `podman` installation instructions for arch linux, to set up a **rootless container environment**. +I follow the `podman` installation instructions for Arch Linux, to set up a **rootless container environment**. Installation: @@ -563,8 +679,10 @@ pacman -Sy podman podman-docker passt The last one, `passt` (providing `pasta`, yum!), is required for rootless network access. Optionally, there is `podman-compose`. -Out of the box, Podman will run *only if you are root*. -This has to be changed to go *rootless* ([see also](https://man.archlinux.org/man/podman.1#Rootless_mode)) +Originally, Podman was designed to run *only if you are root*, just like Docker. +However, we experienced that it now comes in *rootless* configuration per default ([further instructions](https://man.archlinux.org/man/podman.1#Rootless_mode)). +Just to be safe, I briefly list the major configuration steps. + The first step is to confirm a required kernel module: check that `unpriviledged_users_clone` is set to one. ``` sh @@ -572,7 +690,7 @@ sysctl kernel.unprivileged_userns_clone ``` Then, configure "subordinate user IDs". -There are detail differences in each linux distro; with some luck, your username is already present in these lists: +There are detail differences in each Linux distribution; with some luck, your username is already present in these lists: ``` sh cat /etc/subuid @@ -597,10 +715,10 @@ Then, networking: pods might need to communicate to each other and to the world. And, of course, container storage: make sure you know where your containers are stored. These and more settings are in `/etc/containers/containers.conf` and `/etc/containers/storage.conf`; make sure to scan and edit them to your liking. -## usage +## Usage -You can use images from `docker.io` with podman. -The only difference from docker is the explicit mention of the source, `docker.io`. +You can use images from `docker.io` with Podman. +The only difference from Docker is the explicit mention of the source, `docker.io`. For example: ``` sh @@ -610,37 +728,52 @@ podman run -it docker.io/alpine # will connect to the container exit ``` -## podman rocker +## Limitations + +Note that at least some `docker.io` images will not work: I actually experienced issues with the "rootless Docker image": -From here, **podman is a full drop-in replacement for docker**; just that you are not forced to grant host system root privileges to containers. +``` sh +# podman run --rm -it docker.io/docker:25.0-dind-rootless +``` -Any `Dockerfile` should work, with the mentioned mini-adjustment to `FROM`. -And you can use any docker image; `docker.io/rocker/rstudio` [is available](https://rocker-project.org/use/rootless-podman.html) (don't forget to specify the port). -You may even write `docker` in the terminal: it will alias to `podman` (via the `podman-docker` package on linux). +However, it is logical that that one does not work: it builds a (root-level, Section 3.5) Docker which is supposed to contain a rootless Docker. +The outer Docker layer requires root, which Podman cannot provide. + +This is a logical case; if you understand it, congratulations: you have achieved a basic understanding of containers and user privileges :) +There might be yet other images which do not work by default and require additional tinkering in Podman, due to its altered design. +Most use cases are covered, for example a containerized R environment. + +## Podman Rocker + +From here, **Podman is a full drop-in replacement for Docker**; just that you are not forced to grant host system root privileges to containers. + +Any Dockerfile should work, with the mentioned mini-adjustment to `FROM`. +And you can use any Docker image; `docker.io/rocker/rstudio` [is available](https://rocker-project.org/use/rootless-podman.html) (don't forget to specify the port). +You may even write `docker` in the terminal: it will alias to `podman` (via the `podman-docker` package on Linux, or an alias). ``` sh podman run --rm -p 8787:8787 -e PASSWORD=YOURNEWPASSWORD -v /data/git/coding-club:/root/coding-club docker.io/rocker/rstudio ``` -There is another subtle change: the default user to login to `rstudio` is not `rstudio`, but `root`, because you need to have root rights on the container. +There is another subtle change: the default user to login to `rstudio` is not `rstudio`, but `root`, because for some reason RStudio needs to have root rights on the container. You had those before anyways, but now they are confined to within the pod. +There might be workarounds, which I will explore. {{% callout note %}} To summarize the Podman experience: -- **Docker's Dockerfiles like the one above will build as with docker.** +- **Docker's Dockerfiles like the one above will build equally well on Podman, except for micro-adjustments compared to Docker.** - You can even stick to the `docker` commands thanks to the `podman-docker` package. -- There is podman desktop, if you like clicking. -- Podman is everything docker is, just better. - +- There is Podman Desktop, if you like clicking. +- Podman is everything Docker is, just minimally different, and more secure, full FOSS. {{% /callout %}} -Kudos to the podman devs! +Kudos to the Podman devs! # Summary -In this tutorial, I demonstrated the basics of containerization with docker and podman. -There are convenient GUI apps, and sophisticated terminal commands, the latter is much more powerful. +In this tutorial, I demonstrated the basics of containerization with Docker and Podman. +There are convenient GUI apps, and sophisticated terminal commands, the latter are much more powerful. Personally, I find the concept of containerization fascinating, and was surprised how simple and useful of a trick it is. @@ -652,12 +785,16 @@ Your head might be twisting in a swirl of containers by now. I hope you find this overview useful, nevertheless. Thank you for reading! -[^1]: I mostly follow [this tutorial](https://jsta.github.io/r-docker-tutorial/02-Launching-Docker.html). +[^1]: I saw several ways online to get around the Desktop App, either via WSL2 or using [a windows package manager called Chocolatey](https://en.wikipedia.org/wiki/Chocolatey). + +[^2]: I mostly follow [this tutorial](https://jsta.github.io/r-docker-tutorial/02-Launching-Docker.html). + +[^3]: Just like "Github" is a server service to store git repositories, guess what: "Docker Hub" is a hosting service to store Docker containers. -[^2]: Just like "github" is a server service to store git repositories, guess what: "docker hub" is a hosting service to store docker containers. +[^4]: Here I quoted the docs () before having read them. -[^3]: Here I quoted the docs () before having read them. +[^5]: If you did not install the `buildx` package on Linux, you will read a legacy warning. -[^4]: If you did not install the `docker-buildx` package on linux, you will get a legacy warning. +[^6]: Reference to the film "La Grande Bellezza". -[^5]: Daniel J. Walsh (2019): "How does rootless Podman work?" +[^7]: Daniel J. Walsh (2019): "How does rootless Podman work?" diff --git a/content/tutorials/development_docker/index.qmd b/content/tutorials/development_docker/index.qmd index 60f7e22f1..587592e55 100644 --- a/content/tutorials/development_docker/index.qmd +++ b/content/tutorials/development_docker/index.qmd @@ -1,7 +1,7 @@ --- title: "Building Containers with Docker and Podman" description: "Introduction to containerization and the practical use of Docker-like tools." -date: "2025-02-04" +date: "2025-02-11" authors: [falkmielke] categories: ["development", "open science"] tags: ["development", "open science"] @@ -330,6 +330,7 @@ You might want to test this for yourself. Consider the following series of commands to create a test file in the Docker home directory: ```{sh} +#| eval: false docker run --name testing_permanence --rm -it docker.io/rocker/r-base echo "testing permanence." > ~/test.txt exit @@ -340,6 +341,7 @@ Re-connecting is instantateous. However, ```{sh} +#| eval: false docker run --name testing_permanence --rm -it docker.io/rocker/r-base bash cat ~/test.txt ``` @@ -355,6 +357,7 @@ Whether this makes sense as a workflow has to be evaluated with respect to with You can "link in" folders for working files (note how you have to specify the full path to `new_home`, and that this container uses the root user by default): ```{sh} +#| eval: false mkdir new_home docker run --name testing_permanence -v /data/containers/new_home:/root --rm -it docker.io/rocker/r-base bash echo "testing permanence." > ~/test.txt diff --git a/content/tutorials/development_docker/notes_qmd.txt b/content/tutorials/development_docker/notes_qmd.txt index 7091fd58c..77c0b6281 100644 --- a/content/tutorials/development_docker/notes_qmd.txt +++ b/content/tutorials/development_docker/notes_qmd.txt @@ -6,7 +6,7 @@ steps to get a qmd to hugo markdown: + include yaml preserve_yaml: true -but double-check the yaml header: it does not always copy correctly. +but double-check the yaml header: it does not always copy correctly (author, date, categories, tags). + callouts: https://rossabaker.com/configs/website/shortcodes/callout/ From 581ef3a7eb72e73f8c75b24cde38e2d20575ce9f Mon Sep 17 00:00:00 2001 From: Falk Mielke Date: Tue, 11 Feb 2025 15:53:21 +0100 Subject: [PATCH 18/51] docker: html anchors --- content/tutorials/development_docker/index.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/content/tutorials/development_docker/index.md b/content/tutorials/development_docker/index.md index 753b86e52..e50e99ce5 100644 --- a/content/tutorials/development_docker/index.md +++ b/content/tutorials/development_docker/index.md @@ -193,7 +193,7 @@ You can access it via a browser, going to , with the username `r You can shut down the container with the keyboard shortcut `[ctrl]+[C]` (probably `[ctrl]+[Z] [Return]` on Windows). -## File Access +## File Access The downside of this is that your container is isolated (well... at least to a certain degree). @@ -269,7 +269,7 @@ This is just a single snapshot on a laptop, and putatively `blas`-confounded. Feel free to systematically and scientifically repeat the tests on your own machine. -## Container Permanence: The `--rm` Option +## Container Permanence: The `--rm` Option As briefly touched above, `docker run` comes with the `--rm` option. This basically enables two separate workflows, i.e. usage paradigms. @@ -482,7 +482,7 @@ Furthermore, Docker itself does not fix the versions of installed system compone Ideally, you want to implement **version control and virtual environments within the container**, to be a "full stack open science developer". -## "Because Roots Are Important"[^6]: Rootless Mode +## "Because Roots Are Important"[^6]: Rootless Mode One of the main criticism about Docker is the necessity to run in a privileged user environment, which is indeed a security issue. This may refer to the system process requiring elevated privileges, or users in the `docker` system group [effectively having superuser privileges](https://github.com/moby/moby/issues/9976). @@ -613,7 +613,7 @@ This way of handling private repositories [seems to be good practice](https://st The next best alternative would be mounting the `~/.ssh` folder from the host to the container via `-v`. -# Useful Commands +# Useful Commands We have briefly seen `docker --version`, `docker build`, `docker run`, and there are certainly more settings and tweaks on these commands to learn about. @@ -638,7 +638,7 @@ Anything is possible. You can define an entrypoint in the Dockerfile (i.e. set a default), or overwrite it on each `run`. -# Podman +# Podman ## Purpose From 7d1464450704362b8b373f9dab90c1f7af4c69a4 Mon Sep 17 00:00:00 2001 From: Falk Mielke Date: Tue, 11 Feb 2025 15:56:13 +0100 Subject: [PATCH 19/51] docker: html anchors, attempt 2 --- content/tutorials/development_docker/index.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/content/tutorials/development_docker/index.md b/content/tutorials/development_docker/index.md index e50e99ce5..868fa6ab8 100644 --- a/content/tutorials/development_docker/index.md +++ b/content/tutorials/development_docker/index.md @@ -193,7 +193,7 @@ You can access it via a browser, going to , with the username `r You can shut down the container with the keyboard shortcut `[ctrl]+[C]` (probably `[ctrl]+[Z] [Return]` on Windows). -## File Access +## File Access The downside of this is that your container is isolated (well... at least to a certain degree). @@ -269,7 +269,7 @@ This is just a single snapshot on a laptop, and putatively `blas`-confounded. Feel free to systematically and scientifically repeat the tests on your own machine. -## Container Permanence: The `--rm` Option +## Container Permanence: The `--rm` Option As briefly touched above, `docker run` comes with the `--rm` option. This basically enables two separate workflows, i.e. usage paradigms. @@ -482,7 +482,7 @@ Furthermore, Docker itself does not fix the versions of installed system compone Ideally, you want to implement **version control and virtual environments within the container**, to be a "full stack open science developer". -## "Because Roots Are Important"[^6]: Rootless Mode +## "Because Roots Are Important"[^6]: Rootless Mode One of the main criticism about Docker is the necessity to run in a privileged user environment, which is indeed a security issue. This may refer to the system process requiring elevated privileges, or users in the `docker` system group [effectively having superuser privileges](https://github.com/moby/moby/issues/9976). @@ -613,7 +613,7 @@ This way of handling private repositories [seems to be good practice](https://st The next best alternative would be mounting the `~/.ssh` folder from the host to the container via `-v`. -# Useful Commands +# Useful Commands We have briefly seen `docker --version`, `docker build`, `docker run`, and there are certainly more settings and tweaks on these commands to learn about. @@ -638,7 +638,7 @@ Anything is possible. You can define an entrypoint in the Dockerfile (i.e. set a default), or overwrite it on each `run`. -# Podman +# Podman ## Purpose From 68568c1bac50f463791dcfacafff1356deae63a9 Mon Sep 17 00:00:00 2001 From: Falk Mielke Date: Tue, 11 Feb 2025 16:00:15 +0100 Subject: [PATCH 20/51] docker: html anchors, attempt 3 --- content/tutorials/development_docker/index.md | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/content/tutorials/development_docker/index.md b/content/tutorials/development_docker/index.md index 868fa6ab8..3461f29ac 100644 --- a/content/tutorials/development_docker/index.md +++ b/content/tutorials/development_docker/index.md @@ -193,7 +193,8 @@ You can access it via a browser, going to , with the username `r You can shut down the container with the keyboard shortcut `[ctrl]+[C]` (probably `[ctrl]+[Z] [Return]` on Windows). -## File Access + +## File Access The downside of this is that your container is isolated (well... at least to a certain degree). @@ -269,7 +270,8 @@ This is just a single snapshot on a laptop, and putatively `blas`-confounded. Feel free to systematically and scientifically repeat the tests on your own machine. -## Container Permanence: The `--rm` Option + +## Container Permanence: The `--rm` Option As briefly touched above, `docker run` comes with the `--rm` option. This basically enables two separate workflows, i.e. usage paradigms. @@ -482,7 +484,8 @@ Furthermore, Docker itself does not fix the versions of installed system compone Ideally, you want to implement **version control and virtual environments within the container**, to be a "full stack open science developer". -## "Because Roots Are Important"[^6]: Rootless Mode + +## "Because Roots Are Important"[^6]: Rootless Mode One of the main criticism about Docker is the necessity to run in a privileged user environment, which is indeed a security issue. This may refer to the system process requiring elevated privileges, or users in the `docker` system group [effectively having superuser privileges](https://github.com/moby/moby/issues/9976). @@ -613,7 +616,8 @@ This way of handling private repositories [seems to be good practice](https://st The next best alternative would be mounting the `~/.ssh` folder from the host to the container via `-v`. -# Useful Commands + +# Useful Commands We have briefly seen `docker --version`, `docker build`, `docker run`, and there are certainly more settings and tweaks on these commands to learn about. @@ -638,7 +642,8 @@ Anything is possible. You can define an entrypoint in the Dockerfile (i.e. set a default), or overwrite it on each `run`. -# Podman + +# Podman ## Purpose From 29b5ed821ba5fa2eab03699cf163c3ec4088ddaf Mon Sep 17 00:00:00 2001 From: Falk Mielke Date: Tue, 11 Feb 2025 16:03:16 +0100 Subject: [PATCH 21/51] docker: html anchors, attempt n+1 --- content/tutorials/development_docker/index.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/content/tutorials/development_docker/index.md b/content/tutorials/development_docker/index.md index 3461f29ac..21e0561eb 100644 --- a/content/tutorials/development_docker/index.md +++ b/content/tutorials/development_docker/index.md @@ -193,7 +193,7 @@ You can access it via a browser, going to , with the username `r You can shut down the container with the keyboard shortcut `[ctrl]+[C]` (probably `[ctrl]+[Z] [Return]` on Windows). - + ## File Access The downside of this is that your container is isolated (well... at least to a certain degree). @@ -270,7 +270,7 @@ This is just a single snapshot on a laptop, and putatively `blas`-confounded. Feel free to systematically and scientifically repeat the tests on your own machine. - + ## Container Permanence: The `--rm` Option As briefly touched above, `docker run` comes with the `--rm` option. @@ -484,7 +484,7 @@ Furthermore, Docker itself does not fix the versions of installed system compone Ideally, you want to implement **version control and virtual environments within the container**, to be a "full stack open science developer". - + ## "Because Roots Are Important"[^6]: Rootless Mode One of the main criticism about Docker is the necessity to run in a privileged user environment, which is indeed a security issue. @@ -616,7 +616,7 @@ This way of handling private repositories [seems to be good practice](https://st The next best alternative would be mounting the `~/.ssh` folder from the host to the container via `-v`. - + # Useful Commands We have briefly seen `docker --version`, `docker build`, `docker run`, and there are certainly more settings and tweaks on these commands to learn about. @@ -642,7 +642,7 @@ Anything is possible. You can define an entrypoint in the Dockerfile (i.e. set a default), or overwrite it on each `run`. - + # Podman ## Purpose From 260045f403c3ad828d721e1b858910cd49b9d4a9 Mon Sep 17 00:00:00 2001 From: Falk Mielke Date: Tue, 11 Feb 2025 16:08:20 +0100 Subject: [PATCH 22/51] docker: html anchors, attempt n+1 --- content/tutorials/development_docker/index.md | 12 ++++++------ content/tutorials/development_docker/index.qmd | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/content/tutorials/development_docker/index.md b/content/tutorials/development_docker/index.md index 21e0561eb..10942837e 100644 --- a/content/tutorials/development_docker/index.md +++ b/content/tutorials/development_docker/index.md @@ -193,7 +193,7 @@ You can access it via a browser, going to , with the username `r You can shut down the container with the keyboard shortcut `[ctrl]+[C]` (probably `[ctrl]+[Z] [Return]` on Windows). - + ## File Access The downside of this is that your container is isolated (well... at least to a certain degree). @@ -270,7 +270,7 @@ This is just a single snapshot on a laptop, and putatively `blas`-confounded. Feel free to systematically and scientifically repeat the tests on your own machine. - + ## Container Permanence: The `--rm` Option As briefly touched above, `docker run` comes with the `--rm` option. @@ -279,7 +279,7 @@ This basically enables two separate workflows, i.e. usage paradigms. The first option, which is the default, is that your container is stored on the system permanently. This counts for the upstream images, which are downloaded upon first invocation of a container. But also, changes you apply while working in the container are persistently stored until you log in again, using hard drive space of the host. -Images may still be removed by manually running `docker rmi [...]` Section 5. +Images may still be removed by manually running `docker rmi [...]` (Section 5). In contrast, with the second option, `docker run --rm [...]`, ad-hoc changes in the container are removed when the container is finished. Unless, of course, you mount a local volume with `docker run --rm -v [...]` (Section 2.3). @@ -484,7 +484,7 @@ Furthermore, Docker itself does not fix the versions of installed system compone Ideally, you want to implement **version control and virtual environments within the container**, to be a "full stack open science developer". - + ## "Because Roots Are Important"[^6]: Rootless Mode One of the main criticism about Docker is the necessity to run in a privileged user environment, which is indeed a security issue. @@ -616,7 +616,7 @@ This way of handling private repositories [seems to be good practice](https://st The next best alternative would be mounting the `~/.ssh` folder from the host to the container via `-v`. - + # Useful Commands We have briefly seen `docker --version`, `docker build`, `docker run`, and there are certainly more settings and tweaks on these commands to learn about. @@ -642,7 +642,7 @@ Anything is possible. You can define an entrypoint in the Dockerfile (i.e. set a default), or overwrite it on each `run`. - + # Podman ## Purpose diff --git a/content/tutorials/development_docker/index.qmd b/content/tutorials/development_docker/index.qmd index 587592e55..cda099289 100644 --- a/content/tutorials/development_docker/index.qmd +++ b/content/tutorials/development_docker/index.qmd @@ -318,7 +318,7 @@ This basically enables two separate workflows, i.e. usage paradigms. The first option, which is the default, is that your container is stored on the system permanently. This counts for the upstream images, which are downloaded upon first invocation of a container. But also, changes you apply while working in the container are persistently stored until you log in again, using hard drive space of the host. -Images may still be removed by manually running `docker rmi [...]` [@sec-commands]. +Images may still be removed by manually running `docker rmi [...]` ([@sec-commands]). In contrast, with the second option, `docker run --rm [...]`, ad-hoc changes in the container are removed when the container is finished. From 8a0be6bec3f19c8e872472bd1c3056b609f4d585 Mon Sep 17 00:00:00 2001 From: Falk Mielke Date: Tue, 11 Feb 2025 16:11:20 +0100 Subject: [PATCH 23/51] docker: html anchors working. sorry for the helpless trial-and-error. --- content/tutorials/development_docker/index.md | 8 ++++---- content/tutorials/development_docker/notes_qmd.txt | 3 ++- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/content/tutorials/development_docker/index.md b/content/tutorials/development_docker/index.md index 10942837e..649b45130 100644 --- a/content/tutorials/development_docker/index.md +++ b/content/tutorials/development_docker/index.md @@ -270,7 +270,7 @@ This is just a single snapshot on a laptop, and putatively `blas`-confounded. Feel free to systematically and scientifically repeat the tests on your own machine. - + ## Container Permanence: The `--rm` Option As briefly touched above, `docker run` comes with the `--rm` option. @@ -484,7 +484,7 @@ Furthermore, Docker itself does not fix the versions of installed system compone Ideally, you want to implement **version control and virtual environments within the container**, to be a "full stack open science developer". - + ## "Because Roots Are Important"[^6]: Rootless Mode One of the main criticism about Docker is the necessity to run in a privileged user environment, which is indeed a security issue. @@ -616,7 +616,7 @@ This way of handling private repositories [seems to be good practice](https://st The next best alternative would be mounting the `~/.ssh` folder from the host to the container via `-v`. - + # Useful Commands We have briefly seen `docker --version`, `docker build`, `docker run`, and there are certainly more settings and tweaks on these commands to learn about. @@ -642,7 +642,7 @@ Anything is possible. You can define an entrypoint in the Dockerfile (i.e. set a default), or overwrite it on each `run`. - + # Podman ## Purpose diff --git a/content/tutorials/development_docker/notes_qmd.txt b/content/tutorials/development_docker/notes_qmd.txt index 77c0b6281..671454d91 100644 --- a/content/tutorials/development_docker/notes_qmd.txt +++ b/content/tutorials/development_docker/notes_qmd.txt @@ -16,7 +16,8 @@ but double-check the yaml header: it does not always copy correctly (author, dat + section crosslinks: -## Section + +## Section + figure captions Date: Thu, 13 Feb 2025 13:01:34 +0100 Subject: [PATCH 24/51] docker: adding more references --- content/tutorials/development_docker/index.md | 8 +++++++- content/tutorials/development_docker/index.qmd | 6 +++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/content/tutorials/development_docker/index.md b/content/tutorials/development_docker/index.md index 649b45130..4eb1efb72 100644 --- a/content/tutorials/development_docker/index.md +++ b/content/tutorials/development_docker/index.md @@ -55,6 +55,10 @@ Generally, if you are an INBO user, it is recommended to contact and involve you - - - +- +- +- + # Installation @@ -631,7 +635,9 @@ There are other Docker commands which might help you out of a temporary misery. - `docker rmi ` will remove an image; `docker rmi $(docker images -q)` will remove **all** your images. The command `docker system prune` provides an interactive cleanup. Of course, you get to keep the Dockerfiles. - `docker commit` and `docker diff` support the creation and maintenance of snapshots of processed images, which you could keep locally, or upload them to an online storage such as Docker Hub. -There are a gazillion more to choose and use, the [Docker docs](https://docs.docker.com/reference/cli/docker) are your go-to source. +There are a gazillion more to choose and use. +A more complete list can be found [here, for example](https://do4ds.com/chapters/append/cheatsheets.html#cheat-docker), and the [Docker docs](https://docs.docker.com/reference/cli/docker) are your go-to source. + One more note on the `ENTRYPOINT`: It defines through which terminal or script the user will access the container. diff --git a/content/tutorials/development_docker/index.qmd b/content/tutorials/development_docker/index.qmd index cda099289..7b541ca40 100644 --- a/content/tutorials/development_docker/index.qmd +++ b/content/tutorials/development_docker/index.qmd @@ -58,6 +58,9 @@ __References:__ - - - +- +- +- # Installation @@ -726,7 +729,8 @@ There are other Docker commands which might help you out of a temporary misery. - `docker rmi ` will remove an image; `docker rmi $(docker images -q)` will remove **all** your images. The command `docker system prune` provides an interactive cleanup. Of course, you get to keep the Dockerfiles. - `docker commit` and `docker diff` support the creation and maintenance of snapshots of processed images, which you could keep locally, or upload them to an online storage such as Docker Hub. -There are a gazillion more to choose and use, the [Docker docs](https://docs.docker.com/reference/cli/docker) are your go-to source. +There are a gazillion more to choose and use. +A more complete list can be found [here, for example](https://do4ds.com/chapters/append/cheatsheets.html#cheat-docker), and the [Docker docs](https://docs.docker.com/reference/cli/docker) are your go-to source. One more note on the `ENTRYPOINT`: From d0efa999d5e1d17c05feff2c80e17f1370a91115 Mon Sep 17 00:00:00 2001 From: Falk Mielke Date: Fri, 14 Feb 2025 15:25:50 +0100 Subject: [PATCH 25/51] docker: incorporate review by @ThierryO --- content/tutorials/development_docker/index.md | 63 ++++++++++++------- .../tutorials/development_docker/index.qmd | 41 +++++++----- 2 files changed, 66 insertions(+), 38 deletions(-) diff --git a/content/tutorials/development_docker/index.md b/content/tutorials/development_docker/index.md index 4eb1efb72..10174f2f8 100644 --- a/content/tutorials/development_docker/index.md +++ b/content/tutorials/development_docker/index.md @@ -184,7 +184,7 @@ docker run --rm -p 8787:8787 -e PASSWORD=YOURNEWPASSWORD rocker/rstudio - The `--rm` flag makes the Docker image non-permanent, i.e. disk space will be freed after you close the container (Section 2.5). - The port specified at `-p` is the one you use to access this local container server (the `-p` actually maps host- and container ports). You have to specify it explicitly, otherwise the host system will not let you pass (`:gandalf-meme:`). -- The `-e` flag allows you to specify a password, but if you do not specify one, this container will provide a random password upon startup (read the terminal output). +- The `-e` flag allows you to specify environment variables, in this case used to set a password for the RStudio server. But if you do not specify one, a random password will be generated and displayed upon startup (read the terminal output).
    run @@ -234,6 +234,7 @@ However, there are limitations: {{% callout emphasize %}} - You have to live with the R packages provided in the container, or otherwise install them each time you access it... - ... unless you make your container permanent by omitting the `--rm` option. Note that this will cost considerable disk space, will not transfer to other computers (the original purpose of Docker), and demand occasional updates (Section 2.5). +- You could alternatively add `--pull always` to `docker run`, which will check and pull new versions. - Speaking of updates: it is good practice to keep software up to date. Occasionally update or simply re-install your Docker image and R packages to get the latest versions. - You should make sure that the containers are configured correctly and securely. This is especially important with server components which expose your machine to the internet. - There is a performance penalty from using containers: in inaccurate laymans' terms, they emulate (parts of a) "computer" inside your computer. @@ -295,6 +296,7 @@ Consider the following series of commands to create a test file in the Docker ho ``` sh docker run --name testing_permanence --rm -it docker.io/rocker/r-base echo "testing permanence." > ~/test.txt +cat ~/test.txt exit ``` @@ -414,19 +416,22 @@ With the `Dockerfile` and `hello.py` in place, you can build the container [^5]. ``` sh # on Windows, you are already in an administrator terminal -docker build -t my-flask . +docker build --pull -t my-flask . -docker build -t my-flask . +docker build --pull -t my-flask . ``` +On Linux, you might need to use `sudo` if the user is not in the `docker` group, like so: `sudo docker build -t my-flask`. +Using `--pull` is good practice to ensure the download of the latest upstream containers; you could even use `--no-cache` to avoid previous downloads altogether. +The `-t` parameter [will "tag" the image at build time](https://docs.docker.com/get-started/docker-concepts/building-images/build-tag-and-publish-an-image), auto-generating extra metadata. +Also, some variants can omit the final dot ("."), others require it; the dot is just a Linux shorthand reference to the current working directory (i.e. where your Dockerfile resides). + +
    build
    -on Linux, you might need to use `sudo` if the user is not in the `docker` group, like so: `sudo docker build -t my-flask`. -Also, some variants can omit the final dot ("."), others require it; the dot is just a Linux shorthand reference to the current working directory (i.e. where your Dockerfile resides). - List your available container images via the `docker images` command. You should now see a `python` image, which is the base alpine image we built upon. @@ -477,6 +482,7 @@ The first point, **version control**, is a fantastic tool to enable open science You will [find starting points and help in other tutorials on this website](https://tutorials.inbo.be/tags/git). The second point, version documentation, is ideally handled by **virtual environments**. Those exist for R ([renv](https://rstudio.github.io/renv/articles/renv.html)) or Python ([venv](https://docs.python.org/3/library/venv.html)). +The `pak` library in R can [handle lock files conveniently](https://pak.r-lib.org/reference/lockfile_install.html) with `pak::lockfile_install()`. Then there is the integration of R, Python and system packages in `conda`-like tools ([e.g. micromamba](https://mamba.readthedocs.io/en/latest)). A simple, less effective basic solution to version reproducibility is the manual storage of currently installed versions via `sessionInfo()` in R, or `pip freeze > versions.txt` for Python. @@ -531,27 +537,38 @@ They prepared quite [a lot of useful images](https://hub.docker.com/u/rocker), i Note the syntax in `FROM`: it is `rocker/:`. - # Use the rocker rstudio image - FROM rocker/rstudio:latest +``` +FROM rocker/rstudio:latest +# (Use the rocker rstudio image) + +# update the system packages +RUN apt update \ + && apt upgrade --yes - # update the system packages - RUN apt update \ - && apt upgrade --yes +# git2rdata requires git +RUN apt-get update \ + && apt-get install -y --no-install-recommends \ + git libgit2-dev\ + && apt-get clean - # git2rdata requires git - RUN apt install git libgit2-dev --yes +# update pre-installed R packages +# RUN Rscript -e 'update.packages(ask=FALSE)' - # update pre-installed R packages - # RUN Rscript -e 'update.packages(ask=FALSE)' +# copy a `.Rprofile` to the container +# available here: https://tutorials.inbo.be/installation/administrator/admin_install_r/Rprofile.site +COPY docker/.Rprofile $R_HOME/etc/Rprofile.site - # install package via Rscript - # (a) via r-universe - # RUN Rscript -e 'install.packages("watina", repos = c(inbo = "https://inbo.r-universe.dev", CRAN = "https://cloud.r-project.org"))' - RUN Rscript -e 'install.packages("git2rdata")' +# install package via an R command (`R -q -e` or `Rscript -e`) +# (a) from pre-configured repositories +RUN Rscript -e 'install.packages("git2rdata")' - # (b) from github - RUN R -q -e 'install.packages("remotes")' - RUN R -q -e 'remotes::install_github("inbo/INBOmd", dependencies = TRUE)' +# (b) via r-universe +RUN R -q -e 'install.packages("watina", repos = c(inbo = "https://inbo.r-universe.dev", CRAN = "https://cloud.r-project.org"))' + +# (b) from github +RUN R -q -e 'install.packages("remotes")' +RUN R -q -e 'remotes::install_github("inbo/INBOmd", dependencies = TRUE)' +``` It takes some puzzle work to get the dependencies right, e.g. with the `libgit2` dependency (try commenting out that line to get a feeling for build failure). However, there is hope: (i) the error output is quite instructive (at least for Linux users), (ii) building is incremental, so you can add successively. @@ -632,7 +649,7 @@ There are other Docker commands which might help you out of a temporary misery. - `docker images` will list your images in convenient table format; the `-q` flag returns only IDs. - `docker inspect ` brings up all the configuration details about a specific image; you can, for example, find out its Docker version and network IP address. - `docker ps` ("print status") will list all running containers; `docker stop $(docker ps -a -q)` will stop them **all**. -- `docker rmi ` will remove an image; `docker rmi $(docker images -q)` will remove **all** your images. The command `docker system prune` provides an interactive cleanup. Of course, you get to keep the Dockerfiles. +- Be aware that docker images occupy a considerable amount of hard disk space. `docker rmi ` will remove an image; `docker rmi $(docker images -q)` will remove **all** your images. The command `docker system prune` provides an interactive cleanup, `docker system prune --all` will clean up non-interactively. Of course, you get to keep the Dockerfiles. - `docker commit` and `docker diff` support the creation and maintenance of snapshots of processed images, which you could keep locally, or upload them to an online storage such as Docker Hub. There are a gazillion more to choose and use. diff --git a/content/tutorials/development_docker/index.qmd b/content/tutorials/development_docker/index.qmd index 7b541ca40..a35b8433b 100644 --- a/content/tutorials/development_docker/index.qmd +++ b/content/tutorials/development_docker/index.qmd @@ -211,7 +211,7 @@ docker run --rm -p 8787:8787 -e PASSWORD=YOURNEWPASSWORD rocker/rstudio - The `--rm` flag makes the Docker image non-permanent, i.e. disk space will be freed after you close the container ([@sec-permanence]). - The port specified at `-p` is the one you use to access this local container server (the `-p` actually maps host- and container ports). You have to specify it explicitly, otherwise the host system will not let you pass (`:gandalf-meme:`). -- The `-e` flag allows you to specify a password, but if you do not specify one, this container will provide a random password upon startup (read the terminal output). +- The `-e` flag allows you to specify environment variables, in this case used to set a password for the RStudio server. But if you do not specify one, a random password will be generated and displayed upon startup (read the terminal output). ![run](docker_run.jpg) @@ -263,6 +263,7 @@ However, there are limitations: ::: {.callout-warning} - You have to live with the R packages provided in the container, or otherwise install them each time you access it... - ... unless you make your container permanent by omitting the `--rm` option. Note that this will cost considerable disk space, will not transfer to other computers (the original purpose of Docker), and demand occasional updates ([@sec-permanence]). +- You could alternatively add `--pull always` to `docker run`, which will check and pull new versions. - Speaking of updates: it is good practice to keep software up to date. Occasionally update or simply re-install your Docker image and R packages to get the latest versions. - You should make sure that the containers are configured correctly and securely. This is especially important with server components which expose your machine to the internet. - There is a performance penalty from using containers: in inaccurate laymans' terms, they emulate (parts of a) "computer" inside your computer. @@ -336,6 +337,7 @@ Consider the following series of commands to create a test file in the Docker ho #| eval: false docker run --name testing_permanence --rm -it docker.io/rocker/r-base echo "testing permanence." > ~/test.txt +cat ~/test.txt exit ``` @@ -475,22 +477,21 @@ With the `Dockerfile` and `hello.py` in place, you can build the container [^4]. ```{sh} #| eval: false # on Windows, you are already in an administrator terminal -docker build -t my-flask . +docker build --pull -t my-flask . -docker build -t my-flask . +docker build --pull -t my-flask . ``` - [^4]: If you did not install the `buildx` package on Linux, you will read a legacy warning. - -![build](docker_build.jpg) - - -on Linux, you might need to use `sudo` if the user is not in the `docker` group, like so: `sudo docker build -t my-flask`. +On Linux, you might need to use `sudo` if the user is not in the `docker` group, like so: `sudo docker build -t my-flask`. +Using `--pull` is good practice to ensure the download of the latest upstream containers; you could even use `--no-cache` to avoid previous downloads altogether. +The `-t` parameter [will "tag" the image at build time](https://docs.docker.com/get-started/docker-concepts/building-images/build-tag-and-publish-an-image), auto-generating extra metadata. Also, some variants can omit the final dot ("."), others require it; the dot is just a Linux shorthand reference to the current working directory (i.e. where your Dockerfile resides). +![build](docker_build.jpg) + List your available container images via the `docker images` command. @@ -549,6 +550,7 @@ The first point, **version control**, is a fantastic tool to enable open science You will [find starting points and help in other tutorials on this website](https://tutorials.inbo.be/tags/git). The second point, version documentation, is ideally handled by **virtual environments**. Those exist for R ([renv](https://rstudio.github.io/renv/articles/renv.html)) or Python ([venv](https://docs.python.org/3/library/venv.html)). +The `pak` library in R can [handle lock files conveniently](https://pak.r-lib.org/reference/lockfile_install.html) with `pak::lockfile_install()`. Then there is the integration of R, Python and system packages in `conda`-like tools ([e.g. micromamba](https://mamba.readthedocs.io/en/latest)). A simple, less effective basic solution to version reproducibility is the manual storage of currently installed versions via `sessionInfo()` in R, or `pip freeze > versions.txt` for Python. @@ -612,24 +614,33 @@ They prepared quite [a lot of useful images](https://hub.docker.com/u/rocker), i Note the syntax in `FROM`: it is `rocker/:`. ```{} -# Use the rocker rstudio image FROM rocker/rstudio:latest +# (Use the rocker rstudio image) # update the system packages RUN apt update \ && apt upgrade --yes # git2rdata requires git -RUN apt install git libgit2-dev --yes +RUN apt-get update \ + && apt-get install -y --no-install-recommends \ + git libgit2-dev\ + && apt-get clean # update pre-installed R packages # RUN Rscript -e 'update.packages(ask=FALSE)' -# install package via Rscript -# (a) via r-universe -# RUN Rscript -e 'install.packages("watina", repos = c(inbo = "https://inbo.r-universe.dev", CRAN = "https://cloud.r-project.org"))' +# copy a `.Rprofile` to the container +# available here: https://tutorials.inbo.be/installation/administrator/admin_install_r/Rprofile.site +COPY docker/.Rprofile $R_HOME/etc/Rprofile.site + +# install package via an R command (`R -q -e` or `Rscript -e`) +# (a) from pre-configured repositories RUN Rscript -e 'install.packages("git2rdata")' +# (b) via r-universe +RUN R -q -e 'install.packages("watina", repos = c(inbo = "https://inbo.r-universe.dev", CRAN = "https://cloud.r-project.org"))' + # (b) from github RUN R -q -e 'install.packages("remotes")' RUN R -q -e 'remotes::install_github("inbo/INBOmd", dependencies = TRUE)' @@ -726,7 +737,7 @@ There are other Docker commands which might help you out of a temporary misery. - `docker images` will list your images in convenient table format; the `-q` flag returns only IDs. - `docker inspect ` brings up all the configuration details about a specific image; you can, for example, find out its Docker version and network IP address. - `docker ps` ("print status") will list all running containers; `docker stop $(docker ps -a -q)` will stop them **all**. -- `docker rmi ` will remove an image; `docker rmi $(docker images -q)` will remove **all** your images. The command `docker system prune` provides an interactive cleanup. Of course, you get to keep the Dockerfiles. +- Be aware that docker images occupy a considerable amount of hard disk space. `docker rmi ` will remove an image; `docker rmi $(docker images -q)` will remove **all** your images. The command `docker system prune` provides an interactive cleanup, `docker system prune --all` will clean up non-interactively. Of course, you get to keep the Dockerfiles. - `docker commit` and `docker diff` support the creation and maintenance of snapshots of processed images, which you could keep locally, or upload them to an online storage such as Docker Hub. There are a gazillion more to choose and use. From 81d99274f3fdd41874c928d9ec915a3bdf973e36 Mon Sep 17 00:00:00 2001 From: Falk Mielke Date: Thu, 20 Feb 2025 09:24:14 +0100 Subject: [PATCH 26/51] docker: review suggestions @florisvdh, pt.1 --- content/tutorials/development_docker/index.md | 20 ++++++++++--------- .../tutorials/development_docker/index.qmd | 20 +++++++++---------- 2 files changed, 21 insertions(+), 19 deletions(-) diff --git a/content/tutorials/development_docker/index.md b/content/tutorials/development_docker/index.md index 10174f2f8..324bfd40d 100644 --- a/content/tutorials/development_docker/index.md +++ b/content/tutorials/development_docker/index.md @@ -96,11 +96,14 @@ This is why the rest of this tutorial will focus on terminal access. On the Windows terminal or Linux shell, you can install `docker` as a terminal tool. {{% callout note %}} -On Windows, this comes bundled with the App[^1]; the steps below are not necessary. -However, note that you need to run a terminal *as administrator*. +On Windows, this comes bundled with the App; the steps below are not necessary. +There might be ways to get around the Desktop App and facilitate installation, either via WSL2 or using [a windows package manager called Chocolatey](https://en.wikipedia.org/wiki/Chocolatey). + +Either way, note that you need to run the docker app or docker in a terminal *as administrator*. + {{% /callout %}} -More info on the debian installation [can be found here](https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository). +More info about the installation on Debian-based or Ubuntu Linux systems [can be found here](https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository). The procedure requires you to add an extra repository, [some caution is warranted](https://wiki.debian.org/DontBreakDebian). ``` sh @@ -182,7 +185,7 @@ If it does not find the resources locally, Docker will download and extract the docker run --rm -p 8787:8787 -e PASSWORD=YOURNEWPASSWORD rocker/rstudio ``` -- The `--rm` flag makes the Docker image non-permanent, i.e. disk space will be freed after you close the container (Section 2.5). +- The `--rm` flag makes the Docker container non-permanent, i.e. disk space will be freed after you close the container (Section 2.5). - The port specified at `-p` is the one you use to access this local container server (the `-p` actually maps host- and container ports). You have to specify it explicitly, otherwise the host system will not let you pass (`:gandalf-meme:`). - The `-e` flag allows you to specify environment variables, in this case used to set a password for the RStudio server. But if you do not specify one, a random password will be generated and displayed upon startup (read the terminal output). @@ -312,7 +315,7 @@ will return: \> cat: /root/test.txt: No such file or directory This behavior is desired (in the second workflow above): if you start up a fresh environment each time you work in Docker, you **assure that your work pipeline is independent of prior changes on the system**. -Whether this makes sense as a workflow has to be evaluated with respect to with hard drive space requirement, updates, the option to build upon a customized Dockerfile, reproducibility potential. +Whether this makes sense as a workflow has to be evaluated with respect to hard drive space requirement, updates, the option to build upon a customized Dockerfile, reproducibility potential. You can "link in" folders for working files (note how you have to specify the full path to `new_home`, and that this container uses the root user by default): @@ -338,7 +341,7 @@ But it also pays off in complicated server setups and distributed computing. A standardized container from [Docker Hub](https://hub.docker.com) is a good start. However, you will probably require personalization. -As a use case, imagine you would like to have an RStudio server which comes with relevant inbo packages pre-installed (e.g. [`inbodb`](https://inbo.github.io/inbodb), [`watina`](https://inbo.github.io/watina); *cf.* [contaINBO](https://github.com/inbo/contaINBO)). +As a use case, imagine you would like to have an RStudio server which comes with relevant inbo packages pre-installed (e.g. [`inbodb`](https://inbo.github.io/inbodb), [`watina`](https://inbo.github.io/watina); *cf.* [containbo](https://github.com/inbo/containbo)). I will return to this use case below. To explore the general workings of `docker build`, let us turn to more web-directed tasks for a change. @@ -452,13 +455,13 @@ We have used an existing image and added `flask` on top of it. This works via writing a Dockerfile and building an image. {{% /callout %}} -## Multiple Images: `compose` Versus `build` +## Multiple Images: `compose` *versus* `build` The above works fine for most cases. However, if you want to assemble and combine multiple images, or build on base images from multiple sources, you need a level up. In that case `docker compose` is [the way to go](https://docs.docker.com/compose/gettingstarted). -On Debian, this extra functionality comes with the `docker-compose-plugin`. +On Debian or Ubuntu, this extra functionality comes with the `docker-compose-plugin`. I did not have the need to try this out, yet, but will return here if that changes. ## Confusion with Version Control and Version Management @@ -813,7 +816,6 @@ Your head might be twisting in a swirl of containers by now. I hope you find this overview useful, nevertheless. Thank you for reading! -[^1]: I saw several ways online to get around the Desktop App, either via WSL2 or using [a windows package manager called Chocolatey](https://en.wikipedia.org/wiki/Chocolatey). [^2]: I mostly follow [this tutorial](https://jsta.github.io/r-docker-tutorial/02-Launching-Docker.html). diff --git a/content/tutorials/development_docker/index.qmd b/content/tutorials/development_docker/index.qmd index a35b8433b..369a09113 100644 --- a/content/tutorials/development_docker/index.qmd +++ b/content/tutorials/development_docker/index.qmd @@ -101,14 +101,14 @@ This is why the rest of this tutorial will focus on terminal access. On the Windows terminal or Linux shell, you can install `docker` as a terminal tool. :::{.callout-note} -On Windows, this comes bundled with the App[^7]; the steps below are not necessary. -However, note that you need to run a terminal *as administrator*. -::: +On Windows, this comes bundled with the App; the steps below are not necessary. +There might be ways to get around the Desktop App and facilitate installation, either via WSL2 or using [a windows package manager called Chocolatey](https://en.wikipedia.org/wiki/Chocolatey). -[^7]: I saw several ways online to get around the Desktop App, either via WSL2 or using [a windows package manager called Chocolatey](https://en.wikipedia.org/wiki/Chocolatey). +Either way, note that you need to run the docker app or docker in a terminal *as administrator*. +::: -More info on the debian installation [can be found here](https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository). +More info about the installation on Debian-based or Ubuntu Linux systems [can be found here](https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository). The procedure requires you to add an extra repository, [some caution is warranted](https://wiki.debian.org/DontBreakDebian). ```{sh} @@ -209,7 +209,7 @@ docker run --rm -p 8787:8787 -e PASSWORD=YOURNEWPASSWORD rocker/rstudio ``` -- The `--rm` flag makes the Docker image non-permanent, i.e. disk space will be freed after you close the container ([@sec-permanence]). +- The `--rm` flag makes the Docker container non-permanent, i.e. disk space will be freed after you close the container ([@sec-permanence]). - The port specified at `-p` is the one you use to access this local container server (the `-p` actually maps host- and container ports). You have to specify it explicitly, otherwise the host system will not let you pass (`:gandalf-meme:`). - The `-e` flag allows you to specify environment variables, in this case used to set a password for the RStudio server. But if you do not specify one, a random password will be generated and displayed upon startup (read the terminal output). @@ -356,7 +356,7 @@ will return: This behavior is desired (in the second workflow above): if you start up a fresh environment each time you work in Docker, you **assure that your work pipeline is independent of prior changes on the system**. -Whether this makes sense as a workflow has to be evaluated with respect to with hard drive space requirement, updates, the option to build upon a customized Dockerfile, reproducibility potential. +Whether this makes sense as a workflow has to be evaluated with respect to hard drive space requirement, updates, the option to build upon a customized Dockerfile, reproducibility potential. You can "link in" folders for working files (note how you have to specify the full path to `new_home`, and that this container uses the root user by default): @@ -388,7 +388,7 @@ But it also pays off in complicated server setups and distributed computing. A standardized container from [Docker Hub](https://hub.docker.com) is a good start. However, you will probably require personalization. -As a use case, imagine you would like to have an RStudio server which comes with relevant inbo packages pre-installed (e.g. [`inbodb`](https://inbo.github.io/inbodb), [`watina`](https://inbo.github.io/watina); *cf.* [contaINBO](https://github.com/inbo/contaINBO)). +As a use case, imagine you would like to have an RStudio server which comes with relevant inbo packages pre-installed (e.g. [`inbodb`](https://inbo.github.io/inbodb), [`watina`](https://inbo.github.io/watina); *cf.* [containbo](https://github.com/inbo/containbo)). I will return to this use case below. To explore the general workings of `docker build`, let us turn to more web-directed tasks for a change. @@ -516,13 +516,13 @@ This works via writing a Dockerfile and building an image. ::: -## Multiple Images: `compose` Versus `build` +## Multiple Images: `compose` *versus* `build` The above works fine for most cases. However, if you want to assemble and combine multiple images, or build on base images from multiple sources, you need a level up. In that case `docker compose` is [the way to go](https://docs.docker.com/compose/gettingstarted). -On Debian, this extra functionality comes with the `docker-compose-plugin`. +On Debian or Ubuntu, this extra functionality comes with the `docker-compose-plugin`. I did not have the need to try this out, yet, but will return here if that changes. From 2bab9d3a6f92bfb834ef0e7b44ad67113c46bcff Mon Sep 17 00:00:00 2001 From: Falk Mielke Date: Thu, 20 Feb 2025 14:31:35 +0100 Subject: [PATCH 27/51] docker: paragraph rework on images --- content/tutorials/development_docker/index.md | 60 +++++++++++++++---- .../tutorials/development_docker/index.qmd | 60 ++++++++++++++----- 2 files changed, 92 insertions(+), 28 deletions(-) diff --git a/content/tutorials/development_docker/index.md b/content/tutorials/development_docker/index.md index 324bfd40d..6d8b4b2f7 100644 --- a/content/tutorials/development_docker/index.md +++ b/content/tutorials/development_docker/index.md @@ -464,37 +464,71 @@ In that case `docker compose` is [the way to go](https://docs.docker.com/compose On Debian or Ubuntu, this extra functionality comes with the `docker-compose-plugin`. I did not have the need to try this out, yet, but will return here if that changes. -## Confusion with Version Control and Version Management +## Relation to Version Control and Version Management Back to the initial paradigma of reproducibility: *What exactly is the Open Science aspect of containerization?* This question might have led to some confusion, and I would like to throw in a paragraph of clarification. +A crucial distinction lies in the preparation of *Dockerfiles* (i.e. build instructions) and the preservation of *images* (i.e. end products of a build process). -One purpose of a container may be that you document the exact components of your system environment. -You might start at a base image (e.g. a `rocker`) and add all necessary software via a Dockerfile. + +One purpose of a Dockerfile may be that you document the exact components of your system environment. +You start at a base image (e.g. a `rocker`) and add additional software via Dockerfile layers. This is good practice, and encouraged: if you publish an analysis, provide a tested container recipe with it. -However, this does not solve the problem of version conflicts. +However, this alone does not solve the problem of version conflicts. Documenting the versions of packages you used is an extra step, for which [other tools are available](https://doi.org/10.1038/d41586-023-01469-0). -- Version control such as `git` will track the changes within your own scripts and texts. - It is good practice to report the exact versions of the software used upon publication ([see here, for example](https://arca-dpss.github.io/manual-open-science/requirements-chapter.html)). +- Version control such as `git` will track the changes within your own texts, scripts, even version snapshots and Dockerfiles. +- Finally, docker images can serve as a snapshot of a (virtual) machine on which your code would run. + +{{% callout emphasize %}} +The simple rule of thumb is: use all three methods, ideally all the time. + +Virtual environments. +Version control. +Snapshots. + +Get used to them. +They are easy. +They will save you time and trouble almost immediately. +{{% /callout %}} + -The first point, **version control**, is a fantastic tool to enable open science, and avoid personal trouble. +But unless you use them already, you might require some starting points and directions: here we go. +The second point, **version control**, is a fantastic tool to enable open science, and avoid personal trouble. You will [find starting points and help in other tutorials on this website](https://tutorials.inbo.be/tags/git). -The second point, version documentation, is ideally handled by **virtual environments**. +It might have a steep learning curve, yet [there](https://rstudio.github.io/cheatsheets/git-github.pdf) [are](https://www.sourcetreeapp.com) [fantastic](https://magit.vc) [tools](https://www.sublimemerge.com) to get you started. +The other point, version documentation, is trivially achieved by manual storage of currently installed versions via `sessionInfo()` in R, or `pip freeze > versions.txt` for Python. +A small step towads somewhat more professionalism are **virtual environments**. Those exist for R ([renv](https://rstudio.github.io/renv/articles/renv.html)) or Python ([venv](https://docs.python.org/3/library/venv.html)). The `pak` library in R can [handle lock files conveniently](https://pak.r-lib.org/reference/lockfile_install.html) with `pak::lockfile_install()`. Then there is the integration of R, Python and system packages in `conda`-like tools ([e.g. micromamba](https://mamba.readthedocs.io/en/latest)). +There are even system level tools, for example [`nix` and `rix`](https://docs.ropensci.org/rix). + +The methods are not mutually exclusive: +all Dockerfiles, build recipes and scripts to establish virtual environments should generally be subject to version control. + + +However, documenting the exact tools and versions used in a project does not guarantee that these versions will be accessible to future investigators (like oneself, trying to reproduce an analysis five years later). +This is where **Docker images** come in. +Docker images are the actual containers which you create from the Dockerfile blueprints by the process of building. +Think of a docker image as a virtual copy of your computer which you store for later re-activation. +For example, a collection of images for specific analysis pipelines at INBO are preserved at [Docker Hub/inbobmk](https://hub.docker.com/u/inbobmk). +We consider these "stable" versions because they could be re-activated no matter what crazy updates shatter the R community, which enables us to return to all details of previous analyses. + + +Some confusion might arise from the fact that managing these image snapshots is achieved with the same vocabulary as version control, for example you would ["commit"](https://docs.docker.com/reference/cli/docker/container/commit) updated versions and ["push"](https://docs.docker.com/reference/cli/docker/image/push) them to a container repository. + +Even more confusion might arise from the fact that you also find ready-made images online, e.g. on [Docker Hub](https://hub.docker.com), or [Quai](https://quay.io), or elsewhere. +These provide images of (recent) versions of working environments, supposed to stand in as starting points for derived containers. +Hence, be aware of the dual use case of images: (i) the dynamic, universal base image which improves efficiency and (ii) the static, derived, bespoke image which you created for your analysis (shared with the world for reproducibility). -A simple, less effective basic solution to version reproducibility is the manual storage of currently installed versions via `sessionInfo()` in R, or `pip freeze > versions.txt` for Python. -You can find Docker images of (recent) older versions of working environments on Docker Hub. -You might think that this is how Docker supports version reproducibility. -However, those will fail to build once the binary dependencies get removed. -Furthermore, Docker itself does not fix the versions of installed system components by default. -Ideally, you want to implement **version control and virtual environments within the container**, to be a "full stack open science developer". +And, once more, those images are not a "holy grail" solution: they are not entirely system independent (e.g. processor architecture), and they might occupy a considerable amount of hard disk space (Dockerfile optimization is warranted). +Ideally, to be a "full stack open science developer", you want to implement **a mixed strategy** consisting virtual environments and containers, wrapped in version control and stored in a backup image. diff --git a/content/tutorials/development_docker/index.qmd b/content/tutorials/development_docker/index.qmd index 369a09113..e06c36b0d 100644 --- a/content/tutorials/development_docker/index.qmd +++ b/content/tutorials/development_docker/index.qmd @@ -526,41 +526,71 @@ On Debian or Ubuntu, this extra functionality comes with the `docker-compose-plu I did not have the need to try this out, yet, but will return here if that changes. -## Confusion with Version Control and Version Management +## Relation to Version Control and Version Management Back to the initial paradigma of reproducibility: *What exactly is the Open Science aspect of containerization?* This question might have led to some confusion, and I would like to throw in a paragraph of clarification. +A crucial distinction lies in the preparation of *Dockerfiles* (i.e. build instructions) and the preservation of *images* (i.e. end products of a build process). -One purpose of a container may be that you document the exact components of your system environment. -You might start at a base image (e.g. a `rocker`) and add all necessary software via a Dockerfile. +One purpose of a Dockerfile may be that you document the exact components of your system environment. +You start at a base image (e.g. a `rocker`) and add additional software via Dockerfile layers. This is good practice, and encouraged: if you publish an analysis, provide a tested container recipe with it. - -However, this does not solve the problem of version conflicts. +However, this alone does not solve the problem of version conflicts. Documenting the versions of packages you used is an extra step, for which [other tools are available](https://doi.org/10.1038/d41586-023-01469-0). -- Version control such as `git` will track the changes within your own scripts and texts. -- It is good practice to report the exact versions of the software used upon publication ([see here, for example](https://arca-dpss.github.io/manual-open-science/requirements-chapter.html)). +- It is good practice to report the exact versions of the software used upon publication ([see here, for example](https://arca-dpss.github.io/manual-open-science/requirements-chapter.html)). This is best achieved via virtual environments. +- Version control such as `git` will track the changes within your own texts, scripts, even version snapshots and Dockerfiles. +- Finally, docker images can serve as a snapshot of a (virtual) machine on which your code would run. + +:::{.callout-tip} +The simple rule of thumb is: use all three methods, ideally all the time. + +Virtual environments. +Version control. +Snapshots. + +Get used to them. +They are easy. +They will save you time and trouble almost immediately. +::: -The first point, **version control**, is a fantastic tool to enable open science, and avoid personal trouble. +But unless you use them already, you might require some starting points and directions: here we go. +The second point, **version control**, is a fantastic tool to enable open science, and avoid personal trouble. +It might have a steep learning curve, yet [there](https://rstudio.github.io/cheatsheets/git-github.pdf) [are](https://www.sourcetreeapp.com) [fantastic](https://magit.vc) [tools](https://www.sublimemerge.com) to get you started. You will [find starting points and help in other tutorials on this website](https://tutorials.inbo.be/tags/git). -The second point, version documentation, is ideally handled by **virtual environments**. +The other point, version documentation, is trivially achieved by manual storage of currently installed versions via `sessionInfo()` in R, or `pip freeze > versions.txt` for Python. +A small step towads somewhat more professionalism are **virtual environments**. Those exist for R ([renv](https://rstudio.github.io/renv/articles/renv.html)) or Python ([venv](https://docs.python.org/3/library/venv.html)). The `pak` library in R can [handle lock files conveniently](https://pak.r-lib.org/reference/lockfile_install.html) with `pak::lockfile_install()`. Then there is the integration of R, Python and system packages in `conda`-like tools ([e.g. micromamba](https://mamba.readthedocs.io/en/latest)). +There are even system level tools, for example [`nix` and `rix`](https://docs.ropensci.org/rix). + +The methods are not mutually exclusive: +all Dockerfiles, build recipes and scripts to establish virtual environments should generally be subject to version control. + + +However, documenting the exact tools and versions used in a project does not guarantee that these versions will be accessible to future investigators (like oneself, trying to reproduce an analysis five years later). +This is where **Docker images** come in. +Docker images are the actual containers which you create from the Dockerfile blueprints by the process of building. +Think of a docker image as a virtual copy of your computer which you store for later re-activation. +For example, a collection of images for specific analysis pipelines at INBO are preserved at [Docker Hub/inbobmk](https://hub.docker.com/u/inbobmk). +We consider these "stable" versions because they could be re-activated no matter what crazy updates shatter the R community, which enables us to return to all details of previous analyses. + + +Some confusion might arise from the fact that managing these image snapshots is achieved with the same vocabulary as version control, for example you would ["commit"](https://docs.docker.com/reference/cli/docker/container/commit) updated versions and ["push"](https://docs.docker.com/reference/cli/docker/image/push) them to a container repository. -A simple, less effective basic solution to version reproducibility is the manual storage of currently installed versions via `sessionInfo()` in R, or `pip freeze > versions.txt` for Python. +Even more confusion might arise from the fact that you also find ready-made images online, e.g. on [Docker Hub](https://hub.docker.com), or [Quai](https://quay.io), or elsewhere. +These provide images of (recent) versions of working environments, supposed to stand in as starting points for derived containers. +Hence, be aware of the dual use case of images: (i) the dynamic, universal base image which improves efficiency and (ii) the static, derived, bespoke image which you created for your analysis (shared with the world for reproducibility). -You can find Docker images of (recent) older versions of working environments on Docker Hub. -You might think that this is how Docker supports version reproducibility. -However, those will fail to build once the binary dependencies get removed. -Furthermore, Docker itself does not fix the versions of installed system components by default. -Ideally, you want to implement **version control and virtual environments within the container**, to be a "full stack open science developer". +And, once more, those images are not a "holy grail" solution: they are not entirely system independent (e.g. processor architecture), and they might occupy a considerable amount of hard disk space (Dockerfile optimization is warranted). +Ideally, to be a "full stack open science developer", you want to implement **a mixed strategy** consisting virtual environments and containers, wrapped in version control and stored in a backup image. ## "Because Roots Are Important"[^6]: Rootless Mode {#sec-rootless} From 8db7230fdeeef6007963e9a56792cc8c4c4b39cb Mon Sep 17 00:00:00 2001 From: Falk Mielke Date: Thu, 20 Feb 2025 15:34:53 +0100 Subject: [PATCH 28/51] docker: ready for next review round* (another self re-read) - slightly adjusted title - date and tags updated - wording / minor changes - an image of a tiny home - mentioned user permissions --- content/tutorials/development_docker/index.md | 34 +++++++++++------- .../tutorials/development_docker/index.qmd | 27 ++++++++------ .../docker_metaphor_tiny_space.jpg | Bin 0 -> 301479 bytes 3 files changed, 38 insertions(+), 23 deletions(-) create mode 100644 static/images/tutorials/development_docker/docker_metaphor_tiny_space.jpg diff --git a/content/tutorials/development_docker/index.md b/content/tutorials/development_docker/index.md index 6d8b4b2f7..9ce704dd2 100644 --- a/content/tutorials/development_docker/index.md +++ b/content/tutorials/development_docker/index.md @@ -1,10 +1,10 @@ --- -title: Building Containers with Docker and Podman +title: Containers with Docker and Podman description: Introduction to containerization and the practical use of Docker-like tools. -date: "2025-02-11" +date: "2025-02-20" authors: [falkmielke] categories: ["development", "open science"] -tags: ["development", "open science"] +tags: ["development", "open science", "docker", "containers"] number-sections: false params: math: true @@ -127,7 +127,7 @@ For this change to take effect, log off and log in again and restart the Docker Containers are managed by a system task ("service" and "socket") which need to be started. Most likely, your Linux uses `systemd`. Your system can start and stop that service automatically, by using `systemctl enable <...>`. -However, due to [diverse](https://docs.docker.com/engine/security) [security](https://github.com/moby/moby/issues/9976) [pitfalls](https://snyk.io/blog/top-ten-most-popular-docker-images-each-contain-at-least-30-vulnerabilities), it is good practice to **not keep it enabled** permanently on your system. +However, due to [diverse](https://docs.docker.com/engine/security) [security](https://github.com/moby/moby/issues/9976) [pitfalls](https://snyk.io/blog/top-ten-most-popular-docker-images-each-contain-at-least-30-vulnerabilities), it is good practice to **not keep it enabled** permanently on your system (unless, of course, if you use it all the time). On a `systemd` system, you can start and stop Docker on demand via the following commands (those will ask you for `sudo` authentification if necessary). @@ -158,7 +158,14 @@ Docker is about assembling and working in containers. "Living" in containers. Or, rather, you can think of this as living in a ["tiny home", or "mobile home"](https://parametric-architecture.com/tiny-house-movement). Let's call it a fancy caravan. -The good thing is that you get to pick a general design and to choose all details of the interior. +The good thing is that at least you get to pick a general design and to choose all details of the interior. + +
    +Black/white image of a tiny home as a metaphor for software containerization. + +
    + + The best thing: if you feel like you do not have the cash, time, or talent to build your own home, you can *of course* use someone else's. There are a gazillion **Docker images available for you** on [Docker Hub](https://hub.docker.com). @@ -234,12 +241,13 @@ This is a simple and quick way to run R and RStudio in a container. However, there are limitations: -{{% callout emphasize %}} +{{% callout note %}} - You have to live with the R packages provided in the container, or otherwise install them each time you access it... - ... unless you make your container permanent by omitting the `--rm` option. Note that this will cost considerable disk space, will not transfer to other computers (the original purpose of Docker), and demand occasional updates (Section 2.5). - You could alternatively add `--pull always` to `docker run`, which will check and pull new versions. - Speaking of updates: it is good practice to keep software up to date. Occasionally update or simply re-install your Docker image and R packages to get the latest versions. - You should make sure that the containers are configured correctly and securely. This is especially important with server components which expose your machine to the internet. +- Because most containers contain a linux system, user permissions are taken seriously, and the consequences might be confusing. There are guides online ([e.g. here](https://labex.io/tutorials/docker-how-to-handle-permissions-in-docker-415866)); there are example repositories (like the author's own struggle [here](https://github.com/inbo/containbo?tab=readme-ov-file#understanding-volumes) and [here](https://github.com/inbo/containbo/tree/main/emacs)); base images are well set up and one can normally get by with default users. - There is a performance penalty from using containers: in inaccurate laymans' terms, they emulate (parts of a) "computer" inside your computer. {{% /callout %}} @@ -312,7 +320,8 @@ cat ~/test.txt ``` will return: -\> cat: /root/test.txt: No such file or directory + +> cat: /root/test.txt: No such file or directory This behavior is desired (in the second workflow above): if you start up a fresh environment each time you work in Docker, you **assure that your work pipeline is independent of prior changes on the system**. Whether this makes sense as a workflow has to be evaluated with respect to hard drive space requirement, updates, the option to build upon a customized Dockerfile, reproducibility potential. @@ -341,7 +350,7 @@ But it also pays off in complicated server setups and distributed computing. A standardized container from [Docker Hub](https://hub.docker.com) is a good start. However, you will probably require personalization. -As a use case, imagine you would like to have an RStudio server which comes with relevant inbo packages pre-installed (e.g. [`inbodb`](https://inbo.github.io/inbodb), [`watina`](https://inbo.github.io/watina); *cf.* [containbo](https://github.com/inbo/containbo)). +As a use case, imagine you would like to have an RStudio server which comes with relevant inbo packages pre-installed (e.g. [`inbodb`](https://inbo.github.io/inbodb), [`watina`](https://inbo.github.io/watina); *cf.* [the containbo repository](https://github.com/inbo/containbo)). I will return to this use case below. To explore the general workings of `docker build`, let us turn to more web-directed tasks for a change. @@ -477,8 +486,8 @@ One purpose of a Dockerfile may be that you document the exact components of you You start at a base image (e.g. a `rocker`) and add additional software via Dockerfile layers. This is good practice, and encouraged: if you publish an analysis, provide a tested container recipe with it. -However, this alone does not solve the problem of version conflicts. -Documenting the versions of packages you used is an extra step, for which [other tools are available](https://doi.org/10.1038/d41586-023-01469-0). +However, this alone does not solve the problem of version conflicts and deprecation. +Documenting the versions of packages you used is an extra step, for which [other tools are available](https://doi.org/10.1038/d41586-023-01469-0): - It is good practice to report the exact versions of the software used upon publication ([see here, for example](https://arca-dpss.github.io/manual-open-science/requirements-chapter.html)). - Version control such as `git` will track the changes within your own texts, scripts, even version snapshots and Dockerfiles. @@ -515,9 +524,10 @@ all Dockerfiles, build recipes and scripts to establish virtual environments sho However, documenting the exact tools and versions used in a project does not guarantee that these versions will be accessible to future investigators (like oneself, trying to reproduce an analysis five years later). This is where **Docker images** come in. Docker images are the actual containers which you create from the Dockerfile blueprints by the process of building. -Think of a docker image as a virtual copy of your computer which you store for later re-activation. +In the "tiny home" metaphor: your "image" is the physical (small, but real, DIY-achievement) home to live in, built from step-by-step instructions. +Think of a Docker image as a virtual copy of your computer which you store for later re-activation. For example, a collection of images for specific analysis pipelines at INBO are preserved at [Docker Hub/inbobmk](https://hub.docker.com/u/inbobmk). -We consider these "stable" versions because they could be re-activated no matter what crazy updates shatter the R community, which enables us to return to all details of previous analyses. +We consider these "stable" versions because they could be re-activated no matter what crazy future updates will shatter the R community, which enables us to return to all details of previous analyses. Some confusion might arise from the fact that managing these image snapshots is achieved with the same vocabulary as version control, for example you would ["commit"](https://docs.docker.com/reference/cli/docker/container/commit) updated versions and ["push"](https://docs.docker.com/reference/cli/docker/image/push) them to a container repository. diff --git a/content/tutorials/development_docker/index.qmd b/content/tutorials/development_docker/index.qmd index e06c36b0d..a528a80e2 100644 --- a/content/tutorials/development_docker/index.qmd +++ b/content/tutorials/development_docker/index.qmd @@ -1,10 +1,10 @@ --- -title: "Building Containers with Docker and Podman" +title: "Containers with Docker and Podman" description: "Introduction to containerization and the practical use of Docker-like tools." -date: "2025-02-11" +date: "2025-02-20" authors: [falkmielke] categories: ["development", "open science"] -tags: ["development", "open science"] +tags: ["development", "open science", "docker", "containers"] number-sections: false params: math: true @@ -137,7 +137,7 @@ For this change to take effect, log off and log in again and restart the Docker Containers are managed by a system task ("service" and "socket") which need to be started. Most likely, your Linux uses `systemd`. Your system can start and stop that service automatically, by using `systemctl enable <...>`. -However, due to [diverse](https://docs.docker.com/engine/security) [security](https://github.com/moby/moby/issues/9976) [pitfalls](https://snyk.io/blog/top-ten-most-popular-docker-images-each-contain-at-least-30-vulnerabilities), it is good practice to **not keep it enabled** permanently on your system. +However, due to [diverse](https://docs.docker.com/engine/security) [security](https://github.com/moby/moby/issues/9976) [pitfalls](https://snyk.io/blog/top-ten-most-popular-docker-images-each-contain-at-least-30-vulnerabilities), it is good practice to **not keep it enabled** permanently on your system (unless, of course, if you use it all the time). On a `systemd` system, you can start and stop Docker on demand via the following commands (those will ask you for `sudo` authentification if necessary). @@ -175,7 +175,9 @@ Docker is about assembling and working in containers. "Living" in containers. Or, rather, you can think of this as living in a ["tiny home", or "mobile home"](https://parametric-architecture.com/tiny-house-movement). Let's call it a fancy caravan. -The good thing is that you get to pick a general design and to choose all details of the interior. +The good thing is that at least you get to pick a general design and to choose all details of the interior. + +![A tiny home close to "Gare Maritime", Brussels, February 2025.](docker_metaphor_tiny_space.jpg) The best thing: if you feel like you do not have the cash, time, or talent to build your own home, you can *of course* use someone else's. @@ -260,12 +262,13 @@ This is a simple and quick way to run R and RStudio in a container. However, there are limitations: -::: {.callout-warning} +::: {.callout-note} - You have to live with the R packages provided in the container, or otherwise install them each time you access it... - ... unless you make your container permanent by omitting the `--rm` option. Note that this will cost considerable disk space, will not transfer to other computers (the original purpose of Docker), and demand occasional updates ([@sec-permanence]). - You could alternatively add `--pull always` to `docker run`, which will check and pull new versions. - Speaking of updates: it is good practice to keep software up to date. Occasionally update or simply re-install your Docker image and R packages to get the latest versions. - You should make sure that the containers are configured correctly and securely. This is especially important with server components which expose your machine to the internet. +- Because most containers contain a linux system, user permissions are taken seriously, and the consequences might be confusing. There are guides online ([e.g. here](https://labex.io/tutorials/docker-how-to-handle-permissions-in-docker-415866)); there are example repositories (like the author's own struggle [here](https://github.com/inbo/containbo?tab=readme-ov-file#understanding-volumes) and [here](https://github.com/inbo/containbo/tree/main/emacs)); base images are well set up and one can normally get by with default users. - There is a performance penalty from using containers: in inaccurate laymans' terms, they emulate (parts of a) "computer" inside your computer. ::: @@ -352,6 +355,7 @@ cat ~/test.txt ``` will return: + > cat: /root/test.txt: No such file or directory @@ -388,7 +392,7 @@ But it also pays off in complicated server setups and distributed computing. A standardized container from [Docker Hub](https://hub.docker.com) is a good start. However, you will probably require personalization. -As a use case, imagine you would like to have an RStudio server which comes with relevant inbo packages pre-installed (e.g. [`inbodb`](https://inbo.github.io/inbodb), [`watina`](https://inbo.github.io/watina); *cf.* [containbo](https://github.com/inbo/containbo)). +As a use case, imagine you would like to have an RStudio server which comes with relevant inbo packages pre-installed (e.g. [`inbodb`](https://inbo.github.io/inbodb), [`watina`](https://inbo.github.io/watina); *cf.* [the containbo repository](https://github.com/inbo/containbo)). I will return to this use case below. To explore the general workings of `docker build`, let us turn to more web-directed tasks for a change. @@ -539,8 +543,8 @@ One purpose of a Dockerfile may be that you document the exact components of you You start at a base image (e.g. a `rocker`) and add additional software via Dockerfile layers. This is good practice, and encouraged: if you publish an analysis, provide a tested container recipe with it. -However, this alone does not solve the problem of version conflicts. -Documenting the versions of packages you used is an extra step, for which [other tools are available](https://doi.org/10.1038/d41586-023-01469-0). +However, this alone does not solve the problem of version conflicts and deprecation. +Documenting the versions of packages you used is an extra step, for which [other tools are available](https://doi.org/10.1038/d41586-023-01469-0): - It is good practice to report the exact versions of the software used upon publication ([see here, for example](https://arca-dpss.github.io/manual-open-science/requirements-chapter.html)). This is best achieved via virtual environments. - Version control such as `git` will track the changes within your own texts, scripts, even version snapshots and Dockerfiles. @@ -577,9 +581,10 @@ all Dockerfiles, build recipes and scripts to establish virtual environments sho However, documenting the exact tools and versions used in a project does not guarantee that these versions will be accessible to future investigators (like oneself, trying to reproduce an analysis five years later). This is where **Docker images** come in. Docker images are the actual containers which you create from the Dockerfile blueprints by the process of building. -Think of a docker image as a virtual copy of your computer which you store for later re-activation. +In the "tiny home" metaphor: your "image" is the physical (small, but real, DIY-achievement) home to live in, built from step-by-step instructions. +Think of a Docker image as a virtual copy of your computer which you store for later re-activation. For example, a collection of images for specific analysis pipelines at INBO are preserved at [Docker Hub/inbobmk](https://hub.docker.com/u/inbobmk). -We consider these "stable" versions because they could be re-activated no matter what crazy updates shatter the R community, which enables us to return to all details of previous analyses. +We consider these "stable" versions because they could be re-activated no matter what crazy future updates will shatter the R community, which enables us to return to all details of previous analyses. Some confusion might arise from the fact that managing these image snapshots is achieved with the same vocabulary as version control, for example you would ["commit"](https://docs.docker.com/reference/cli/docker/container/commit) updated versions and ["push"](https://docs.docker.com/reference/cli/docker/image/push) them to a container repository. diff --git a/static/images/tutorials/development_docker/docker_metaphor_tiny_space.jpg b/static/images/tutorials/development_docker/docker_metaphor_tiny_space.jpg new file mode 100644 index 0000000000000000000000000000000000000000..63e6b07cd8517d1bd62f7fe9eaf238d02a7ef08c GIT binary patch literal 301479 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 Cg%*i-Ii=PbS)b@a?znT-HJ- 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%0DZ_W2e~N`H0$jJxF(_ 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ΠHJo_V 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'L^2umocRP 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

  1. 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 literal 0 HcmV?d00001 From b8fd9f0fd0e9a6603dc2002c4a72b443529b2b62 Mon Sep 17 00:00:00 2001 From: Falk Mielke Date: Fri, 21 Feb 2025 08:17:00 +0100 Subject: [PATCH 29/51] docker: pre-split changes (review suggestion) --- content/tutorials/development_docker/index.qmd | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/content/tutorials/development_docker/index.qmd b/content/tutorials/development_docker/index.qmd index a528a80e2..d99ebaa93 100644 --- a/content/tutorials/development_docker/index.qmd +++ b/content/tutorials/development_docker/index.qmd @@ -108,8 +108,8 @@ Either way, note that you need to run the docker app or docker in a terminal *as ::: -More info about the installation on Debian-based or Ubuntu Linux systems [can be found here](https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository). -The procedure requires you to add an extra repository, [some caution is warranted](https://wiki.debian.org/DontBreakDebian). +More info about the installation on your specific Linux operation systems [can be found here](https://docs.docker.com/engine/install). +The procedure for Debian or Ubuntu-based distributions involves trusting dockers gpg keys and adding an extra repository, [some caution is warranted](https://wiki.debian.org/DontBreakDebian). ```{sh} #| eval: false @@ -268,7 +268,7 @@ However, there are limitations: - You could alternatively add `--pull always` to `docker run`, which will check and pull new versions. - Speaking of updates: it is good practice to keep software up to date. Occasionally update or simply re-install your Docker image and R packages to get the latest versions. - You should make sure that the containers are configured correctly and securely. This is especially important with server components which expose your machine to the internet. -- Because most containers contain a linux system, user permissions are taken seriously, and the consequences might be confusing. There are guides online ([e.g. here](https://labex.io/tutorials/docker-how-to-handle-permissions-in-docker-415866)); there are example repositories (like the author's own struggle [here](https://github.com/inbo/containbo?tab=readme-ov-file#understanding-volumes) and [here](https://github.com/inbo/containbo/tree/main/emacs)); base images are well set up and one can normally get by with default users. +- Because most containers contain a Linux system, user permissions are taken seriously, and the consequences might be confusing. There are guides online ([e.g. here](https://labex.io/tutorials/docker-how-to-handle-permissions-in-docker-415866)); there are example repositories (like the author's own struggle [here](https://github.com/inbo/containbo?tab=readme-ov-file#understanding-volumes) and [here](https://github.com/inbo/containbo/tree/main/emacs)); base images are well set up and one can normally get by with default users. - There is a performance penalty from using containers: in inaccurate laymans' terms, they emulate (parts of a) "computer" inside your computer. ::: From 4e5f5277e041fbea35d4eae10bcfc8c4c5592233 Mon Sep 17 00:00:00 2001 From: Falk Mielke Date: Fri, 21 Feb 2025 09:32:09 +0100 Subject: [PATCH 30/51] docker: docker_run spin-off --- .../development_docker_run/index.qmd | 264 ++++++++++++++++++ 1 file changed, 264 insertions(+) create mode 100644 content/tutorials/development_docker_run/index.qmd diff --git a/content/tutorials/development_docker_run/index.qmd b/content/tutorials/development_docker_run/index.qmd new file mode 100644 index 000000000..ddb2d0b51 --- /dev/null +++ b/content/tutorials/development_docker_run/index.qmd @@ -0,0 +1,264 @@ +--- +title: "Running Existing Containers" +description: "Pulling and running containers from an online container repository." +date: "2025-02-21" +authors: [falkmielke] +categories: ["development", "open science"] +tags: ["development", "open science", "docker", "containers"] +number-sections: false +params: + math: true +format: + html: + toc: true + html-math-method: katex + hugo-md: + toc: true + preserve_yaml: true + html-math-method: katex +output: + hugo-md: + preserve_yaml: true + variant: gfm+footnotes + html: + variant: gfm+footnotes +--- + + +TODO: cross-links + + + +Docker is about assembling and working in containers. +"Living" in containers. +Or, rather, you can think of this as living in a ["tiny home", or "mobile home"](https://parametric-architecture.com/tiny-house-movement). +(Let's call it a fancy caravan.) +In the simple, but comfortable case, you do not get to pick a general design or to choose all details of the interior: you just take that wheeled cabine "as is" from a tiny home reseller. + +![A tiny home close to "Gare Maritime", Brussels, February 2025.](docker_metaphor_tiny_space.jpg) + + +Just as a tiny home is a mini-version of an immobile house, a container can be thought of as a miniature computer which can be transferred to other computing environments. +The good news: +there are a gazillion **Docker images available** on repositories like [Docker Hub](https://hub.docker.com) or [Quay](https://quay.io). + + +This tutorial will show you how to use such "containers-to-go", thereby demonstrating some basic principles and vocabulary about containerization. +I assume that you have [installed docker](/tutorials/TODO). +This tutorial will stay on the more involved route of running Docker in the terminal (the Docker Desktop "app" is rather self-explanatory, and you can manoever it easily with knowledge of terminal vocabulary). +Once you master these first step, you can proceed to [customize your container images](/tutorials/TODO). +You might also [consider Podman as a Docker alternative](/tutorials/TODO). + + +## Example + +Because of the useful idea of bringing your computer environment along (think of benefits for distributed computing), container images of all kind are abundant on the container repositories mentioned above. +For example[^1], there are Docker images with [rstudio server](https://posit.co/download/rstudio-server) pre-installed: + +- + +[^1]: I mostly follow [this tutorial](https://jsta.github.io/r-docker-tutorial/02-Launching-Docker.html). + + +:::{.callout-note} +If you control containers via the desktop app, simply search, pull, and run it. +::: + +![desktop app: run](docker_desktop2.jpg) + + +If you are comfortable using the terminal, execute the following script (*Windows*: use an administrator terminal). +If it does not find the resources locally, Docker will download and extract the image from Docker Hub[^2]. + +[^2]: Just like "Github" is a server service to store git repositories, guess what: "Docker Hub" is a hosting service to store Docker containers. + +```{sh} +#| eval: false +docker run --rm -p 8787:8787 -e PASSWORD=YOURNEWPASSWORD rocker/rstudio +``` + + +- The `run` command will automatically `pull`, i.e. download an existing image; though you could also `pull` without running. +- The `--rm` flag makes the Docker container non-permanent, i.e. disk space will be freed after you close the container ([@sec-permanence]). +- The port specified at `-p` is the one you use to access this local container server (the `-p` actually maps host- and container ports). You have to specify it explicitly, otherwise the host system will not let you pass (`:gandalf-meme:`). +- The `-e` flag allows you to specify environment variables, in this case used to set a password for the RStudio server. But if you do not specify one, a random password will be generated and displayed upon startup (read the terminal output). + +![run](docker_run.jpg) + + +You are now running (`run`) a `rocker/rstudio` server instance on your `localhost`, i.e. your computer. +You can access it via a browser, going to , with the username `rstudio` and your chosen password. + + +You can shut down the container with the keyboard shortcut `[ctrl]+[C]` (probably `[ctrl]+[Z] [Return]` on Windows). + + +## File Access {#sec-mounting} + +The downside of this is that your container is isolated (well... at least to a certain degree). + +Images can take up considerable storage space. +Storing files locally, i.e. on the host machine, without storing an unneccessarily filled container, might be a good strategy. +This can be achieved by mapping a virtual path on the container to a local drive on your computer. +(Linux users will be familiar with the concept of "mounting" and "linking" storage locations.) +Note that the technique is equally relevant when running the container locally, hence not exclusive to remote hosts. + + +Docker `run` brings the `-v` flag for mounting volumes. +Suppose you have an R project you would like to work on, stored, for example, in this path: + +- `/data/git/coding-club` + + +Then you can link this to your container's home folder via the following command. + +```{sh} +#| eval: false +# Windows syntax, mapping on `D:\data` +docker run --rm -p 8787:8787 -v //d/data/git/coding-club:/home/rstudio/coding-club rocker/rstudio + +# Linux syntax +docker run --rm -p 8787:8787 -v /data/git/coding-club:/home/rstudio/coding-club rocker/rstudio +``` + +Again, navigate to , *et voilà*, you can access your project and store files back in your regular folders. + + +## Limitations + +This is a simple and quick way to run R and RStudio in a container. + +However, there are limitations: + +::: {.callout-note} +- You have to live with the R packages provided in the container, or otherwise install them each time you access it... +- ... unless you make your container permanent by omitting the `--rm` option. Note that this will cost considerable disk space, will not transfer to other computers (the original purpose of Docker), and demand occasional updates ([@sec-permanence]). +- You could alternatively add `--pull always` to `docker run`, which will check and pull new versions. +- Speaking of updates: it is good practice to keep software up to date. Occasionally update or simply re-install your Docker image and R packages to get the latest versions. +- You should make sure that the containers are configured correctly and securely. This is especially important with server components which expose your machine to the internet. +- Because most containers contain a Linux system, user permissions are taken seriously, and the consequences might be confusing. There are guides online ([e.g. here](https://labex.io/tutorials/docker-how-to-handle-permissions-in-docker-415866)); there are example repositories (like the author's own struggle [here](https://github.com/inbo/containbo?tab=readme-ov-file#understanding-volumes) and [here](https://github.com/inbo/containbo/tree/main/emacs)); base images are well set up and one can normally get by with default users. +- There is a performance penalty from using containers: in inaccurate laymans' terms, they emulate (parts of a) "computer" inside your computer. + +::: + + +On the performance issue: I attempted this on my local laptop with matrix multiplication. + +```{r eval=FALSE} +#| eval: false +# https://cran.r-project.org/web/packages/rbenchmark/rbenchmark.pdf +# install.packages("rbenchmark") + +test <- function(){ + # test from https://prdm0.github.io/ropenblas/#installation + m <- 1e4; n <- 1e3; k <- 3e2 + X <- matrix(rnorm(m*k), nrow=m); Y <- matrix(rnorm(n*k), ncol=n) + X %*% Y +} + +benchmark(test()) +``` + +In the terminal: + +```{} + test replications elapsed relative user.self sys.self user.child sys.child +1 test() 100 22.391 1 83.961 65.291 0 0 +``` + +In the container: + +```{} + test replications elapsed relative user.self sys.self user.child sys.child +1 test() 100 26.076 1 102.494 153.89 0 0 +``` + + +Now, the *good news* is that the difference is not by orders of magnitude. +This indicates that the chosen rocker image integrated the more performant `blas` variant which is [recommended](https://pbs-assess.github.io/sdmTMB/index.html#installation) [elsewhere](https://prdm0.github.io/ropenblas/#installation) (`blas-openblas`). + +The *bad news* is that we still a hit of `-20%` performance, which is considerable. + + +This is just a single snapshot on a laptop, and putatively `blas`-confounded. +Feel free to systematically and scientifically repeat the tests on your own machine. + + +## Container Permanence: The `--rm` Option {#sec-permanence} + +As briefly touched above, `docker run` comes with the `--rm` option. +This basically enables two separate workflows, i.e. usage paradigms. + + +The first option, which is the default, is that your container is stored on the system permanently. +This counts for the upstream images, which are downloaded upon first invocation of a container. +But also, changes you apply while working in the container are persistently stored until you log in again, using hard drive space of the host. +Images may still be removed by manually running `docker rmi [...]` ([@sec-commands]). + + +In contrast, with the second option, `docker run --rm [...]`, ad-hoc changes in the container are removed when the container is finished. +Unless, of course, you mount a local volume with `docker run --rm -v [...]` ([@sec-mounting]). +However, contrary to a rather general intuition, starting a container with `--rm` will not require dependency download a second time. + + +You might want to test this for yourself. +Consider the following series of commands to create a test file in the Docker home directory: + +```{sh} +#| eval: false +docker run --name testing_permanence --rm -it docker.io/rocker/r-base +echo "testing permanence." > ~/test.txt +cat ~/test.txt +exit +``` + + +Re-connecting is instantateous. +However, + +```{sh} +#| eval: false +docker run --name testing_permanence --rm -it docker.io/rocker/r-base bash +cat ~/test.txt +``` + +will return: + +> cat: /root/test.txt: No such file or directory + + +This behavior is desired (in the second workflow above): if you start up a fresh environment each time you work in Docker, you **assure that your work pipeline is independent of prior changes on the system**. +Whether this makes sense as a workflow has to be evaluated with respect to hard drive space requirement, updates, the option to build upon a customized Dockerfile, reproducibility potential. + + +You can "link in" folders for working files (note how you have to specify the full path to `new_home`, and that this container uses the root user by default): + +```{sh} +#| eval: false +mkdir new_home +docker run --name testing_permanence -v /data/containers/new_home:/root --rm -it docker.io/rocker/r-base bash +echo "testing permanence." > ~/test.txt +``` + + +Using `--rm` might not be desirable in every case. +However, it is a valuable option for testing, good to have when disk space is sparse, or as a final check before publishing. +Generally, I would consider it good practice to treat containers as volatile, thereby keeping them hostmachine-independent as much as possible. + + +# Summary + +Docker images are the actual containers which you create from the Dockerfile blueprints by the process of building. +In the "tiny home" metaphor: your "image" is the physical (small, but real, DIY-achievement) home to live in, built from step-by-step instructions. +Think of a Docker image as a virtual copy of your computer which you store for later re-activation. + +Luckily, other people have prepared images for you. +For example, a collection of images for specific analysis pipelines at INBO are preserved at [Docker Hub/inbobmk](https://hub.docker.com/u/inbobmk). +We consider these "stable" versions because they could be re-activated no matter what crazy future updates will shatter the R community, which enables us to return to all details of previous analyses. + + +This tutorial provided introductory details on how to run such images. +If you would like to take this further and customize your containers, proceed with [the next tutorial about the `build` command](/tutorials/TODO). +Those commands are practically identical [in Docker and Podman](/tutorials/TODO). + +An overview on the topic is [available here](/tutorials/TODO). From 950f02de356977f0afbe574752dc054eda8fe47e Mon Sep 17 00:00:00 2001 From: Falk Mielke Date: Fri, 21 Feb 2025 09:32:30 +0100 Subject: [PATCH 31/51] docker: docker_build spin-off --- .../development_docker_build/index.qmd | 314 ++++++++++++++++++ 1 file changed, 314 insertions(+) create mode 100644 content/tutorials/development_docker_build/index.qmd diff --git a/content/tutorials/development_docker_build/index.qmd b/content/tutorials/development_docker_build/index.qmd new file mode 100644 index 000000000..0a746a41f --- /dev/null +++ b/content/tutorials/development_docker_build/index.qmd @@ -0,0 +1,314 @@ +--- +title: "Containers with Docker and Podman" +description: "Introduction to containerization and the practical use of Docker-like tools." +date: "2025-02-21" +authors: [falkmielke] +categories: ["development", "open science"] +tags: ["development", "open science", "docker", "containers"] +number-sections: false +params: + math: true +format: + html: + toc: true + html-math-method: katex + hugo-md: + toc: true + preserve_yaml: true + html-math-method: katex +output: + hugo-md: + preserve_yaml: true + variant: gfm+footnotes + html: + variant: gfm+footnotes +--- + + +By now, you [will have successfully installed](/tutorials/TODO) Docker or [Podman](/tutorials/TODO). +You hopefully succeeded in [running others' containers](/tutorials/TODO), e.g. from a container repository. + +Next, it is time to customize your container. + + +To give you a metaphor to work on: imagine you have a nice little DIY project for your garage workshop. +This time, you would like to build your own [Matryoshka dolls](https://en.wikipedia.org/wiki/Matryoshka_doll) (матрёшка, stacking dolls, a great allegory for recursion). + +https://images.unsplash.com/photo-1586010135736-c16373adf060?q=80 +(Photo by Iza Gawrych on Unsplash) + + +Like all good DIY, you do not fully start from scratch: you start with a blueprint which someone else has created, or general building instructions. +You usually do not grow your own trees to get the wood, you buy wooden blocks of approximately the right size; neither do you mix you own paint from elemental ingredients, you assemble what others have to offer. +But with those ingredients, you customize your making and end up with a very individual creation which, ideally, is exactly what you had in mind. + + +Customizing container images with the `build` command is the same business. +Start from an image someone else prepared, as close as possible to your outcome. +Add extra ingredients, few of them are innovative. +Sprinkle in your own files for customization. +The result is a container with a set of components which noone else might have ever used. + + +:::{.callout-note} +With Docker Desktop, you have the graphical interface for "builds". +This might fall under the extended functionality which requires a login. + +Yet even without a login, you *can* proceed via a terminal, as below. +Once you create a `Dockerfile` and build it, it will appear in the GUI. +::: + +![build on Windows](docker_winbuild.jpg) + + + +# Simple Example: A Webserver with Python/`flask` + +## Rationale + +Matryoshka dolls only work because the internal dolls are smaller than the ones covering them. +In terms of software, size is a rather abstract metric, but you might think of different layers as "wrappers" to toher elements. + +For example, [`flask`](https://palletsprojects.com/projects/flask) is a wrapper for other tools ("Werkzeug"), and it is a library within the Python ecosystem. +In this chapter, you will learn how to wrap `flask` in a container. + + +## Init: What is a `flask` + +[Python `flask`](https://en.wikipedia.org/wiki/Flask_(web_framework)) is a library which allows you to execute Python scripts upon web access by users. +Though I will not go into details, know that flask is a useful library for interactive website functions. +For example, you can use flask to gather information a user provides in an html form, then process and store it wherever you like. + + +I started from the following examples and tutorials to spin up a flask container, but provide modifications and comments on the steps. + +- +- + + + +> **It all starts with a [Dockerfile](https://www.geeksforgeeks.org/what-is-dockerfile).**[^3] + +[^3]: Here I quoted the docs () before having read them. + + +As you will see, the Docker file will give you all the design choices to create your own containers. +I think of the Docker file as a script which provides all the instructions to set up your container, starting with `FROM` (i.e. which prior container you build upon) to `RUN`ning any type of commands. +Not *any* type, really: we are working on (mysterious, powerful) Linux - don't fret, it is easier than you think! + + +To our `python/flask` example. +A list of the official python containers is [available here](https://hub.docker.com/_/python). +Note that you build every container upon the skeleton of an operating system: I chose [Alpine Linux](https://en.wikipedia.org/wiki/Alpine_Linux). +(It's *en vogue*.) + + +The Dockerfile resides in your working folder (yet it also defines a [`WORKDIR`](https://stackoverflow.com/a/51066379) from within which later commands are executed). + +- Navigate to a folder in which you intend to store your container(s), e.g. `cd C:\data\docker` (Windows) or `cd /data/docker` (Linux). +- Create a file called `Dockerfile`: `touch Dockerfile`. +- Edit the file in your favorite text editor (`vim Dockerfile`; Windows users probably use "notepad"). +- Paste and optionally modify the content below. + +```{} +# Use the official Python image (Alpine Linux, Python 3) +FROM python:3-alpine + +# install app dependencies +RUN apk update && apk add --no-cache python3 py3-pip +RUN pip install flask + +# install app +COPY hello.py / + +# final configuration +ENV FLASK_APP=hello +EXPOSE 8000 +CMD ["flask", "run", "--host", "0.0.0.0", "--port", "8000"] +``` + + +Note that the following `hello.py` file needs to be present in your working directory (you will be reminded by a friendly error message): + +```{python} +#| eval: false +from flask import Flask +app = Flask(__name__) + +@app.route("/") +def hello(): + return "Hello, INBO!" +``` + + +With the `Dockerfile` and `hello.py` in place, you can build the container [^4]. + +```{sh} +#| eval: false +# on Windows, you are already in an administrator terminal +docker build --pull -t my-flask . + +docker build --pull -t my-flask . +``` + +[^4]: If you did not install the `buildx` package on Linux, you will read a legacy warning. + +On Linux, you might need to use `sudo` if the user is not in the `docker` group, like so: `sudo docker build -t my-flask`. +Using `--pull` is good practice to ensure the download of the latest upstream containers; you could even use `--no-cache` to avoid previous downloads altogether. +The `-t` parameter [will "tag" the image at build time](https://docs.docker.com/get-started/docker-concepts/building-images/build-tag-and-publish-an-image), auto-generating extra metadata. +Also, some variants can omit the final dot ("."), others require it; the dot is just a Linux shorthand reference to the current working directory (i.e. where your Dockerfile resides). + + +![build](docker_build.jpg) + + +List your available container images via the `docker images` command. + +You should now see a `python` image, which is the base alpine image we built upon. +There is also a `my-flask`. +Try it! + +```{sh} +#| eval: false +docker run my-flask +``` + +The terminal should give you an IP and port; because the flask runs in a container, `localhost:8000` will **not work** out-of-the-box. +Instead, in my case, it was `http://172.17.0.2:8000`. +(Sadly, although I could build and run this container on windows, I did not get through via the browser :shrug: but try with port mapping `-p 8000:8000`.) + + +:::{.callout-note} +So far, so good. +We have used an existing image and added `flask` on top of it. +This works via writing a Dockerfile and building an image. +::: + + +## Multiple Images: `compose` *versus* `build` + +The above works fine for most cases. +However, if you want to assemble and combine multiple images, or build on base images from multiple sources, you need a level up. + +In that case `docker compose` is [the way to go](https://docs.docker.com/compose/gettingstarted). +On Debian or Ubuntu, this extra functionality comes with the `docker-compose-plugin`. +I did not have the need to try this out, yet, but will return here if that changes. + + +# Application: RStudio With Packages + +## Rationale + +A Python flask might not be your kind of Matryoshka doll, if you are mainly concerned with heavy R scripting from within your familiar RStudio environment. +To re-iterate: containers are immensely flexible, and images are available for a multitude of situations. + +With the general tools presented above, we should be able to apply the above to modify the `rocker/rstudio` server image for our purpose. + + +Build recipes for some of the INBO packages you might want to include are collected in this repository: + +- + +Contributions are much appreciated! + + +## Dockerfile + +This use case is, in fact, well documented: + +- +- +- + +The Rocker crew rocks! +They prepared quite [a lot of useful images](https://hub.docker.com/u/rocker), including for example the `tidyverse` or geospatial packages. + + +Note the syntax in `FROM`: it is `rocker/:`. + +```{} +FROM rocker/rstudio:latest +# (Use the rocker rstudio image) + +# update the system packages +RUN apt update \ + && apt upgrade --yes + +# git2rdata requires git +RUN apt-get update \ + && apt-get install -y --no-install-recommends \ + git libgit2-dev\ + && apt-get clean + +# update pre-installed R packages +# RUN Rscript -e 'update.packages(ask=FALSE)' + +# copy a `.Rprofile` to the container +# available here: https://tutorials.inbo.be/installation/administrator/admin_install_r/Rprofile.site +COPY docker/.Rprofile $R_HOME/etc/Rprofile.site + +# install package via an R command (`R -q -e` or `Rscript -e`) +# (a) from pre-configured repositories +RUN Rscript -e 'install.packages("git2rdata")' + +# (b) via r-universe +RUN R -q -e 'install.packages("watina", repos = c(inbo = "https://inbo.r-universe.dev", CRAN = "https://cloud.r-project.org"))' + +# (b) from github +RUN R -q -e 'install.packages("remotes")' +RUN R -q -e 'remotes::install_github("inbo/INBOmd", dependencies = TRUE)' +``` + +It takes some puzzle work to get the dependencies right, e.g. with the `libgit2` dependency (try commenting out that line to get a feeling for build failure). +However, there is hope: (i) the error output is quite instructive (at least for Linux users), (ii) building is incremental, so you can add successively. +It just takes patience. +As a shortcut, consider using `pak` ([from r-lib](https://pak.r-lib.org)) or `r2u` ([apt repository](https://github.com/eddelbuettel/r2u)) to implicitly deal with the system dependencies. +Generally, remember which system powers your container (Debian/Ubuntu), find help online, and document your progress. + + +:::{.callout-note} +Dockerfiles offer some room for optimization. +For example, every `RUN` is a "Layer"; you should put stable layers top and volatile layers later. +In principle, it is recommended to combine layers as much as possible. + +More here: +::: + + +Test the image: + +```{sh} +#| eval: false +docker build -t test-rstudio . +``` + + +Run it, as before: + +```{sh} +#| eval: false +docker run --rm -p 8787:8787 -e PASSWORD=YOURNEWPASSWORD test-rstudio +``` + + +Another good practice is to extract modifications in scripts and modularly bring them in to be executed upon installation ([see here](https://stackoverflow.com/q/69167940), [and here](https://rocker-project.org/use/extending.html#install2.r)), via `COPY`. +This exposes them to a more refined version control on the host machine. +As you know, [version control is key!](https://tutorials.inbo.be/tags/git) + + + +# Summary + +Like a Matryoshka doll, software often comes in *layers*, as I have tried to illustrate in the examples above. +When designing and building Dockerfiles, you effectively craft your own DIY Matryoshka. +This may involve tinkering, some sawdust will fall off on the sides, but often the end product is quite presentable. + + +And that is one of the main purposes of a custom docker image: you can store a given set of interrelated software building blocks for later use (reproducibility). +Some of these sets are rather rough, abstract, or general (like the images you get on image repositories, which you can [simply pull and run](/tutorials/TODO)). +Others are bespoke, containing exact requirements for a given task. +Both functions are important building blocks of open science, and I elaborate more about this framework [in the main article on containerization](/tutorials/TODO). +Docker is a specific implementation of the container concept, and you might also want to [try out Podman](/tutorials/TODO) as an alternative. + + +Good luck with all your DIY projects, and thank you for reading! From 52e9a22a7684f81bd8e55a2ac170878cec7c2b25 Mon Sep 17 00:00:00 2001 From: Falk Mielke Date: Fri, 21 Feb 2025 09:48:34 +0100 Subject: [PATCH 32/51] docker: containers_podman spin-off --- .../development_containers_podman/index.qmd | 193 ++++++++++++++++++ .../development_docker_build/index.qmd | 4 +- 2 files changed, 195 insertions(+), 2 deletions(-) create mode 100644 content/tutorials/development_containers_podman/index.qmd diff --git a/content/tutorials/development_containers_podman/index.qmd b/content/tutorials/development_containers_podman/index.qmd new file mode 100644 index 000000000..69c949585 --- /dev/null +++ b/content/tutorials/development_containers_podman/index.qmd @@ -0,0 +1,193 @@ +--- +title: "Containers with Podman" +description: "Podman: a drop-in alternative to Docker." +date: "2025-02-21" +authors: [falkmielke] +categories: ["development", "open science"] +tags: ["development", "open science", "docker", "containers"] +number-sections: false +params: + math: true +format: + html: + toc: true + html-math-method: katex + hugo-md: + toc: true + preserve_yaml: true + html-math-method: katex +output: + hugo-md: + preserve_yaml: true + variant: gfm+footnotes + html: + variant: gfm+footnotes +--- + + +In this cluster of tutorials, you might have [gotten a general overview on containers](/tutorials/TODO), and installed Docker. +You can find instructions on [how to run existing images](/tutorials/TODO), and take this further to [building custom containers](/tutorials/TODO). +And during the installation and use of Docker, you might have been annoyed by the mandatory administrator mode, or quirks of the Desktop App. +Or you might value fully free and open source software, like I do. + + +Luckily, Docker is not a monolith. +There are alternative approaches to containerization which mitigate some of the Docker limitations and disadvantages. +In this tutorial, I will present [Podman](https://podman.io), a Docker alternative which I personally use the most (besides occasionally turning to ["buildah"](https://buildah.io)). + + +# Podman +Podman might be the most prominent Docker alternative. +Vocabulary is marginally different: a container is a "pod", they run on a "machine", and this FOSS tool helps you to manage them with the `podman` command. + +One major advantage of Podman is that it can be configured to run **"rootless"**, i.e. without administrator rights [^5]. +A second advantage is that it is "all community", full Free and Open Source: it does not promote and "enterprise edition". + + +[^5]: Daniel J. Walsh (2019): "How does rootless Podman work?" + + +Podman is [well documented](https://podman.io/docs/installation). +Another reliable source as so often is the [Arch Linux wiki on Podman](https://wiki.archlinux.org/title/Podman), no matter which Linux you are on. +Windows users have succeeded in running Podman through a WSL. + +:::{.callout-note} +For Windows, there is a convenient "Podman Desktop" GUI which guides you through the installation and setup, including WSL instantiation. +It is intuitive, transparent (telemetry opt-out), backed by RedHat. + +Unfortunately, it relies on Windows Subsystem for Linux (WSL), which is not available for INBO users at the moment. + +:( + +We are working on it. +::: + + +# Setup + +The instructions below were tested on Arch Linux, but generalize easily. + +I follow the `podman` installation instructions for Arch Linux, to set up a **rootless container environment**. + + +Installation: + +```{sh} +#| eval: false +pacman -Sy podman podman-docker passt +``` + +The last one, `passt` (providing `pasta`, yum!), is required for rootless network access. +Optionally, there is `podman-compose`. + + +Originally, Podman was designed to run *only if you are root*, just like Docker. +However, we experienced that it now comes in *rootless* configuration per default ([further instructions](https://man.archlinux.org/man/podman.1#Rootless_mode)). +Just to be safe, I briefly list the major configuration steps. + + +The first step is to confirm a required kernel module: check that `unpriviledged_users_clone` is set to one. + +```{sh} +#| eval: false +sysctl kernel.unprivileged_userns_clone +``` + +Then, configure "subordinate user IDs". +There are detail differences in each Linux distribution; with some luck, your username is already present in these lists: + +```{sh} +#| eval: false +cat /etc/subuid +cat /etc/subgid +``` + +If not, you can be admitted to the club of subordinates with the command: + +```{sh} +#| eval: false +usermod --add-subuids 100000-165535 --add-subgids 100000-165535 +podman system migrate +``` + + +We note some useful commands on the way: `podman system ...` and `podman info`. +You might immediately check "native rootless overlays" (has something to do with mounting filesystems in the container): + +```{sh} +#| eval: false +podman info | grep -i overlay +``` + + +Then, networking: pods might need to communicate to each other and to the world. +And, of course, container storage: make sure you know where your containers are stored. +These and more settings are in `/etc/containers/containers.conf` and `/etc/containers/storage.conf`; make sure to scan and edit them to your liking. + + +# Usage + +You can use images from `docker.io` with Podman. +The only difference from Docker is the explicit mention of the source, `docker.io`. +For example: + +```{sh} +#| eval: false +podman search docker.io/alpine +podman pull docker.io/alpine # download a machine +podman run -it docker.io/alpine # will connect to the container +exit +``` + + +Except for the prefix, everything you [can read in our `docker run` tutorial](/tutorials/TODO) still applies. + + +# Limitations + +Note that at least some `docker.io` images will not work: I actually experienced issues with the "rootless Docker image": + +```{sh} +#| eval: false +# podman run --rm -it docker.io/docker:25.0-dind-rootless +``` + +However, it is logical that that one does not work: it builds a (root-level, [@sec-rootless]) Docker which is supposed to contain a rootless Docker. +The outer Docker layer requires root, which Podman cannot provide. + +This is a logical case; if you understand it, congratulations: you have achieved a basic understanding of containers and user privileges :) +There might be yet other images which do not work by default and require additional tinkering in Podman, due to its altered design. +Most use cases are covered, for example a containerized R environment. + + +# Podman Rocker + +From here, **Podman is a full drop-in replacement for Docker**; just that you are not forced to grant host system root privileges to containers. +This means that you can simply apply [everything I showed about the `build` command](/tutorial/TODO) by exchanging `docker` for `podman`. + + +Any Dockerfile should work, with the mentioned mini-adjustment to `FROM`. +And you can use any Docker image; `docker.io/rocker/rstudio` [is available](https://rocker-project.org/use/rootless-podman.html) (don't forget to specify the port). +You may even write `docker` in the terminal: it will alias to `podman` (via the `podman-docker` package on Linux, or an alias). + +```{sh} +#| eval: false +podman run --rm -p 8787:8787 -e PASSWORD=YOURNEWPASSWORD -v /data/git/coding-club:/root/coding-club docker.io/rocker/rstudio +``` + +There is another subtle change: the default user to login to `rstudio` is not `rstudio`, but `root`, because for some reason RStudio needs to have root rights on the container. +You had those before anyways, but now they are confined to within the pod. +There might be workarounds, which I will explore. + + +# Summary + +To summarize the Podman experience: + +- **Docker's Dockerfiles like the one above will build equally well on Podman, except for micro-adjustments compared to Docker.** +- You can even stick to the `docker` commands thanks to the `podman-docker` package. +- There is Podman Desktop, if you like clicking. +- Podman is everything Docker is, just minimally different, and more secure, full FOSS. + + +Kudos to the Podman devs! diff --git a/content/tutorials/development_docker_build/index.qmd b/content/tutorials/development_docker_build/index.qmd index 0a746a41f..e5e803b5d 100644 --- a/content/tutorials/development_docker_build/index.qmd +++ b/content/tutorials/development_docker_build/index.qmd @@ -1,6 +1,6 @@ --- -title: "Containers with Docker and Podman" -description: "Introduction to containerization and the practical use of Docker-like tools." +title: "Building Custom Containers" +description: "How to customize and extend containers with Dockerfiles and the `build` command." date: "2025-02-21" authors: [falkmielke] categories: ["development", "open science"] From 990a04f5cf40117cd5407d8e1ed23e6a31370bb3 Mon Sep 17 00:00:00 2001 From: Falk Mielke Date: Fri, 21 Feb 2025 10:14:47 +0100 Subject: [PATCH 33/51] docker: central node tutorial --- .../tutorials/development_docker/index.qmd | 677 ++---------------- 1 file changed, 51 insertions(+), 626 deletions(-) diff --git a/content/tutorials/development_docker/index.qmd b/content/tutorials/development_docker/index.qmd index d99ebaa93..eeb897810 100644 --- a/content/tutorials/development_docker/index.qmd +++ b/content/tutorials/development_docker/index.qmd @@ -1,7 +1,7 @@ --- title: "Containers with Docker and Podman" description: "Introduction to containerization and the practical use of Docker-like tools." -date: "2025-02-20" +date: "2025-02-21" authors: [falkmielke] categories: ["development", "open science"] tags: ["development", "open science", "docker", "containers"] @@ -33,26 +33,51 @@ Although containerization is an immensely useful Open Science tool worth strivin (iii) Docker has issues, some of them mitigated by configuration adjustment or switching to "Podman". -In this tutorial, I demonstrate step-by-step how to set up and deploy a **custom container** with Docker or Podman. -This is intended to be a rather general test case, serving for later configuration of more specific container solutions. +# Overview + +There are many good applications for containers. + +One advantage of a container is its *mobility*: you can "bring it with you" to other workstations, host it for colleagues or readers, use cloud computing, mostly without having to worry about installation of the components. +Containers pay off in complicated server setups and distributed computing. + +Yet they are also a matter of good *open science* practice: +you can document build instructions for a reproducible analysis environment, +or store and publish a whole image right away. + + +In this notebook, you will find **installation instructions**, [**useful commands**]([@sec-commands]), references, and a loose assembly of general and almost philosophical topics to prime you on the **complications and misconceptions** surrounding containerization. + + +There are numerous useful build instructions and container images already out there, which you can **simply `pull` and `run`**. +This is an easy, entry level application of container software like Docker, [covered in an introductory tutorial](/tutorials/TODO). + + +A second step is to set up and deploy a **self-`build` custom container** I demonstrate step-by-step [in a slightly more advanced tutorial](/tutorials/TODO). +This is intended to be a rather general test case, enabling you to later configure more specific container solutions for your own purpose. For example, you will learn how to spin up an existing `rocker/rstudio` container, and even modify it with additional system components and libraries. -I follow other tutorials available online, and try to capture their essence for an INBO context. -Hence, this is just an assembly of other tutorials, with references - no original ideas to be found below, but nevertheless some guidance. -On Windows, installation, configuration, and management of containers runs via the `docker desktop` app. -However, this tutorial also covers (and in fact focuses on) the terminal-centered steps to be executed on a Linux computer or within a WSL. +For relevant INBO-specific use cases, make sure to [check out the `containbo` repository](https://github.com/inbo/containbo) which documents **even more tipps and tricks** assembled during my humble (but mostly succesful) attempts to get INBO R packages to run in a container environment. -I also present **Podman** as a full replacement for Docker, and recommend to give it a try. +I also present **Podman** as a [full replacement for Docker](/tutorials/TODO), and recommend to give it a try. + + +On Windows, installation, configuration, and management of containers runs via the `docker desktop` app. +However, this series of tutorials also covers (and in fact focuses on) the terminal-centered steps to be executed on a Linux computer or within a WSL. Generally, if you are an INBO user, it is recommended to contact and involve your ICT department for support with the setup. -__References:__ +# General References + +I follow other tutorials available online, and try to capture their essence for an INBO context. +Hence, this series is just an assembly of other tutorials, with references - no original ideas to be found herein, but nevertheless some guidance. +Here is an incomplete list of online material which you might find helpful. - - , +- - - - @@ -167,372 +192,17 @@ docker --version Congratulations: now the fun starts! -# Existing Containers: `run` - -## Rationale - -Docker is about assembling and working in containers. -"Living" in containers. -Or, rather, you can think of this as living in a ["tiny home", or "mobile home"](https://parametric-architecture.com/tiny-house-movement). -Let's call it a fancy caravan. -The good thing is that at least you get to pick a general design and to choose all details of the interior. - -![A tiny home close to "Gare Maritime", Brussels, February 2025.](docker_metaphor_tiny_space.jpg) - - -The best thing: if you feel like you do not have the cash, time, or talent to build your own home, you can *of course* use someone else's. -There are a gazillion **Docker images available for you** on [Docker Hub](https://hub.docker.com). - - -## Example - -For example[^1], there are Docker images with [rstudio server](https://posit.co/download/rstudio-server) pre-installed: - -- - -[^1]: I mostly follow [this tutorial](https://jsta.github.io/r-docker-tutorial/02-Launching-Docker.html). - - -:::{.callout-note} -If you control containers via the desktop app, simply search, pull, and run it. -::: - -![desktop app: run](docker_desktop2.jpg) - - -Otherwise, execute the following script (*Windows*: use an administrator terminal). -If it does not find the resources locally, Docker will download and extract the image from Docker Hub[^2]. - -[^2]: Just like "Github" is a server service to store git repositories, guess what: "Docker Hub" is a hosting service to store Docker containers. - -```{sh} -#| eval: false -docker run --rm -p 8787:8787 -e PASSWORD=YOURNEWPASSWORD rocker/rstudio -``` - - -- The `--rm` flag makes the Docker container non-permanent, i.e. disk space will be freed after you close the container ([@sec-permanence]). -- The port specified at `-p` is the one you use to access this local container server (the `-p` actually maps host- and container ports). You have to specify it explicitly, otherwise the host system will not let you pass (`:gandalf-meme:`). -- The `-e` flag allows you to specify environment variables, in this case used to set a password for the RStudio server. But if you do not specify one, a random password will be generated and displayed upon startup (read the terminal output). +With docker installed, the next step is to run a container image which someone else has prepared and hosted online, [which you can read about in the next tutorial](/tutorials/TODO). -![run](docker_run.jpg) +# The Holy Grail? -You are now running (`run`) a `rocker/rstudio` server instance on your `localhost`, i.e. your computer. -You can access it via a browser, going to , with the username `rstudio` and your chosen password. - - -You can shut down the container with the keyboard shortcut `[ctrl]+[C]` (probably `[ctrl]+[Z] [Return]` on Windows). - - -## File Access {#sec-mounting} - -The downside of this is that your container is isolated (well... at least to a certain degree). - -Images can take up considerable storage space. -Storing files locally, i.e. on the host machine, without storing an unneccessarily filled container, might be a good strategy. -This can be achieved by mapping a virtual path on the container to a local drive on your computer. -(Linux users will be familiar with the concept of "mounting" and "linking" storage locations.) -Note that the technique is equally relevant when running the container locally, hence not exclusive to remote hosts. - - -Docker `run` brings the `-v` flag for mounting volumes. -Suppose you have an R project you would like to work on, stored, for example, in this path: - -- `/data/git/coding-club` - - -Then you can link this to your container's home folder via the following command. - -```{sh} -#| eval: false -# Windows syntax, mapping on `D:\data` -docker run --rm -p 8787:8787 -v //d/data/git/coding-club:/home/rstudio/coding-club rocker/rstudio - -# Linux syntax -docker run --rm -p 8787:8787 -v /data/git/coding-club:/home/rstudio/coding-club rocker/rstudio -``` - -Again, navigate to , *et voilà*, you can access your project and store files back in your regular folders. - - -## Limitations - -This is a simple and quick way to run R and RStudio in a container. - -However, there are limitations: - -::: {.callout-note} -- You have to live with the R packages provided in the container, or otherwise install them each time you access it... -- ... unless you make your container permanent by omitting the `--rm` option. Note that this will cost considerable disk space, will not transfer to other computers (the original purpose of Docker), and demand occasional updates ([@sec-permanence]). -- You could alternatively add `--pull always` to `docker run`, which will check and pull new versions. -- Speaking of updates: it is good practice to keep software up to date. Occasionally update or simply re-install your Docker image and R packages to get the latest versions. -- You should make sure that the containers are configured correctly and securely. This is especially important with server components which expose your machine to the internet. -- Because most containers contain a Linux system, user permissions are taken seriously, and the consequences might be confusing. There are guides online ([e.g. here](https://labex.io/tutorials/docker-how-to-handle-permissions-in-docker-415866)); there are example repositories (like the author's own struggle [here](https://github.com/inbo/containbo?tab=readme-ov-file#understanding-volumes) and [here](https://github.com/inbo/containbo/tree/main/emacs)); base images are well set up and one can normally get by with default users. -- There is a performance penalty from using containers: in inaccurate laymans' terms, they emulate (parts of a) "computer" inside your computer. - -::: - - -On the performance issue: I attempted this on my local laptop with matrix multiplication. - -```{r eval=FALSE} -#| eval: false -# https://cran.r-project.org/web/packages/rbenchmark/rbenchmark.pdf -# install.packages("rbenchmark") - -test <- function(){ - # test from https://prdm0.github.io/ropenblas/#installation - m <- 1e4; n <- 1e3; k <- 3e2 - X <- matrix(rnorm(m*k), nrow=m); Y <- matrix(rnorm(n*k), ncol=n) - X %*% Y -} - -benchmark(test()) -``` - -In the terminal: - -```{} - test replications elapsed relative user.self sys.self user.child sys.child -1 test() 100 22.391 1 83.961 65.291 0 0 -``` - -In the container: - -```{} - test replications elapsed relative user.self sys.self user.child sys.child -1 test() 100 26.076 1 102.494 153.89 0 0 -``` - - -Now, the *good news* is that the difference is not by orders of magnitude. -This indicates that the chosen rocker image integrated the more performant `blas` variant which is [recommended](https://pbs-assess.github.io/sdmTMB/index.html#installation) [elsewhere](https://prdm0.github.io/ropenblas/#installation) (`blas-openblas`). - -The *bad news* is that we still a hit of `-20%` performance, which is considerable. - - -This is just a single snapshot on a laptop, and putatively `blas`-confounded. -Feel free to systematically and scientifically repeat the tests on your own machine. - - -## Container Permanence: The `--rm` Option {#sec-permanence} - -As briefly touched above, `docker run` comes with the `--rm` option. -This basically enables two separate workflows, i.e. usage paradigms. - - -The first option, which is the default, is that your container is stored on the system permanently. -This counts for the upstream images, which are downloaded upon first invocation of a container. -But also, changes you apply while working in the container are persistently stored until you log in again, using hard drive space of the host. -Images may still be removed by manually running `docker rmi [...]` ([@sec-commands]). - - -In contrast, with the second option, `docker run --rm [...]`, ad-hoc changes in the container are removed when the container is finished. -Unless, of course, you mount a local volume with `docker run --rm -v [...]` ([@sec-mounting]). -However, contrary to a rather general intuition, starting a container with `--rm` will not require dependency download a second time. - - -You might want to test this for yourself. -Consider the following series of commands to create a test file in the Docker home directory: - -```{sh} -#| eval: false -docker run --name testing_permanence --rm -it docker.io/rocker/r-base -echo "testing permanence." > ~/test.txt -cat ~/test.txt -exit -``` - - -Re-connecting is instantateous. -However, - -```{sh} -#| eval: false -docker run --name testing_permanence --rm -it docker.io/rocker/r-base bash -cat ~/test.txt -``` - -will return: - -> cat: /root/test.txt: No such file or directory - - -This behavior is desired (in the second workflow above): if you start up a fresh environment each time you work in Docker, you **assure that your work pipeline is independent of prior changes on the system**. -Whether this makes sense as a workflow has to be evaluated with respect to hard drive space requirement, updates, the option to build upon a customized Dockerfile, reproducibility potential. - - -You can "link in" folders for working files (note how you have to specify the full path to `new_home`, and that this container uses the root user by default): - -```{sh} -#| eval: false -mkdir new_home -docker run --name testing_permanence -v /data/containers/new_home:/root --rm -it docker.io/rocker/r-base bash -echo "testing permanence." > ~/test.txt -``` - - -Using `--rm` might not be desirable in every case. -However, it is a valuable option for testing, good to have when disk space is sparse, or as a final check before publishing. -Generally, I would consider it good practice to treat containers as volatile, thereby keeping them hostmachine-independent as much as possible. - - -# Custom Containers: `build` - -(Here follows somewhat advanced stuff. Nevertheless, be brave and give it a read!) - - -## Rationale - -One advantage of a Docker container is its mobility: you can "bring it with you" to other workstations, host it for colleagues or readers, use cloud computing, mostly without having to worry about installation of the components. -This is a matter of good open science practice. -But it also pays off in complicated server setups and distributed computing. - - -A standardized container from [Docker Hub](https://hub.docker.com) is a good start. -However, you will probably require personalization. -As a use case, imagine you would like to have an RStudio server which comes with relevant inbo packages pre-installed (e.g. [`inbodb`](https://inbo.github.io/inbodb), [`watina`](https://inbo.github.io/watina); *cf.* [the containbo repository](https://github.com/inbo/containbo)). - -I will return to this use case below. -To explore the general workings of `docker build`, let us turn to more web-directed tasks for a change. - - -:::{.callout-note} -With Docker Desktop, you have the graphical interface for "builds". -This might fall under the extended functionality which requires a login. - -Yet even without a login, you *can* proceed via a terminal, as below. -Once you create a `Dockerfile` and build it, it will appear in the GUI. -::: - -![build on Windows](docker_winbuild.jpg) - - -## Init: a `flask` - -[Python `flask`](https://en.wikipedia.org/wiki/Flask_(web_framework)) is a library which allows you to execute Python scripts upon web access by users. -For example, you can use flask to gather information a user provides in an html form, then process and store it wherever you like. - - -I started from the following examples and tutorials to spin up a flask container, but provide modifications and comments on the steps. - -- -- - - - -> **It all starts with a [Dockerfile](https://www.geeksforgeeks.org/what-is-dockerfile).**[^3] - -[^3]: Here I quoted the docs () before having read them. - - -As you will see, the Docker file will give you all the design choices to create your own containers. -I think of the Docker file as a script which provides all the instructions to set up your container, starting with `FROM` (i.e. which prior container you build upon) to `RUN`ning any type of commands. -Not *any* type, really: we are working on (mysterious, powerful) Linux - don't fret, it is easier than you think! - - -To our `python/flask` example. -A list of the official python containers is [available here](https://hub.docker.com/_/python). -Note that you build every container upon the skeleton of an operating system: I chose [Alpine Linux](https://en.wikipedia.org/wiki/Alpine_Linux). -(It's *en vogue*.) - - -The Dockerfile resides in your working folder (yet it also defines a [`WORKDIR`](https://stackoverflow.com/a/51066379) from within which later commands are executed). - -- Navigate to a folder in which you intend to store your container(s), e.g. `cd C:\data\docker` (Windows) or `cd /data/docker` (Linux). -- Create a file called `Dockerfile`: `touch Dockerfile`. -- Edit the file in your favorite text editor (`vim Dockerfile`; Windows users probably use "notepad"). -- Paste and optionally modify the content below. - -```{} -# Use the official Python image (Alpine Linux, Python 3) -FROM python:3-alpine - -# install app dependencies -RUN apk update && apk add --no-cache python3 py3-pip -RUN pip install flask - -# install app -COPY hello.py / - -# final configuration -ENV FLASK_APP=hello -EXPOSE 8000 -CMD ["flask", "run", "--host", "0.0.0.0", "--port", "8000"] -``` - - -Note that the following `hello.py` file needs to be present in your working directory (you will be reminded by a friendly error message): - -```{python} -#| eval: false -from flask import Flask -app = Flask(__name__) - -@app.route("/") -def hello(): - return "Hello, INBO!" -``` - - -With the `Dockerfile` and `hello.py` in place, you can build the container [^4]. - -```{sh} -#| eval: false -# on Windows, you are already in an administrator terminal -docker build --pull -t my-flask . - -docker build --pull -t my-flask . -``` - -[^4]: If you did not install the `buildx` package on Linux, you will read a legacy warning. - -On Linux, you might need to use `sudo` if the user is not in the `docker` group, like so: `sudo docker build -t my-flask`. -Using `--pull` is good practice to ensure the download of the latest upstream containers; you could even use `--no-cache` to avoid previous downloads altogether. -The `-t` parameter [will "tag" the image at build time](https://docs.docker.com/get-started/docker-concepts/building-images/build-tag-and-publish-an-image), auto-generating extra metadata. -Also, some variants can omit the final dot ("."), others require it; the dot is just a Linux shorthand reference to the current working directory (i.e. where your Dockerfile resides). - - -![build](docker_build.jpg) - - -List your available container images via the `docker images` command. - -You should now see a `python` image, which is the base alpine image we built upon. -There is also a `my-flask`. -Try it! - -```{sh} -#| eval: false -docker run my-flask -``` - -The terminal should give you an IP and port; because the flask runs in a container, `localhost:8000` will **not work** out-of-the-box. -Instead, in my case, it was `http://172.17.0.2:8000`. -(Sadly, although I could build and run this container on windows, I did not get through via the browser :shrug: but try with port mapping `-p 8000:8000`.) - - -:::{.callout-note} -So far, so good. -We have used an existing image and added `flask` on top of it. -This works via writing a Dockerfile and building an image. -::: - - -## Multiple Images: `compose` *versus* `build` - -The above works fine for most cases. -However, if you want to assemble and combine multiple images, or build on base images from multiple sources, you need a level up. - -In that case `docker compose` is [the way to go](https://docs.docker.com/compose/gettingstarted). -On Debian or Ubuntu, this extra functionality comes with the `docker-compose-plugin`. -I did not have the need to try this out, yet, but will return here if that changes. +Yet to know what containers can achieve and what not, it is useful to understand their general workings, quirks, and relation to other tools. ## Relation to Version Control and Version Management -Back to the initial paradigma of reproducibility: +Back to the initial paradigm of reproducibility: *What exactly is the Open Science aspect of containerization?* This question might have led to some confusion, and I would like to throw in a paragraph of clarification. @@ -612,7 +282,7 @@ Historically, Docker could not run "rootless", i.e. without elevated privileges. Some caution is still warranted: the setup procedure requires downloading and running shell scripts (which must be checked); the deamon still builds on `systemd` (*usually* root level); some functionality is limited. -On the other hand, there is Podman ([@sec-podman]). +On the other hand, there is Podman (cf. the [Podman tutorial](/tutorials/TODO)). It *used to* require almost the same extra steps as the `docker-rootless` to work rootless, but we found that these requirements are now met per default. It seems that, at the time of writing, Docker and Podman have identical capabilities in terms of rootless containerization. The remaining difference is that Podman seems to have more sensible default settings. @@ -620,103 +290,6 @@ The remaining difference is that Podman seems to have more sensible default sett It might therefore be worth considering and exchanging both tools. -# Use Case: RStudio With Packages - -## Rationale - -We should be able to apply the above to modify the `rocker/rstudio` server image for our purpose. - - -Build recipes for some of the INBO packages you might want to include are collected in this repository: - -- - -Contributions are much appreciated! - - -## Dockerfile - -This use case is, in fact, well documented: - -- -- -- - -The Rocker crew rocks! -They prepared quite [a lot of useful images](https://hub.docker.com/u/rocker), including for example the `tidyverse` or geospatial packages. - - -Note the syntax in `FROM`: it is `rocker/:`. - -```{} -FROM rocker/rstudio:latest -# (Use the rocker rstudio image) - -# update the system packages -RUN apt update \ - && apt upgrade --yes - -# git2rdata requires git -RUN apt-get update \ - && apt-get install -y --no-install-recommends \ - git libgit2-dev\ - && apt-get clean - -# update pre-installed R packages -# RUN Rscript -e 'update.packages(ask=FALSE)' - -# copy a `.Rprofile` to the container -# available here: https://tutorials.inbo.be/installation/administrator/admin_install_r/Rprofile.site -COPY docker/.Rprofile $R_HOME/etc/Rprofile.site - -# install package via an R command (`R -q -e` or `Rscript -e`) -# (a) from pre-configured repositories -RUN Rscript -e 'install.packages("git2rdata")' - -# (b) via r-universe -RUN R -q -e 'install.packages("watina", repos = c(inbo = "https://inbo.r-universe.dev", CRAN = "https://cloud.r-project.org"))' - -# (b) from github -RUN R -q -e 'install.packages("remotes")' -RUN R -q -e 'remotes::install_github("inbo/INBOmd", dependencies = TRUE)' -``` - -It takes some puzzle work to get the dependencies right, e.g. with the `libgit2` dependency (try commenting out that line to get a feeling for build failure). -However, there is hope: (i) the error output is quite instructive (at least for Linux users), (ii) building is incremental, so you can add successively. -It just takes patience. -As a shortcut, consider using `pak` ([from r-lib](https://pak.r-lib.org)) or `r2u` ([apt repository](https://github.com/eddelbuettel/r2u)) to implicitly deal with the system dependencies. -Generally, remember which system powers your container (Debian/Ubuntu), find help online, and document your progress. - - -:::{.callout-note} -Dockerfiles offer some room for optimization. -For example, every `RUN` is a "Layer"; you should put stable layers top and volatile layers later. -In principle, it is recommended to combine layers as much as possible. - -More here: -::: - - -Test the image: - -```{sh} -#| eval: false -docker build -t test-rstudio . -``` - - -Run it, as before: - -```{sh} -#| eval: false -docker run --rm -p 8787:8787 -e PASSWORD=YOURNEWPASSWORD test-rstudio -``` - - -Another good practice is to extract modifications in scripts and modularly bring them in to be executed upon installation ([see here](https://stackoverflow.com/q/69167940), [and here](https://rocker-project.org/use/extending.html#install2.r)), via `COPY`. -This exposes them to a more refined version control on the host machine. -As you know, [version control is key!](https://tutorials.inbo.be/tags/git) - But, on that line, how about private repositories? More generally, how would we get (personal) data from our host machine to the container? @@ -759,10 +332,12 @@ This way of handling private repositories [seems to be good practice](https://st The next best alternative would be mounting the `~/.ssh` folder from the host to the container via `-v`. +You can finde some more options [on the `containbo` repository](https://github.com/inbo/containbo). + # Useful Commands {#sec-commands} -We have briefly seen `docker --version`, `docker build`, `docker run`, and there are certainly more settings and tweaks on these commands to learn about. +You will certainly encounter `docker --version`, `docker run`, and `docker build` in this series of tutorials, and there are certainly more settings and tweaks on these commands to learn about. There are other Docker commands which might help you out of a temporary misery. @@ -788,174 +363,24 @@ Anything is possible. You can define an entrypoint in the Dockerfile (i.e. set a default), or overwrite it on each `run`. -# Podman {#sec-podman} - -## Purpose - -There are alternative approaches to containerization which mitigate some of the Docker limitations and disadvantages. - -The most prominent one (or rather the only one *I* looked at, sorry) might be `podman`. -Vocabulary is marginally different: a container is a "pod", they run on a "machine", and this FOSS tool helps you to manage them. -One major advantage of Podman is that it can be configured to run **"rootless"**, i.e. without administrator rights [^5]. -A second advantage is that it is "all community", full Free and Open Source: it does not promote and "enterprise edition". - - -[^5]: Daniel J. Walsh (2019): "How does rootless Podman work?" - - -Podman is [well documented](https://podman.io/docs/installation). -Another reliable source as so often is the [Arch Linux wiki on Podman](https://wiki.archlinux.org/title/Podman), no matter which Linux you are on. -Windows users have succeeded in running Podman through a WSL. - -:::{.callout-note} -For Windows, there is a convenient "Podman Desktop" GUI which guides you through the installation and setup, including WSL instantiation. -It is intuitive, transparent (telemetry opt-out), backed by RedHat. - -Unfortunately, it relies on Windows Subsystem for Linux (WSL), which is not available for INBO users at the moment. - -:( - -We are working on it. -::: - - -## Setup - -The instructions below were tested on Arch Linux, but generalize easily. - -I follow the `podman` installation instructions for Arch Linux, to set up a **rootless container environment**. - - -Installation: - -```{sh} -#| eval: false -pacman -Sy podman podman-docker passt -``` - -The last one, `passt` (providing `pasta`, yum!), is required for rootless network access. -Optionally, there is `podman-compose`. - - -Originally, Podman was designed to run *only if you are root*, just like Docker. -However, we experienced that it now comes in *rootless* configuration per default ([further instructions](https://man.archlinux.org/man/podman.1#Rootless_mode)). -Just to be safe, I briefly list the major configuration steps. - - -The first step is to confirm a required kernel module: check that `unpriviledged_users_clone` is set to one. - -```{sh} -#| eval: false -sysctl kernel.unprivileged_userns_clone -``` - -Then, configure "subordinate user IDs". -There are detail differences in each Linux distribution; with some luck, your username is already present in these lists: - -```{sh} -#| eval: false -cat /etc/subuid -cat /etc/subgid -``` - -If not, you can be admitted to the club of subordinates with the command: - -```{sh} -#| eval: false -usermod --add-subuids 100000-165535 --add-subgids 100000-165535 -podman system migrate -``` - - -We note some useful commands on the way: `podman system ...` and `podman info`. -You might immediately check "native rootless overlays" (has something to do with mounting filesystems in the container): - -```{sh} -#| eval: false -podman info | grep -i overlay -``` - - -Then, networking: pods might need to communicate to each other and to the world. -And, of course, container storage: make sure you know where your containers are stored. -These and more settings are in `/etc/containers/containers.conf` and `/etc/containers/storage.conf`; make sure to scan and edit them to your liking. - - -## Usage - -You can use images from `docker.io` with Podman. -The only difference from Docker is the explicit mention of the source, `docker.io`. -For example: - -```{sh} -#| eval: false -podman search docker.io/alpine -podman pull docker.io/alpine # download a machine -podman run -it docker.io/alpine # will connect to the container -exit -``` - - -## Limitations - -Note that at least some `docker.io` images will not work: I actually experienced issues with the "rootless Docker image": - -```{sh} -#| eval: false -# podman run --rm -it docker.io/docker:25.0-dind-rootless -``` - -However, it is logical that that one does not work: it builds a (root-level, [@sec-rootless]) Docker which is supposed to contain a rootless Docker. -The outer Docker layer requires root, which Podman cannot provide. - -This is a logical case; if you understand it, congratulations: you have achieved a basic understanding of containers and user privileges :) -There might be yet other images which do not work by default and require additional tinkering in Podman, due to its altered design. -Most use cases are covered, for example a containerized R environment. - - -## Podman Rocker - -From here, **Podman is a full drop-in replacement for Docker**; just that you are not forced to grant host system root privileges to containers. - -Any Dockerfile should work, with the mentioned mini-adjustment to `FROM`. -And you can use any Docker image; `docker.io/rocker/rstudio` [is available](https://rocker-project.org/use/rootless-podman.html) (don't forget to specify the port). -You may even write `docker` in the terminal: it will alias to `podman` (via the `podman-docker` package on Linux, or an alias). - -```{sh} -#| eval: false -podman run --rm -p 8787:8787 -e PASSWORD=YOURNEWPASSWORD -v /data/git/coding-club:/root/coding-club docker.io/rocker/rstudio -``` - -There is another subtle change: the default user to login to `rstudio` is not `rstudio`, but `root`, because for some reason RStudio needs to have root rights on the container. -You had those before anyways, but now they are confined to within the pod. -There might be workarounds, which I will explore. - - -:::{.callout-note} -To summarize the Podman experience: - -- **Docker's Dockerfiles like the one above will build equally well on Podman, except for micro-adjustments compared to Docker.** -- You can even stick to the `docker` commands thanks to the `podman-docker` package. -- There is Podman Desktop, if you like clicking. -- Podman is everything Docker is, just minimally different, and more secure, full FOSS. - -::: - -Kudos to the Podman devs! - - # Summary -In this tutorial, I demonstrated the basics of containerization with Docker and Podman. +In this series of tutorials, I demonstrate the basics of containerization with Docker and Podman. There are convenient GUI apps, and sophisticated terminal commands, the latter are much more powerful. +This particular notebook assembled references, useful commands, information about the installation of Docker, and general considerations. -Personally, I find the concept of containerization fascinating, and was surprised how simple and useful of a trick it is. +This is the central node of a series of tutorials; the others are: +- Running containers: +- Building containers: +- Advanced Build Recipes: +- Switching to Podman: +Personally, I find the concept of containerization fascinating, and was surprised how simple and useful of a trick it is. + Containerization offers the advantages of modularity, configurability, transparency (open science: share your rocker file), shared use ... There are some manageable pitfalls with respect to admin rights and resource limitation. - This was just a quick tour; I brushed over a lot of novel vocabulary with which you will have to familiarize yourself. Your head might be twisting in a swirl of containers by now. I hope you find this overview useful, nevertheless. From d4451e7cfc38476145d181c8a8abe2057ba484bc Mon Sep 17 00:00:00 2001 From: Falk Mielke Date: Fri, 21 Feb 2025 10:16:13 +0100 Subject: [PATCH 34/51] docker: rename for generalization --- .../{development_docker => development_containers}/index.md | 0 .../{development_docker => development_containers}/index.qmd | 0 .../{development_docker => development_containers}/notes_qmd.txt | 0 .../index.qmd | 0 .../index.qmd | 0 5 files changed, 0 insertions(+), 0 deletions(-) rename content/tutorials/{development_docker => development_containers}/index.md (100%) rename content/tutorials/{development_docker => development_containers}/index.qmd (100%) rename content/tutorials/{development_docker => development_containers}/notes_qmd.txt (100%) rename content/tutorials/{development_docker_build => development_containers_build}/index.qmd (100%) rename content/tutorials/{development_docker_run => development_containers_run}/index.qmd (100%) diff --git a/content/tutorials/development_docker/index.md b/content/tutorials/development_containers/index.md similarity index 100% rename from content/tutorials/development_docker/index.md rename to content/tutorials/development_containers/index.md diff --git a/content/tutorials/development_docker/index.qmd b/content/tutorials/development_containers/index.qmd similarity index 100% rename from content/tutorials/development_docker/index.qmd rename to content/tutorials/development_containers/index.qmd diff --git a/content/tutorials/development_docker/notes_qmd.txt b/content/tutorials/development_containers/notes_qmd.txt similarity index 100% rename from content/tutorials/development_docker/notes_qmd.txt rename to content/tutorials/development_containers/notes_qmd.txt diff --git a/content/tutorials/development_docker_build/index.qmd b/content/tutorials/development_containers_build/index.qmd similarity index 100% rename from content/tutorials/development_docker_build/index.qmd rename to content/tutorials/development_containers_build/index.qmd diff --git a/content/tutorials/development_docker_run/index.qmd b/content/tutorials/development_containers_run/index.qmd similarity index 100% rename from content/tutorials/development_docker_run/index.qmd rename to content/tutorials/development_containers_run/index.qmd From 8997b9a6aa2603c85eaa4315c24d59e7868c8f78 Mon Sep 17 00:00:00 2001 From: Falk Mielke Date: Fri, 21 Feb 2025 10:19:36 +0100 Subject: [PATCH 35/51] docker: link preparation and testing --- content/tutorials/development_containers/index.qmd | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/content/tutorials/development_containers/index.qmd b/content/tutorials/development_containers/index.qmd index eeb897810..ebfe8ecc4 100644 --- a/content/tutorials/development_containers/index.qmd +++ b/content/tutorials/development_containers/index.qmd @@ -370,10 +370,10 @@ There are convenient GUI apps, and sophisticated terminal commands, the latter a This particular notebook assembled references, useful commands, information about the installation of Docker, and general considerations. This is the central node of a series of tutorials; the others are: -- Running containers: -- Building containers: -- Advanced Build Recipes: -- Switching to Podman: +- Running containers: [https://tutorials.inbo.be/tutorials/development_containers_run](../development_containers_run) +- Building containers: [https://tutorials.inbo.be/tutorials/development_containers_build](../development_containers_build) +- Advanced Build Recipes: [https://github.com/inbo/containbo](https://github.com/inbo/containbo) +- Switching to Podman: [https://tutorials.inbo.be/tutorials/development_containers_podman](../development_containers_podman) Personally, I find the concept of containerization fascinating, and was surprised how simple and useful of a trick it is. From 32e0fef67100cb51aa5d9633f15de18bc5a98d6e Mon Sep 17 00:00:00 2001 From: Falk Mielke Date: Fri, 21 Feb 2025 11:11:01 +0100 Subject: [PATCH 36/51] docker: conversion to `.md` --- .../development_containers/index.bak | 874 ++++++++++++++++++ .../tutorials/development_containers/index.md | 660 ++----------- .../development_containers/notes_qmd.txt | 4 +- .../development_containers_build/index.md | 286 ++++++ .../development_containers_build/index.qmd | 10 +- .../development_containers_podman/index.md | 178 ++++ .../development_containers_podman/index.qmd | 2 +- .../development_containers_run/index.md | 240 +++++ .../development_containers_run/index.qmd | 18 +- 9 files changed, 1662 insertions(+), 610 deletions(-) create mode 100644 content/tutorials/development_containers/index.bak create mode 100644 content/tutorials/development_containers_build/index.md create mode 100644 content/tutorials/development_containers_podman/index.md create mode 100644 content/tutorials/development_containers_run/index.md diff --git a/content/tutorials/development_containers/index.bak b/content/tutorials/development_containers/index.bak new file mode 100644 index 000000000..9ce704dd2 --- /dev/null +++ b/content/tutorials/development_containers/index.bak @@ -0,0 +1,874 @@ +--- +title: Containers with Docker and Podman +description: Introduction to containerization and the practical use of Docker-like tools. +date: "2025-02-20" +authors: [falkmielke] +categories: ["development", "open science"] +tags: ["development", "open science", "docker", "containers"] +number-sections: false +params: + math: true +format: + html: + toc: true + html-math-method: katex + hugo-md: + toc: true + preserve_yaml: true + html-math-method: katex +output: + hugo-md: + preserve_yaml: true + variant: gfm+footnotes + html: + variant: gfm+footnotes +--- + + + +You might have heard about "containerization" with [**Docker**](https://docs.docker.com). +Docker has been labeled "the *Holy Grail* of reproducibility" in [The Open Science Manual by Claudio Zandonella Callegher and Davide Massidda (2023)](https://arca-dpss.github.io/manual-open-science/docker-chapter.html). +Although containerization is an immensely useful Open Science tool worth striving for, the *Holy Grail* is an inaccurate metaphor, because +(i) Unlike The Grail, Docker is easy to find and accessible. +(ii) Docker alone does not make a reproducible workflow; some of its capability is occasionally confused with package version management. +(iii) Docker has issues, some of them mitigated by configuration adjustment or switching to "Podman". + +In this tutorial, I demonstrate step-by-step how to set up and deploy a **custom container** with Docker or Podman. +This is intended to be a rather general test case, serving for later configuration of more specific container solutions. +For example, you will learn how to spin up an existing `rocker/rstudio` container, and even modify it with additional system components and libraries. +I follow other tutorials available online, and try to capture their essence for an INBO context. +Hence, this is just an assembly of other tutorials, with references - no original ideas to be found below, but nevertheless some guidance. + +On Windows, installation, configuration, and management of containers runs via the `docker desktop` app. +However, this tutorial also covers (and in fact focuses on) the terminal-centered steps to be executed on a Linux computer or within a WSL. + +I also present **Podman** as a full replacement for Docker, and recommend to give it a try. + +Generally, if you are an INBO user, it is recommended to contact and involve your ICT department for support with the setup. + +**References:** + +- +- , +- +- +- +- +- +- +- +- + + +# Installation + +The installation procedure [is documented here](https://docs.docker.com/install). + +Docker comes with the *Docker Desktop* app. +That app by itself is trivial and hardly worth a tutorial. + +## Microsoft Windows + +Navigate to [the download site for Docker on Windows](https://docs.docker.com/desktop/setup/install/windows-install). +Download the "App" (newspeak for: graphical user interface to a software tool). +Install it. + +*Note for INBO users:* you might choose to select Hyper-V, instead of WSL, against Docker's recommendation (WSL is not working in our enterprise environment; however, we are trying to improve and ICT might help). +You probably do not have admin rights, which is good. +To re-iterate: **ask our friendly ICT helpdesk for support right away.** + +
    +desktop app + +
    + +Using a convenient app is possible with "Docker Desktop". +On Windows, you can download and install it with administrator rights. +On Linux, that same `docker-desktop` [is available for installation](https://docs.docker.com/desktop/setup/install/linux). +Yet while automating some aspects, the app is not entirely transparent on telemetry and advertisement; some anti-features are included (e.g. required login). +This is unfortunate, because it makes the app less open for more privacy-concerned users. + +The terminal aspect of Docker is entirely free and open source, and universally accessible. +This is why the rest of this tutorial will focus on terminal access. + +## Terminal + +On the Windows terminal or Linux shell, you can install `docker` as a terminal tool. + +{{% callout note %}} +On Windows, this comes bundled with the App; the steps below are not necessary. +There might be ways to get around the Desktop App and facilitate installation, either via WSL2 or using [a windows package manager called Chocolatey](https://en.wikipedia.org/wiki/Chocolatey). + +Either way, note that you need to run the docker app or docker in a terminal *as administrator*. + +{{% /callout %}} + +More info about the installation on Debian-based or Ubuntu Linux systems [can be found here](https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository). +The procedure requires you to add an extra repository, [some caution is warranted](https://wiki.debian.org/DontBreakDebian). + +``` sh +sudo apt update && sudo apt install docker-ce docker-buildx-plugin # debian-based +# sudo pacman -Sy docker docker-buildx # Arch Linux +``` + +As you will notice, this installs a "CE" version of Docker, `docker-ce`. +CE stands for "community edition", as opposed to "enterprise edition" ([cf. here](https://www.geeksforgeeks.org/docker-community-edition-vs-enterprise-edition)). +Many features which you would take for granted in this kind of software (security, consistency, scalability) are handled differently in the two editions, thus it is worth knowing the difference and considering the alternatives. + +For users to be able to use Docker, they must be in the "docker" group. +(Insert your username at ``.) + +``` sh +sudo usermod -a -G docker +``` + +For this change to take effect, log off and log in again and restart the Docker service if it was running. + +Containers are managed by a system task ("service" and "socket") which need to be started. +Most likely, your Linux uses `systemd`. +Your system can start and stop that service automatically, by using `systemctl enable <...>`. +However, due to [diverse](https://docs.docker.com/engine/security) [security](https://github.com/moby/moby/issues/9976) [pitfalls](https://snyk.io/blog/top-ten-most-popular-docker-images-each-contain-at-least-30-vulnerabilities), it is good practice to **not keep it enabled** permanently on your system (unless, of course, if you use it all the time). + +On a `systemd` system, you can start and stop Docker on demand via the following commands (those will ask you for `sudo` authentification if necessary). + +``` sh +systemctl start docker + +systemctl status docker # check status + +systemctl stop docker.socket +systemctl stop docker.service +``` + +For aficionados: docker actually runs multiple services: the docker service, the docker socket, and the [container daemon](https://www.docker.com/blog/containerd-vs-docker) `containerd`. + +You can check the Docker installation by confirming the version at which the service is running. + +``` sh +docker --version +``` + +Congratulations: now the fun starts! + +# Existing Containers: `run` + +## Rationale + +Docker is about assembling and working in containers. +"Living" in containers. +Or, rather, you can think of this as living in a ["tiny home", or "mobile home"](https://parametric-architecture.com/tiny-house-movement). +Let's call it a fancy caravan. +The good thing is that at least you get to pick a general design and to choose all details of the interior. + +
    +Black/white image of a tiny home as a metaphor for software containerization. + +
    + + + +The best thing: if you feel like you do not have the cash, time, or talent to build your own home, you can *of course* use someone else's. +There are a gazillion **Docker images available for you** on [Docker Hub](https://hub.docker.com). + +## Example + +For example[^2], there are Docker images with [rstudio server](https://posit.co/download/rstudio-server) pre-installed: + +- + +{{% callout note %}} +If you control containers via the desktop app, simply search, pull, and run it. +{{% /callout %}} + +
    +desktop app: run + +
    + +Otherwise, execute the following script (*Windows*: use an administrator terminal). +If it does not find the resources locally, Docker will download and extract the image from Docker Hub[^3]. + +``` sh +docker run --rm -p 8787:8787 -e PASSWORD=YOURNEWPASSWORD rocker/rstudio +``` + +- The `--rm` flag makes the Docker container non-permanent, i.e. disk space will be freed after you close the container (Section 2.5). +- The port specified at `-p` is the one you use to access this local container server (the `-p` actually maps host- and container ports). You have to specify it explicitly, otherwise the host system will not let you pass (`:gandalf-meme:`). +- The `-e` flag allows you to specify environment variables, in this case used to set a password for the RStudio server. But if you do not specify one, a random password will be generated and displayed upon startup (read the terminal output). + +
    +run + +
    + +You are now running (`run`) a `rocker/rstudio` server instance on your `localhost`, i.e. your computer. +You can access it via a browser, going to , with the username `rstudio` and your chosen password. + +You can shut down the container with the keyboard shortcut `[ctrl]+[C]` (probably `[ctrl]+[Z] [Return]` on Windows). + + + +## File Access + +The downside of this is that your container is isolated (well... at least to a certain degree). + +Images can take up considerable storage space. +Storing files locally, i.e. on the host machine, without storing an unneccessarily filled container, might be a good strategy. +This can be achieved by mapping a virtual path on the container to a local drive on your computer. +(Linux users will be familiar with the concept of "mounting" and "linking" storage locations.) +Note that the technique is equally relevant when running the container locally, hence not exclusive to remote hosts. + +Docker `run` brings the `-v` flag for mounting volumes. +Suppose you have an R project you would like to work on, stored, for example, in this path: + +- `/data/git/coding-club` + +Then you can link this to your container's home folder via the following command. + +``` sh +# Windows syntax, mapping on `D:\data` +docker run --rm -p 8787:8787 -v //d/data/git/coding-club:/home/rstudio/coding-club rocker/rstudio + +# Linux syntax +docker run --rm -p 8787:8787 -v /data/git/coding-club:/home/rstudio/coding-club rocker/rstudio +``` + +Again, navigate to , *et voilà*, you can access your project and store files back in your regular folders. + +## Limitations + +This is a simple and quick way to run R and RStudio in a container. + +However, there are limitations: + +{{% callout note %}} +- You have to live with the R packages provided in the container, or otherwise install them each time you access it... +- ... unless you make your container permanent by omitting the `--rm` option. Note that this will cost considerable disk space, will not transfer to other computers (the original purpose of Docker), and demand occasional updates (Section 2.5). +- You could alternatively add `--pull always` to `docker run`, which will check and pull new versions. +- Speaking of updates: it is good practice to keep software up to date. Occasionally update or simply re-install your Docker image and R packages to get the latest versions. +- You should make sure that the containers are configured correctly and securely. This is especially important with server components which expose your machine to the internet. +- Because most containers contain a linux system, user permissions are taken seriously, and the consequences might be confusing. There are guides online ([e.g. here](https://labex.io/tutorials/docker-how-to-handle-permissions-in-docker-415866)); there are example repositories (like the author's own struggle [here](https://github.com/inbo/containbo?tab=readme-ov-file#understanding-volumes) and [here](https://github.com/inbo/containbo/tree/main/emacs)); base images are well set up and one can normally get by with default users. +- There is a performance penalty from using containers: in inaccurate laymans' terms, they emulate (parts of a) "computer" inside your computer. +{{% /callout %}} + +On the performance issue: I attempted this on my local laptop with matrix multiplication. + +``` r +# https://cran.r-project.org/web/packages/rbenchmark/rbenchmark.pdf +# install.packages("rbenchmark") + +test <- function(){ + # test from https://prdm0.github.io/ropenblas/#installation + m <- 1e4; n <- 1e3; k <- 3e2 + X <- matrix(rnorm(m*k), nrow=m); Y <- matrix(rnorm(n*k), ncol=n) + X %*% Y +} + +benchmark(test()) +``` + +In the terminal: + + test replications elapsed relative user.self sys.self user.child sys.child + 1 test() 100 22.391 1 83.961 65.291 0 0 + +In the container: + + test replications elapsed relative user.self sys.self user.child sys.child + 1 test() 100 26.076 1 102.494 153.89 0 0 + +Now, the *good news* is that the difference is not by orders of magnitude. +This indicates that the chosen rocker image integrated the more performant `blas` variant which is [recommended](https://pbs-assess.github.io/sdmTMB/index.html#installation) [elsewhere](https://prdm0.github.io/ropenblas/#installation) (`blas-openblas`). + +The *bad news* is that we still a hit of `-20%` performance, which is considerable. + +This is just a single snapshot on a laptop, and putatively `blas`-confounded. +Feel free to systematically and scientifically repeat the tests on your own machine. + + + +## Container Permanence: The `--rm` Option + +As briefly touched above, `docker run` comes with the `--rm` option. +This basically enables two separate workflows, i.e. usage paradigms. + +The first option, which is the default, is that your container is stored on the system permanently. +This counts for the upstream images, which are downloaded upon first invocation of a container. +But also, changes you apply while working in the container are persistently stored until you log in again, using hard drive space of the host. +Images may still be removed by manually running `docker rmi [...]` (Section 5). + +In contrast, with the second option, `docker run --rm [...]`, ad-hoc changes in the container are removed when the container is finished. +Unless, of course, you mount a local volume with `docker run --rm -v [...]` (Section 2.3). +However, contrary to a rather general intuition, starting a container with `--rm` will not require dependency download a second time. + +You might want to test this for yourself. +Consider the following series of commands to create a test file in the Docker home directory: + +``` sh +docker run --name testing_permanence --rm -it docker.io/rocker/r-base +echo "testing permanence." > ~/test.txt +cat ~/test.txt +exit +``` + +Re-connecting is instantateous. +However, + +``` sh +docker run --name testing_permanence --rm -it docker.io/rocker/r-base bash +cat ~/test.txt +``` + +will return: + +> cat: /root/test.txt: No such file or directory + +This behavior is desired (in the second workflow above): if you start up a fresh environment each time you work in Docker, you **assure that your work pipeline is independent of prior changes on the system**. +Whether this makes sense as a workflow has to be evaluated with respect to hard drive space requirement, updates, the option to build upon a customized Dockerfile, reproducibility potential. + +You can "link in" folders for working files (note how you have to specify the full path to `new_home`, and that this container uses the root user by default): + +``` sh +mkdir new_home +docker run --name testing_permanence -v /data/containers/new_home:/root --rm -it docker.io/rocker/r-base bash +echo "testing permanence." > ~/test.txt +``` + +Using `--rm` might not be desirable in every case. +However, it is a valuable option for testing, good to have when disk space is sparse, or as a final check before publishing. +Generally, I would consider it good practice to treat containers as volatile, thereby keeping them hostmachine-independent as much as possible. + +# Custom Containers: `build` + +(Here follows somewhat advanced stuff. Nevertheless, be brave and give it a read!) + +## Rationale + +One advantage of a Docker container is its mobility: you can "bring it with you" to other workstations, host it for colleagues or readers, use cloud computing, mostly without having to worry about installation of the components. +This is a matter of good open science practice. +But it also pays off in complicated server setups and distributed computing. + +A standardized container from [Docker Hub](https://hub.docker.com) is a good start. +However, you will probably require personalization. +As a use case, imagine you would like to have an RStudio server which comes with relevant inbo packages pre-installed (e.g. [`inbodb`](https://inbo.github.io/inbodb), [`watina`](https://inbo.github.io/watina); *cf.* [the containbo repository](https://github.com/inbo/containbo)). + +I will return to this use case below. +To explore the general workings of `docker build`, let us turn to more web-directed tasks for a change. + +{{% callout note %}} +With Docker Desktop, you have the graphical interface for "builds". +This might fall under the extended functionality which requires a login. + +Yet even without a login, you *can* proceed via a terminal, as below. +Once you create a `Dockerfile` and build it, it will appear in the GUI. +{{% /callout %}} + +
    +build on Windows + +
    + +## Init: a `flask` + +[Python `flask`](https://en.wikipedia.org/wiki/Flask_(web_framework)) is a library which allows you to execute Python scripts upon web access by users. +For example, you can use flask to gather information a user provides in an html form, then process and store it wherever you like. + +I started from the following examples and tutorials to spin up a flask container, but provide modifications and comments on the steps. + +- +- + +> **It all starts with a [Dockerfile](https://www.geeksforgeeks.org/what-is-dockerfile).**[^4] + +As you will see, the Docker file will give you all the design choices to create your own containers. +I think of the Docker file as a script which provides all the instructions to set up your container, starting with `FROM` (i.e. which prior container you build upon) to `RUN`ning any type of commands. +Not *any* type, really: we are working on (mysterious, powerful) Linux - don't fret, it is easier than you think! + +To our `python/flask` example. +A list of the official python containers is [available here](https://hub.docker.com/_/python). +Note that you build every container upon the skeleton of an operating system: I chose [Alpine Linux](https://en.wikipedia.org/wiki/Alpine_Linux). +(It's *en vogue*.) + +The Dockerfile resides in your working folder (yet it also defines a [`WORKDIR`](https://stackoverflow.com/a/51066379) from within which later commands are executed). + +- Navigate to a folder in which you intend to store your container(s), e.g. `cd C:\data\docker` (Windows) or `cd /data/docker` (Linux). +- Create a file called `Dockerfile`: `touch Dockerfile`. +- Edit the file in your favorite text editor (`vim Dockerfile`; Windows users probably use "notepad"). +- Paste and optionally modify the content below. + + + + # Use the official Python image (Alpine Linux, Python 3) + FROM python:3-alpine + + # install app dependencies + RUN apk update && apk add --no-cache python3 py3-pip + RUN pip install flask + + # install app + COPY hello.py / + + # final configuration + ENV FLASK_APP=hello + EXPOSE 8000 + CMD ["flask", "run", "--host", "0.0.0.0", "--port", "8000"] + +Note that the following `hello.py` file needs to be present in your working directory (you will be reminded by a friendly error message): + +``` python +from flask import Flask +app = Flask(__name__) + +@app.route("/") +def hello(): + return "Hello, INBO!" +``` + +With the `Dockerfile` and `hello.py` in place, you can build the container [^5]. + +``` sh +# on Windows, you are already in an administrator terminal +docker build --pull -t my-flask . + +docker build --pull -t my-flask . +``` + +On Linux, you might need to use `sudo` if the user is not in the `docker` group, like so: `sudo docker build -t my-flask`. +Using `--pull` is good practice to ensure the download of the latest upstream containers; you could even use `--no-cache` to avoid previous downloads altogether. +The `-t` parameter [will "tag" the image at build time](https://docs.docker.com/get-started/docker-concepts/building-images/build-tag-and-publish-an-image), auto-generating extra metadata. +Also, some variants can omit the final dot ("."), others require it; the dot is just a Linux shorthand reference to the current working directory (i.e. where your Dockerfile resides). + + +
    +build + +
    + +List your available container images via the `docker images` command. + +You should now see a `python` image, which is the base alpine image we built upon. +There is also a `my-flask`. +Try it! + +``` sh +docker run my-flask +``` + +The terminal should give you an IP and port; because the flask runs in a container, `localhost:8000` will **not work** out-of-the-box. +Instead, in my case, it was `http://172.17.0.2:8000`. +(Sadly, although I could build and run this container on windows, I did not get through via the browser :shrug: but try with port mapping `-p 8000:8000`.) + +{{% callout note %}} +So far, so good. +We have used an existing image and added `flask` on top of it. +This works via writing a Dockerfile and building an image. +{{% /callout %}} + +## Multiple Images: `compose` *versus* `build` + +The above works fine for most cases. +However, if you want to assemble and combine multiple images, or build on base images from multiple sources, you need a level up. + +In that case `docker compose` is [the way to go](https://docs.docker.com/compose/gettingstarted). +On Debian or Ubuntu, this extra functionality comes with the `docker-compose-plugin`. +I did not have the need to try this out, yet, but will return here if that changes. + +## Relation to Version Control and Version Management + +Back to the initial paradigma of reproducibility: +*What exactly is the Open Science aspect of containerization?* + +This question might have led to some confusion, and I would like to throw in a paragraph of clarification. +A crucial distinction lies in the preparation of *Dockerfiles* (i.e. build instructions) and the preservation of *images* (i.e. end products of a build process). + + +One purpose of a Dockerfile may be that you document the exact components of your system environment. +You start at a base image (e.g. a `rocker`) and add additional software via Dockerfile layers. +This is good practice, and encouraged: if you publish an analysis, provide a tested container recipe with it. + +However, this alone does not solve the problem of version conflicts and deprecation. +Documenting the versions of packages you used is an extra step, for which [other tools are available](https://doi.org/10.1038/d41586-023-01469-0): + +- It is good practice to report the exact versions of the software used upon publication ([see here, for example](https://arca-dpss.github.io/manual-open-science/requirements-chapter.html)). +- Version control such as `git` will track the changes within your own texts, scripts, even version snapshots and Dockerfiles. +- Finally, docker images can serve as a snapshot of a (virtual) machine on which your code would run. + +{{% callout emphasize %}} +The simple rule of thumb is: use all three methods, ideally all the time. + +Virtual environments. +Version control. +Snapshots. + +Get used to them. +They are easy. +They will save you time and trouble almost immediately. +{{% /callout %}} + + +But unless you use them already, you might require some starting points and directions: here we go. +The second point, **version control**, is a fantastic tool to enable open science, and avoid personal trouble. +You will [find starting points and help in other tutorials on this website](https://tutorials.inbo.be/tags/git). +It might have a steep learning curve, yet [there](https://rstudio.github.io/cheatsheets/git-github.pdf) [are](https://www.sourcetreeapp.com) [fantastic](https://magit.vc) [tools](https://www.sublimemerge.com) to get you started. +The other point, version documentation, is trivially achieved by manual storage of currently installed versions via `sessionInfo()` in R, or `pip freeze > versions.txt` for Python. +A small step towads somewhat more professionalism are **virtual environments**. +Those exist for R ([renv](https://rstudio.github.io/renv/articles/renv.html)) or Python ([venv](https://docs.python.org/3/library/venv.html)). +The `pak` library in R can [handle lock files conveniently](https://pak.r-lib.org/reference/lockfile_install.html) with `pak::lockfile_install()`. +Then there is the integration of R, Python and system packages in `conda`-like tools ([e.g. micromamba](https://mamba.readthedocs.io/en/latest)). +There are even system level tools, for example [`nix` and `rix`](https://docs.ropensci.org/rix). + +The methods are not mutually exclusive: +all Dockerfiles, build recipes and scripts to establish virtual environments should generally be subject to version control. + + +However, documenting the exact tools and versions used in a project does not guarantee that these versions will be accessible to future investigators (like oneself, trying to reproduce an analysis five years later). +This is where **Docker images** come in. +Docker images are the actual containers which you create from the Dockerfile blueprints by the process of building. +In the "tiny home" metaphor: your "image" is the physical (small, but real, DIY-achievement) home to live in, built from step-by-step instructions. +Think of a Docker image as a virtual copy of your computer which you store for later re-activation. +For example, a collection of images for specific analysis pipelines at INBO are preserved at [Docker Hub/inbobmk](https://hub.docker.com/u/inbobmk). +We consider these "stable" versions because they could be re-activated no matter what crazy future updates will shatter the R community, which enables us to return to all details of previous analyses. + + +Some confusion might arise from the fact that managing these image snapshots is achieved with the same vocabulary as version control, for example you would ["commit"](https://docs.docker.com/reference/cli/docker/container/commit) updated versions and ["push"](https://docs.docker.com/reference/cli/docker/image/push) them to a container repository. + +Even more confusion might arise from the fact that you also find ready-made images online, e.g. on [Docker Hub](https://hub.docker.com), or [Quai](https://quay.io), or elsewhere. +These provide images of (recent) versions of working environments, supposed to stand in as starting points for derived containers. +Hence, be aware of the dual use case of images: (i) the dynamic, universal base image which improves efficiency and (ii) the static, derived, bespoke image which you created for your analysis (shared with the world for reproducibility). + + +And, once more, those images are not a "holy grail" solution: they are not entirely system independent (e.g. processor architecture), and they might occupy a considerable amount of hard disk space (Dockerfile optimization is warranted). +Ideally, to be a "full stack open science developer", you want to implement **a mixed strategy** consisting virtual environments and containers, wrapped in version control and stored in a backup image. + + + +## "Because Roots Are Important"[^6]: Rootless Mode + +One of the main criticism about Docker is the necessity to run in a privileged user environment, which is indeed a security issue. +This may refer to the system process requiring elevated privileges, or users in the `docker` system group [effectively having superuser privileges](https://github.com/moby/moby/issues/9976). +Because of the risk of privilege escalation in case of a container breakout, this situation would worsen existing vulnerabilities, [of which there are some](https://snyk.io/blog/top-5-docker-security-vulnerabilities) in [Docker containers](https://www.docker.com/blog/container-security-and-why-it-matters). + +Historically, Docker could not run "rootless", i.e. without elevated privileges. +[This seems to have changed](https://docs.docker.com/engine/security/rootless), according to Docker. +Some caution is still warranted: the setup procedure requires downloading and running shell scripts (which must be checked); the deamon still builds on `systemd` (*usually* root level); some functionality is limited. + +On the other hand, there is Podman (Section 6). +It *used to* require almost the same extra steps as the `docker-rootless` to work rootless, but we found that these requirements are now met per default. +It seems that, at the time of writing, Docker and Podman have identical capabilities in terms of rootless containerization. +The remaining difference is that Podman seems to have more sensible default settings. + +It might therefore be worth considering and exchanging both tools. + +# Use Case: RStudio With Packages + +## Rationale + +We should be able to apply the above to modify the `rocker/rstudio` server image for our purpose. + +Build recipes for some of the INBO packages you might want to include are collected in this repository: + +- + +Contributions are much appreciated! + +## Dockerfile + +This use case is, in fact, well documented: + +- +- +- + +The Rocker crew rocks! +They prepared quite [a lot of useful images](https://hub.docker.com/u/rocker), including for example the `tidyverse` or geospatial packages. + +Note the syntax in `FROM`: it is `rocker/:`. + +``` +FROM rocker/rstudio:latest +# (Use the rocker rstudio image) + +# update the system packages +RUN apt update \ + && apt upgrade --yes + +# git2rdata requires git +RUN apt-get update \ + && apt-get install -y --no-install-recommends \ + git libgit2-dev\ + && apt-get clean + +# update pre-installed R packages +# RUN Rscript -e 'update.packages(ask=FALSE)' + +# copy a `.Rprofile` to the container +# available here: https://tutorials.inbo.be/installation/administrator/admin_install_r/Rprofile.site +COPY docker/.Rprofile $R_HOME/etc/Rprofile.site + +# install package via an R command (`R -q -e` or `Rscript -e`) +# (a) from pre-configured repositories +RUN Rscript -e 'install.packages("git2rdata")' + +# (b) via r-universe +RUN R -q -e 'install.packages("watina", repos = c(inbo = "https://inbo.r-universe.dev", CRAN = "https://cloud.r-project.org"))' + +# (b) from github +RUN R -q -e 'install.packages("remotes")' +RUN R -q -e 'remotes::install_github("inbo/INBOmd", dependencies = TRUE)' +``` + +It takes some puzzle work to get the dependencies right, e.g. with the `libgit2` dependency (try commenting out that line to get a feeling for build failure). +However, there is hope: (i) the error output is quite instructive (at least for Linux users), (ii) building is incremental, so you can add successively. +It just takes patience. +As a shortcut, consider using `pak` ([from r-lib](https://pak.r-lib.org)) or `r2u` ([apt repository](https://github.com/eddelbuettel/r2u)) to implicitly deal with the system dependencies. +Generally, remember which system powers your container (Debian/Ubuntu), find help online, and document your progress. + +{{% callout note %}} +Dockerfiles offer some room for optimization. +For example, every `RUN` is a "Layer"; you should put stable layers top and volatile layers later. +In principle, it is recommended to combine layers as much as possible. + +More here: +{{% /callout %}} + +Test the image: + +``` sh +docker build -t test-rstudio . +``` + +Run it, as before: + +``` sh +docker run --rm -p 8787:8787 -e PASSWORD=YOURNEWPASSWORD test-rstudio +``` + +Another good practice is to extract modifications in scripts and modularly bring them in to be executed upon installation ([see here](https://stackoverflow.com/q/69167940), [and here](https://rocker-project.org/use/extending.html#install2.r)), via `COPY`. +This exposes them to a more refined version control on the host machine. +As you know, [version control is key!](https://tutorials.inbo.be/tags/git) + +But, on that line, how about private repositories? +More generally, how would we get (personal) data from our host machine to the container? + +## Data Exchange + +Arguably, among the rather tricky tasks when working with containers is file exchange. +There are [several options available](https://forums.docker.com/t/best-practices-for-getting-code-into-a-container-git-clone-vs-copy-vs-data-container/4077): + +- `COPY` in the Dockerfile (or `ADD` [in appropriate cases](https://www.docker.com/blog/docker-best-practices-understanding-the-differences-between-add-and-copy-instructions-in-dockerfiles)) +- ["bind mounts"](https://docs.docker.com/engine/storage/bind-mounts) +- [volumes](https://docs.docker.com/engine/storage/volumes) +- R's own ways of installing from far (e.g. `remotes::install_github()`) + +For the use case of [installing R packages from a private git repo](https://www.geeksforgeeks.org/how-to-clone-private-git-repo-with-dockerfile), there are several constraints: + +- It best happens at build time, to enable all the good stuff: `--rm`, sharing, ... +- Better keep your credentials (e.g. ssh keys, access tokens) off the container, both system side and [on the R side](https://usethis.r-lib.org/articles/git-credentials.html). +- On the other hand, updates can often happen by re-building. + +In this (and only this) situation, the simple solution is to copy a clone of the repository to the container, and then install it. +The `git clone` should reside within the Dockerfile folder. +Then the Dockerfile section can look like the following: + + # copy the repo + COPY my_private_repo /opt/my_private_repo + + # manually install dependencies + RUN R -q -e 'install.packages("remotes", dependencies = TRUE)' + + # install package from folder + RUN R -q -e 'install.packages("/opt/my_private_repo", repos = NULL, type = "source", dependencies = TRUE)' + +This way of handling private repositories [seems to be good practice](https://stackoverflow.com/questions/23391839/clone-private-git-repo-with-dockerfile/55761914#55761914), for being simple, secure, and generally most feasible. + +The next best alternative would be mounting the `~/.ssh` folder from the host to the container via `-v`. + + + +# Useful Commands + +We have briefly seen `docker --version`, `docker build`, `docker run`, and there are certainly more settings and tweaks on these commands to learn about. + +There are other Docker commands which might help you out of a temporary misery. + +- First and foremost, `docker --help` will list the available commands and options. +- `docker run -it --entrypoint /bin/bash ` or `docker run -it /bin/bash` brings you to the shell of a container; you can update, upgrade, or just mess around. Try `bash` or `bin/sh` as alternatives. +- `docker images` will list your images in convenient table format; the `-q` flag returns only IDs. +- `docker inspect ` brings up all the configuration details about a specific image; you can, for example, find out its Docker version and network IP address. +- `docker ps` ("print status") will list all running containers; `docker stop $(docker ps -a -q)` will stop them **all**. +- Be aware that docker images occupy a considerable amount of hard disk space. `docker rmi ` will remove an image; `docker rmi $(docker images -q)` will remove **all** your images. The command `docker system prune` provides an interactive cleanup, `docker system prune --all` will clean up non-interactively. Of course, you get to keep the Dockerfiles. +- `docker commit` and `docker diff` support the creation and maintenance of snapshots of processed images, which you could keep locally, or upload them to an online storage such as Docker Hub. + +There are a gazillion more to choose and use. +A more complete list can be found [here, for example](https://do4ds.com/chapters/append/cheatsheets.html#cheat-docker), and the [Docker docs](https://docs.docker.com/reference/cli/docker) are your go-to source. + + +One more note on the `ENTRYPOINT`: +It defines through which terminal or script the user will access the container. +For example, `/bin/bash`, `/usr/bin/bash` or `bin/sh` are the bash (Linux terminal on the container). +Rocker images usually enter into an R console, or monitor an RStudio server, via an `/init` script. +The flask container above runs a script which hosts your website and Python. +Anything is possible. +You can define an entrypoint in the Dockerfile (i.e. set a default), or overwrite it on each `run`. + + + +# Podman + +## Purpose + +There are alternative approaches to containerization which mitigate some of the Docker limitations and disadvantages. + +The most prominent one (or rather the only one *I* looked at, sorry) might be `podman`. +Vocabulary is marginally different: a container is a "pod", they run on a "machine", and this FOSS tool helps you to manage them. +One major advantage of Podman is that it can be configured to run **"rootless"**, i.e. without administrator rights [^7]. +A second advantage is that it is "all community", full Free and Open Source: it does not promote and "enterprise edition". + +Podman is [well documented](https://podman.io/docs/installation). +Another reliable source as so often is the [Arch Linux wiki on Podman](https://wiki.archlinux.org/title/Podman), no matter which Linux you are on. +Windows users have succeeded in running Podman through a WSL. + +{{% callout note %}} +For Windows, there is a convenient "Podman Desktop" GUI which guides you through the installation and setup, including WSL instantiation. +It is intuitive, transparent (telemetry opt-out), backed by RedHat. + +Unfortunately, it relies on Windows Subsystem for Linux (WSL), which is not available for INBO users at the moment. + +:( + +We are working on it. +{{% /callout %}} + +## Setup + +The instructions below were tested on Arch Linux, but generalize easily. + +I follow the `podman` installation instructions for Arch Linux, to set up a **rootless container environment**. + +Installation: + +``` sh +pacman -Sy podman podman-docker passt +``` + +The last one, `passt` (providing `pasta`, yum!), is required for rootless network access. +Optionally, there is `podman-compose`. + +Originally, Podman was designed to run *only if you are root*, just like Docker. +However, we experienced that it now comes in *rootless* configuration per default ([further instructions](https://man.archlinux.org/man/podman.1#Rootless_mode)). +Just to be safe, I briefly list the major configuration steps. + +The first step is to confirm a required kernel module: check that `unpriviledged_users_clone` is set to one. + +``` sh +sysctl kernel.unprivileged_userns_clone +``` + +Then, configure "subordinate user IDs". +There are detail differences in each Linux distribution; with some luck, your username is already present in these lists: + +``` sh +cat /etc/subuid +cat /etc/subgid +``` + +If not, you can be admitted to the club of subordinates with the command: + +``` sh +usermod --add-subuids 100000-165535 --add-subgids 100000-165535 +podman system migrate +``` + +We note some useful commands on the way: `podman system ...` and `podman info`. +You might immediately check "native rootless overlays" (has something to do with mounting filesystems in the container): + +``` sh +podman info | grep -i overlay +``` + +Then, networking: pods might need to communicate to each other and to the world. +And, of course, container storage: make sure you know where your containers are stored. +These and more settings are in `/etc/containers/containers.conf` and `/etc/containers/storage.conf`; make sure to scan and edit them to your liking. + +## Usage + +You can use images from `docker.io` with Podman. +The only difference from Docker is the explicit mention of the source, `docker.io`. +For example: + +``` sh +podman search docker.io/alpine +podman pull docker.io/alpine # download a machine +podman run -it docker.io/alpine # will connect to the container +exit +``` + +## Limitations + +Note that at least some `docker.io` images will not work: I actually experienced issues with the "rootless Docker image": + +``` sh +# podman run --rm -it docker.io/docker:25.0-dind-rootless +``` + +However, it is logical that that one does not work: it builds a (root-level, Section 3.5) Docker which is supposed to contain a rootless Docker. +The outer Docker layer requires root, which Podman cannot provide. + +This is a logical case; if you understand it, congratulations: you have achieved a basic understanding of containers and user privileges :) +There might be yet other images which do not work by default and require additional tinkering in Podman, due to its altered design. +Most use cases are covered, for example a containerized R environment. + +## Podman Rocker + +From here, **Podman is a full drop-in replacement for Docker**; just that you are not forced to grant host system root privileges to containers. + +Any Dockerfile should work, with the mentioned mini-adjustment to `FROM`. +And you can use any Docker image; `docker.io/rocker/rstudio` [is available](https://rocker-project.org/use/rootless-podman.html) (don't forget to specify the port). +You may even write `docker` in the terminal: it will alias to `podman` (via the `podman-docker` package on Linux, or an alias). + +``` sh +podman run --rm -p 8787:8787 -e PASSWORD=YOURNEWPASSWORD -v /data/git/coding-club:/root/coding-club docker.io/rocker/rstudio +``` + +There is another subtle change: the default user to login to `rstudio` is not `rstudio`, but `root`, because for some reason RStudio needs to have root rights on the container. +You had those before anyways, but now they are confined to within the pod. +There might be workarounds, which I will explore. + +{{% callout note %}} +To summarize the Podman experience: + +- **Docker's Dockerfiles like the one above will build equally well on Podman, except for micro-adjustments compared to Docker.** +- You can even stick to the `docker` commands thanks to the `podman-docker` package. +- There is Podman Desktop, if you like clicking. +- Podman is everything Docker is, just minimally different, and more secure, full FOSS. +{{% /callout %}} + +Kudos to the Podman devs! + +# Summary + +In this tutorial, I demonstrated the basics of containerization with Docker and Podman. +There are convenient GUI apps, and sophisticated terminal commands, the latter are much more powerful. + +Personally, I find the concept of containerization fascinating, and was surprised how simple and useful of a trick it is. + +Containerization offers the advantages of modularity, configurability, transparency (open science: share your rocker file), shared use ... +There are some manageable pitfalls with respect to admin rights and resource limitation. + +This was just a quick tour; I brushed over a lot of novel vocabulary with which you will have to familiarize yourself. +Your head might be twisting in a swirl of containers by now. +I hope you find this overview useful, nevertheless. +Thank you for reading! + + +[^2]: I mostly follow [this tutorial](https://jsta.github.io/r-docker-tutorial/02-Launching-Docker.html). + +[^3]: Just like "Github" is a server service to store git repositories, guess what: "Docker Hub" is a hosting service to store Docker containers. + +[^4]: Here I quoted the docs () before having read them. + +[^5]: If you did not install the `buildx` package on Linux, you will read a legacy warning. + +[^6]: Reference to the film "La Grande Bellezza". + +[^7]: Daniel J. Walsh (2019): "How does rootless Podman work?" diff --git a/content/tutorials/development_containers/index.md b/content/tutorials/development_containers/index.md index 9ce704dd2..63284f1cc 100644 --- a/content/tutorials/development_containers/index.md +++ b/content/tutorials/development_containers/index.md @@ -1,7 +1,7 @@ --- title: Containers with Docker and Podman description: Introduction to containerization and the practical use of Docker-like tools. -date: "2025-02-20" +date: '2025-02-21' authors: [falkmielke] categories: ["development", "open science"] tags: ["development", "open science", "docker", "containers"] @@ -33,23 +33,44 @@ Although containerization is an immensely useful Open Science tool worth strivin (ii) Docker alone does not make a reproducible workflow; some of its capability is occasionally confused with package version management. (iii) Docker has issues, some of them mitigated by configuration adjustment or switching to "Podman". -In this tutorial, I demonstrate step-by-step how to set up and deploy a **custom container** with Docker or Podman. -This is intended to be a rather general test case, serving for later configuration of more specific container solutions. +# Overview + +There are many good applications for containers. + +One advantage of a container is its *mobility*: you can "bring it with you" to other workstations, host it for colleagues or readers, use cloud computing, mostly without having to worry about installation of the components. +Containers pay off in complicated server setups and distributed computing. + +Yet they are also a matter of good *open science* practice: +you can document build instructions for a reproducible analysis environment, +or store and publish a whole image right away. + +In this notebook, you will find **installation instructions**, useful commands, references, and a loose assembly of general and almost philosophical topics to prime you on the **complications and misconceptions** surrounding containerization. + +There are numerous useful build instructions and container images already out there, which you can **simply `pull` and `run`**. +This is an easy, entry level application of container software like Docker, [covered in an introductory tutorial](../../../tutorials/TODO). + +A second step is to set up and deploy a **self-`build` custom container** I demonstrate step-by-step [in a slightly more advanced tutorial](../../../tutorials/TODO). +This is intended to be a rather general test case, enabling you to later configure more specific container solutions for your own purpose. For example, you will learn how to spin up an existing `rocker/rstudio` container, and even modify it with additional system components and libraries. -I follow other tutorials available online, and try to capture their essence for an INBO context. -Hence, this is just an assembly of other tutorials, with references - no original ideas to be found below, but nevertheless some guidance. -On Windows, installation, configuration, and management of containers runs via the `docker desktop` app. -However, this tutorial also covers (and in fact focuses on) the terminal-centered steps to be executed on a Linux computer or within a WSL. +For relevant INBO-specific use cases, make sure to [check out the `containbo` repository](https://github.com/inbo/containbo) which documents **even more tipps and tricks** assembled during my humble (but mostly succesful) attempts to get INBO R packages to run in a container environment. -I also present **Podman** as a full replacement for Docker, and recommend to give it a try. +I also present **Podman** as a [full replacement for Docker](../../../tutorials/TODO), and recommend to give it a try. + +On Windows, installation, configuration, and management of containers runs via the `docker desktop` app. +However, this series of tutorials also covers (and in fact focuses on) the terminal-centered steps to be executed on a Linux computer or within a WSL. Generally, if you are an INBO user, it is recommended to contact and involve your ICT department for support with the setup. -**References:** +# General References + +I follow other tutorials available online, and try to capture their essence for an INBO context. +Hence, this series is just an assembly of other tutorials, with references - no original ideas to be found herein, but nevertheless some guidance. +Here is an incomplete list of online material which you might find helpful. - - , +- - - - @@ -59,7 +80,6 @@ Generally, if you are an INBO user, it is recommended to contact and involve you - - - # Installation The installation procedure [is documented here](https://docs.docker.com/install). @@ -100,13 +120,13 @@ On Windows, this comes bundled with the App; the steps below are not necessary. There might be ways to get around the Desktop App and facilitate installation, either via WSL2 or using [a windows package manager called Chocolatey](https://en.wikipedia.org/wiki/Chocolatey). Either way, note that you need to run the docker app or docker in a terminal *as administrator*. - {{% /callout %}} -More info about the installation on Debian-based or Ubuntu Linux systems [can be found here](https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository). -The procedure requires you to add an extra repository, [some caution is warranted](https://wiki.debian.org/DontBreakDebian). +More info about the installation on your specific Linux operation systems [can be found here](https://docs.docker.com/engine/install). +The procedure for Debian or Ubuntu-based distributions involves trusting dockers gpg keys and adding an extra repository, [some caution is warranted](https://wiki.debian.org/DontBreakDebian). -``` sh +``` {sh} +#| eval: false sudo apt update && sudo apt install docker-ce docker-buildx-plugin # debian-based # sudo pacman -Sy docker docker-buildx # Arch Linux ``` @@ -118,7 +138,8 @@ Many features which you would take for granted in this kind of software (securit For users to be able to use Docker, they must be in the "docker" group. (Insert your username at ``.) -``` sh +``` {sh} +#| eval: false sudo usermod -a -G docker ``` @@ -131,7 +152,8 @@ However, due to [diverse](https://docs.docker.com/engine/security) [security](ht On a `systemd` system, you can start and stop Docker on demand via the following commands (those will ask you for `sudo` authentification if necessary). -``` sh +``` {sh} +#| eval: false systemctl start docker systemctl status docker # check status @@ -144,356 +166,39 @@ For aficionados: docker actually runs multiple services: the docker service, the You can check the Docker installation by confirming the version at which the service is running. -``` sh +``` {sh} +#| eval: false docker --version ``` Congratulations: now the fun starts! -# Existing Containers: `run` - -## Rationale - -Docker is about assembling and working in containers. -"Living" in containers. -Or, rather, you can think of this as living in a ["tiny home", or "mobile home"](https://parametric-architecture.com/tiny-house-movement). -Let's call it a fancy caravan. -The good thing is that at least you get to pick a general design and to choose all details of the interior. - -
    -Black/white image of a tiny home as a metaphor for software containerization. - -
    - - - -The best thing: if you feel like you do not have the cash, time, or talent to build your own home, you can *of course* use someone else's. -There are a gazillion **Docker images available for you** on [Docker Hub](https://hub.docker.com). - -## Example - -For example[^2], there are Docker images with [rstudio server](https://posit.co/download/rstudio-server) pre-installed: - -- - -{{% callout note %}} -If you control containers via the desktop app, simply search, pull, and run it. -{{% /callout %}} - -
    -desktop app: run - -
    - -Otherwise, execute the following script (*Windows*: use an administrator terminal). -If it does not find the resources locally, Docker will download and extract the image from Docker Hub[^3]. - -``` sh -docker run --rm -p 8787:8787 -e PASSWORD=YOURNEWPASSWORD rocker/rstudio -``` - -- The `--rm` flag makes the Docker container non-permanent, i.e. disk space will be freed after you close the container (Section 2.5). -- The port specified at `-p` is the one you use to access this local container server (the `-p` actually maps host- and container ports). You have to specify it explicitly, otherwise the host system will not let you pass (`:gandalf-meme:`). -- The `-e` flag allows you to specify environment variables, in this case used to set a password for the RStudio server. But if you do not specify one, a random password will be generated and displayed upon startup (read the terminal output). - -
    -run - -
    - -You are now running (`run`) a `rocker/rstudio` server instance on your `localhost`, i.e. your computer. -You can access it via a browser, going to , with the username `rstudio` and your chosen password. - -You can shut down the container with the keyboard shortcut `[ctrl]+[C]` (probably `[ctrl]+[Z] [Return]` on Windows). - - - -## File Access - -The downside of this is that your container is isolated (well... at least to a certain degree). - -Images can take up considerable storage space. -Storing files locally, i.e. on the host machine, without storing an unneccessarily filled container, might be a good strategy. -This can be achieved by mapping a virtual path on the container to a local drive on your computer. -(Linux users will be familiar with the concept of "mounting" and "linking" storage locations.) -Note that the technique is equally relevant when running the container locally, hence not exclusive to remote hosts. - -Docker `run` brings the `-v` flag for mounting volumes. -Suppose you have an R project you would like to work on, stored, for example, in this path: - -- `/data/git/coding-club` - -Then you can link this to your container's home folder via the following command. - -``` sh -# Windows syntax, mapping on `D:\data` -docker run --rm -p 8787:8787 -v //d/data/git/coding-club:/home/rstudio/coding-club rocker/rstudio - -# Linux syntax -docker run --rm -p 8787:8787 -v /data/git/coding-club:/home/rstudio/coding-club rocker/rstudio -``` - -Again, navigate to , *et voilà*, you can access your project and store files back in your regular folders. - -## Limitations - -This is a simple and quick way to run R and RStudio in a container. - -However, there are limitations: - -{{% callout note %}} -- You have to live with the R packages provided in the container, or otherwise install them each time you access it... -- ... unless you make your container permanent by omitting the `--rm` option. Note that this will cost considerable disk space, will not transfer to other computers (the original purpose of Docker), and demand occasional updates (Section 2.5). -- You could alternatively add `--pull always` to `docker run`, which will check and pull new versions. -- Speaking of updates: it is good practice to keep software up to date. Occasionally update or simply re-install your Docker image and R packages to get the latest versions. -- You should make sure that the containers are configured correctly and securely. This is especially important with server components which expose your machine to the internet. -- Because most containers contain a linux system, user permissions are taken seriously, and the consequences might be confusing. There are guides online ([e.g. here](https://labex.io/tutorials/docker-how-to-handle-permissions-in-docker-415866)); there are example repositories (like the author's own struggle [here](https://github.com/inbo/containbo?tab=readme-ov-file#understanding-volumes) and [here](https://github.com/inbo/containbo/tree/main/emacs)); base images are well set up and one can normally get by with default users. -- There is a performance penalty from using containers: in inaccurate laymans' terms, they emulate (parts of a) "computer" inside your computer. -{{% /callout %}} - -On the performance issue: I attempted this on my local laptop with matrix multiplication. - -``` r -# https://cran.r-project.org/web/packages/rbenchmark/rbenchmark.pdf -# install.packages("rbenchmark") - -test <- function(){ - # test from https://prdm0.github.io/ropenblas/#installation - m <- 1e4; n <- 1e3; k <- 3e2 - X <- matrix(rnorm(m*k), nrow=m); Y <- matrix(rnorm(n*k), ncol=n) - X %*% Y -} - -benchmark(test()) -``` - -In the terminal: - - test replications elapsed relative user.self sys.self user.child sys.child - 1 test() 100 22.391 1 83.961 65.291 0 0 - -In the container: - - test replications elapsed relative user.self sys.self user.child sys.child - 1 test() 100 26.076 1 102.494 153.89 0 0 - -Now, the *good news* is that the difference is not by orders of magnitude. -This indicates that the chosen rocker image integrated the more performant `blas` variant which is [recommended](https://pbs-assess.github.io/sdmTMB/index.html#installation) [elsewhere](https://prdm0.github.io/ropenblas/#installation) (`blas-openblas`). - -The *bad news* is that we still a hit of `-20%` performance, which is considerable. - -This is just a single snapshot on a laptop, and putatively `blas`-confounded. -Feel free to systematically and scientifically repeat the tests on your own machine. - - - -## Container Permanence: The `--rm` Option - -As briefly touched above, `docker run` comes with the `--rm` option. -This basically enables two separate workflows, i.e. usage paradigms. - -The first option, which is the default, is that your container is stored on the system permanently. -This counts for the upstream images, which are downloaded upon first invocation of a container. -But also, changes you apply while working in the container are persistently stored until you log in again, using hard drive space of the host. -Images may still be removed by manually running `docker rmi [...]` (Section 5). - -In contrast, with the second option, `docker run --rm [...]`, ad-hoc changes in the container are removed when the container is finished. -Unless, of course, you mount a local volume with `docker run --rm -v [...]` (Section 2.3). -However, contrary to a rather general intuition, starting a container with `--rm` will not require dependency download a second time. - -You might want to test this for yourself. -Consider the following series of commands to create a test file in the Docker home directory: - -``` sh -docker run --name testing_permanence --rm -it docker.io/rocker/r-base -echo "testing permanence." > ~/test.txt -cat ~/test.txt -exit -``` - -Re-connecting is instantateous. -However, - -``` sh -docker run --name testing_permanence --rm -it docker.io/rocker/r-base bash -cat ~/test.txt -``` - -will return: - -> cat: /root/test.txt: No such file or directory - -This behavior is desired (in the second workflow above): if you start up a fresh environment each time you work in Docker, you **assure that your work pipeline is independent of prior changes on the system**. -Whether this makes sense as a workflow has to be evaluated with respect to hard drive space requirement, updates, the option to build upon a customized Dockerfile, reproducibility potential. - -You can "link in" folders for working files (note how you have to specify the full path to `new_home`, and that this container uses the root user by default): - -``` sh -mkdir new_home -docker run --name testing_permanence -v /data/containers/new_home:/root --rm -it docker.io/rocker/r-base bash -echo "testing permanence." > ~/test.txt -``` - -Using `--rm` might not be desirable in every case. -However, it is a valuable option for testing, good to have when disk space is sparse, or as a final check before publishing. -Generally, I would consider it good practice to treat containers as volatile, thereby keeping them hostmachine-independent as much as possible. - -# Custom Containers: `build` - -(Here follows somewhat advanced stuff. Nevertheless, be brave and give it a read!) - -## Rationale - -One advantage of a Docker container is its mobility: you can "bring it with you" to other workstations, host it for colleagues or readers, use cloud computing, mostly without having to worry about installation of the components. -This is a matter of good open science practice. -But it also pays off in complicated server setups and distributed computing. - -A standardized container from [Docker Hub](https://hub.docker.com) is a good start. -However, you will probably require personalization. -As a use case, imagine you would like to have an RStudio server which comes with relevant inbo packages pre-installed (e.g. [`inbodb`](https://inbo.github.io/inbodb), [`watina`](https://inbo.github.io/watina); *cf.* [the containbo repository](https://github.com/inbo/containbo)). - -I will return to this use case below. -To explore the general workings of `docker build`, let us turn to more web-directed tasks for a change. - -{{% callout note %}} -With Docker Desktop, you have the graphical interface for "builds". -This might fall under the extended functionality which requires a login. - -Yet even without a login, you *can* proceed via a terminal, as below. -Once you create a `Dockerfile` and build it, it will appear in the GUI. -{{% /callout %}} - -
    -build on Windows - -
    - -## Init: a `flask` - -[Python `flask`](https://en.wikipedia.org/wiki/Flask_(web_framework)) is a library which allows you to execute Python scripts upon web access by users. -For example, you can use flask to gather information a user provides in an html form, then process and store it wherever you like. - -I started from the following examples and tutorials to spin up a flask container, but provide modifications and comments on the steps. - -- -- - -> **It all starts with a [Dockerfile](https://www.geeksforgeeks.org/what-is-dockerfile).**[^4] - -As you will see, the Docker file will give you all the design choices to create your own containers. -I think of the Docker file as a script which provides all the instructions to set up your container, starting with `FROM` (i.e. which prior container you build upon) to `RUN`ning any type of commands. -Not *any* type, really: we are working on (mysterious, powerful) Linux - don't fret, it is easier than you think! - -To our `python/flask` example. -A list of the official python containers is [available here](https://hub.docker.com/_/python). -Note that you build every container upon the skeleton of an operating system: I chose [Alpine Linux](https://en.wikipedia.org/wiki/Alpine_Linux). -(It's *en vogue*.) - -The Dockerfile resides in your working folder (yet it also defines a [`WORKDIR`](https://stackoverflow.com/a/51066379) from within which later commands are executed). - -- Navigate to a folder in which you intend to store your container(s), e.g. `cd C:\data\docker` (Windows) or `cd /data/docker` (Linux). -- Create a file called `Dockerfile`: `touch Dockerfile`. -- Edit the file in your favorite text editor (`vim Dockerfile`; Windows users probably use "notepad"). -- Paste and optionally modify the content below. - - - - # Use the official Python image (Alpine Linux, Python 3) - FROM python:3-alpine - - # install app dependencies - RUN apk update && apk add --no-cache python3 py3-pip - RUN pip install flask - - # install app - COPY hello.py / - - # final configuration - ENV FLASK_APP=hello - EXPOSE 8000 - CMD ["flask", "run", "--host", "0.0.0.0", "--port", "8000"] - -Note that the following `hello.py` file needs to be present in your working directory (you will be reminded by a friendly error message): - -``` python -from flask import Flask -app = Flask(__name__) - -@app.route("/") -def hello(): - return "Hello, INBO!" -``` - -With the `Dockerfile` and `hello.py` in place, you can build the container [^5]. - -``` sh -# on Windows, you are already in an administrator terminal -docker build --pull -t my-flask . +With docker installed, the next step is to run a container image which someone else has prepared and hosted online, [which you can read about in the next tutorial](../../../tutorials/TODO). -docker build --pull -t my-flask . -``` - -On Linux, you might need to use `sudo` if the user is not in the `docker` group, like so: `sudo docker build -t my-flask`. -Using `--pull` is good practice to ensure the download of the latest upstream containers; you could even use `--no-cache` to avoid previous downloads altogether. -The `-t` parameter [will "tag" the image at build time](https://docs.docker.com/get-started/docker-concepts/building-images/build-tag-and-publish-an-image), auto-generating extra metadata. -Also, some variants can omit the final dot ("."), others require it; the dot is just a Linux shorthand reference to the current working directory (i.e. where your Dockerfile resides). - - -
    -build - -
    - -List your available container images via the `docker images` command. - -You should now see a `python` image, which is the base alpine image we built upon. -There is also a `my-flask`. -Try it! - -``` sh -docker run my-flask -``` - -The terminal should give you an IP and port; because the flask runs in a container, `localhost:8000` will **not work** out-of-the-box. -Instead, in my case, it was `http://172.17.0.2:8000`. -(Sadly, although I could build and run this container on windows, I did not get through via the browser :shrug: but try with port mapping `-p 8000:8000`.) - -{{% callout note %}} -So far, so good. -We have used an existing image and added `flask` on top of it. -This works via writing a Dockerfile and building an image. -{{% /callout %}} - -## Multiple Images: `compose` *versus* `build` - -The above works fine for most cases. -However, if you want to assemble and combine multiple images, or build on base images from multiple sources, you need a level up. +# The Holy Grail? -In that case `docker compose` is [the way to go](https://docs.docker.com/compose/gettingstarted). -On Debian or Ubuntu, this extra functionality comes with the `docker-compose-plugin`. -I did not have the need to try this out, yet, but will return here if that changes. +Yet to know what containers can achieve and what not, it is useful to understand their general workings, quirks, and relation to other tools. ## Relation to Version Control and Version Management -Back to the initial paradigma of reproducibility: +Back to the initial paradigm of reproducibility: *What exactly is the Open Science aspect of containerization?* This question might have led to some confusion, and I would like to throw in a paragraph of clarification. -A crucial distinction lies in the preparation of *Dockerfiles* (i.e. build instructions) and the preservation of *images* (i.e. end products of a build process). - +A crucial distinction lies in the preparation of *Dockerfiles* (i.e. build instructions) and the preservation of *images* (i.e. end products of a build process). One purpose of a Dockerfile may be that you document the exact components of your system environment. -You start at a base image (e.g. a `rocker`) and add additional software via Dockerfile layers. +You start at a base image (e.g. a `rocker`) and add additional software via Dockerfile layers. This is good practice, and encouraged: if you publish an analysis, provide a tested container recipe with it. However, this alone does not solve the problem of version conflicts and deprecation. Documenting the versions of packages you used is an extra step, for which [other tools are available](https://doi.org/10.1038/d41586-023-01469-0): -- It is good practice to report the exact versions of the software used upon publication ([see here, for example](https://arca-dpss.github.io/manual-open-science/requirements-chapter.html)). -- Version control such as `git` will track the changes within your own texts, scripts, even version snapshots and Dockerfiles. +- It is good practice to report the exact versions of the software used upon publication ([see here, for example](https://arca-dpss.github.io/manual-open-science/requirements-chapter.html)). This is best achieved via virtual environments. +- Version control such as `git` will track the changes within your own texts, scripts, even version snapshots and Dockerfiles. - Finally, docker images can serve as a snapshot of a (virtual) machine on which your code would run. -{{% callout emphasize %}} +{{% callout note %}} The simple rule of thumb is: use all three methods, ideally all the time. Virtual environments. @@ -505,11 +210,10 @@ They are easy. They will save you time and trouble almost immediately. {{% /callout %}} - But unless you use them already, you might require some starting points and directions: here we go. The second point, **version control**, is a fantastic tool to enable open science, and avoid personal trouble. -You will [find starting points and help in other tutorials on this website](https://tutorials.inbo.be/tags/git). It might have a steep learning curve, yet [there](https://rstudio.github.io/cheatsheets/git-github.pdf) [are](https://www.sourcetreeapp.com) [fantastic](https://magit.vc) [tools](https://www.sublimemerge.com) to get you started. +You will [find starting points and help in other tutorials on this website](https://tutorials.inbo.be/tags/git). The other point, version documentation, is trivially achieved by manual storage of currently installed versions via `sessionInfo()` in R, or `pip freeze > versions.txt` for Python. A small step towads somewhat more professionalism are **virtual environments**. Those exist for R ([renv](https://rstudio.github.io/renv/articles/renv.html)) or Python ([venv](https://docs.python.org/3/library/venv.html)). @@ -520,7 +224,6 @@ There are even system level tools, for example [`nix` and `rix`](https://docs.ro The methods are not mutually exclusive: all Dockerfiles, build recipes and scripts to establish virtual environments should generally be subject to version control. - However, documenting the exact tools and versions used in a project does not guarantee that these versions will be accessible to future investigators (like oneself, trying to reproduce an analysis five years later). This is where **Docker images** come in. Docker images are the actual containers which you create from the Dockerfile blueprints by the process of building. @@ -529,20 +232,18 @@ Think of a Docker image as a virtual copy of your computer which you store for l For example, a collection of images for specific analysis pipelines at INBO are preserved at [Docker Hub/inbobmk](https://hub.docker.com/u/inbobmk). We consider these "stable" versions because they could be re-activated no matter what crazy future updates will shatter the R community, which enables us to return to all details of previous analyses. - Some confusion might arise from the fact that managing these image snapshots is achieved with the same vocabulary as version control, for example you would ["commit"](https://docs.docker.com/reference/cli/docker/container/commit) updated versions and ["push"](https://docs.docker.com/reference/cli/docker/image/push) them to a container repository. -Even more confusion might arise from the fact that you also find ready-made images online, e.g. on [Docker Hub](https://hub.docker.com), or [Quai](https://quay.io), or elsewhere. -These provide images of (recent) versions of working environments, supposed to stand in as starting points for derived containers. +Even more confusion might arise from the fact that you also find ready-made images online, e.g. on [Docker Hub](https://hub.docker.com), or [Quai](https://quay.io), or elsewhere. +These provide images of (recent) versions of working environments, supposed to stand in as starting points for derived containers. Hence, be aware of the dual use case of images: (i) the dynamic, universal base image which improves efficiency and (ii) the static, derived, bespoke image which you created for your analysis (shared with the world for reproducibility). - -And, once more, those images are not a "holy grail" solution: they are not entirely system independent (e.g. processor architecture), and they might occupy a considerable amount of hard disk space (Dockerfile optimization is warranted). -Ideally, to be a "full stack open science developer", you want to implement **a mixed strategy** consisting virtual environments and containers, wrapped in version control and stored in a backup image. +And, once more, those images are not a "holy grail" solution: they are not entirely system independent (e.g. processor architecture), and they might occupy a considerable amount of hard disk space (Dockerfile optimization is warranted). +Ideally, to be a "full stack open science developer", you want to implement **a mixed strategy** consisting virtual environments and containers, wrapped in version control and stored in a backup image. -## "Because Roots Are Important"[^6]: Rootless Mode +## "Because Roots Are Important"[^1]: Rootless Mode One of the main criticism about Docker is the necessity to run in a privileged user environment, which is indeed a security issue. This may refer to the system process requiring elevated privileges, or users in the `docker` system group [effectively having superuser privileges](https://github.com/moby/moby/issues/9976). @@ -552,101 +253,13 @@ Historically, Docker could not run "rootless", i.e. without elevated privileges [This seems to have changed](https://docs.docker.com/engine/security/rootless), according to Docker. Some caution is still warranted: the setup procedure requires downloading and running shell scripts (which must be checked); the deamon still builds on `systemd` (*usually* root level); some functionality is limited. -On the other hand, there is Podman (Section 6). +On the other hand, there is Podman (cf. the [Podman tutorial](../../../tutorials/TODO)). It *used to* require almost the same extra steps as the `docker-rootless` to work rootless, but we found that these requirements are now met per default. It seems that, at the time of writing, Docker and Podman have identical capabilities in terms of rootless containerization. The remaining difference is that Podman seems to have more sensible default settings. It might therefore be worth considering and exchanging both tools. -# Use Case: RStudio With Packages - -## Rationale - -We should be able to apply the above to modify the `rocker/rstudio` server image for our purpose. - -Build recipes for some of the INBO packages you might want to include are collected in this repository: - -- - -Contributions are much appreciated! - -## Dockerfile - -This use case is, in fact, well documented: - -- -- -- - -The Rocker crew rocks! -They prepared quite [a lot of useful images](https://hub.docker.com/u/rocker), including for example the `tidyverse` or geospatial packages. - -Note the syntax in `FROM`: it is `rocker/:`. - -``` -FROM rocker/rstudio:latest -# (Use the rocker rstudio image) - -# update the system packages -RUN apt update \ - && apt upgrade --yes - -# git2rdata requires git -RUN apt-get update \ - && apt-get install -y --no-install-recommends \ - git libgit2-dev\ - && apt-get clean - -# update pre-installed R packages -# RUN Rscript -e 'update.packages(ask=FALSE)' - -# copy a `.Rprofile` to the container -# available here: https://tutorials.inbo.be/installation/administrator/admin_install_r/Rprofile.site -COPY docker/.Rprofile $R_HOME/etc/Rprofile.site - -# install package via an R command (`R -q -e` or `Rscript -e`) -# (a) from pre-configured repositories -RUN Rscript -e 'install.packages("git2rdata")' - -# (b) via r-universe -RUN R -q -e 'install.packages("watina", repos = c(inbo = "https://inbo.r-universe.dev", CRAN = "https://cloud.r-project.org"))' - -# (b) from github -RUN R -q -e 'install.packages("remotes")' -RUN R -q -e 'remotes::install_github("inbo/INBOmd", dependencies = TRUE)' -``` - -It takes some puzzle work to get the dependencies right, e.g. with the `libgit2` dependency (try commenting out that line to get a feeling for build failure). -However, there is hope: (i) the error output is quite instructive (at least for Linux users), (ii) building is incremental, so you can add successively. -It just takes patience. -As a shortcut, consider using `pak` ([from r-lib](https://pak.r-lib.org)) or `r2u` ([apt repository](https://github.com/eddelbuettel/r2u)) to implicitly deal with the system dependencies. -Generally, remember which system powers your container (Debian/Ubuntu), find help online, and document your progress. - -{{% callout note %}} -Dockerfiles offer some room for optimization. -For example, every `RUN` is a "Layer"; you should put stable layers top and volatile layers later. -In principle, it is recommended to combine layers as much as possible. - -More here: -{{% /callout %}} - -Test the image: - -``` sh -docker build -t test-rstudio . -``` - -Run it, as before: - -``` sh -docker run --rm -p 8787:8787 -e PASSWORD=YOURNEWPASSWORD test-rstudio -``` - -Another good practice is to extract modifications in scripts and modularly bring them in to be executed upon installation ([see here](https://stackoverflow.com/q/69167940), [and here](https://rocker-project.org/use/extending.html#install2.r)), via `COPY`. -This exposes them to a more refined version control on the host machine. -As you know, [version control is key!](https://tutorials.inbo.be/tags/git) - But, on that line, how about private repositories? More generally, how would we get (personal) data from our host machine to the container? @@ -683,11 +296,13 @@ This way of handling private repositories [seems to be good practice](https://st The next best alternative would be mounting the `~/.ssh` folder from the host to the container via `-v`. +You can finde some more options [on the `containbo` repository](https://github.com/inbo/containbo). + # Useful Commands -We have briefly seen `docker --version`, `docker build`, `docker run`, and there are certainly more settings and tweaks on these commands to learn about. +You will certainly encounter `docker --version`, `docker run`, and `docker build` in this series of tutorials, and there are certainly more settings and tweaks on these commands to learn about. There are other Docker commands which might help you out of a temporary misery. @@ -702,7 +317,6 @@ There are other Docker commands which might help you out of a temporary misery. There are a gazillion more to choose and use. A more complete list can be found [here, for example](https://do4ds.com/chapters/append/cheatsheets.html#cheat-docker), and the [Docker docs](https://docs.docker.com/reference/cli/docker) are your go-to source. - One more note on the `ENTRYPOINT`: It defines through which terminal or script the user will access the container. For example, `/bin/bash`, `/usr/bin/bash` or `bin/sh` are the bash (Linux terminal on the container). @@ -711,144 +325,17 @@ The flask container above runs a script which hosts your website and Python. Anything is possible. You can define an entrypoint in the Dockerfile (i.e. set a default), or overwrite it on each `run`. - - -# Podman - -## Purpose - -There are alternative approaches to containerization which mitigate some of the Docker limitations and disadvantages. - -The most prominent one (or rather the only one *I* looked at, sorry) might be `podman`. -Vocabulary is marginally different: a container is a "pod", they run on a "machine", and this FOSS tool helps you to manage them. -One major advantage of Podman is that it can be configured to run **"rootless"**, i.e. without administrator rights [^7]. -A second advantage is that it is "all community", full Free and Open Source: it does not promote and "enterprise edition". - -Podman is [well documented](https://podman.io/docs/installation). -Another reliable source as so often is the [Arch Linux wiki on Podman](https://wiki.archlinux.org/title/Podman), no matter which Linux you are on. -Windows users have succeeded in running Podman through a WSL. - -{{% callout note %}} -For Windows, there is a convenient "Podman Desktop" GUI which guides you through the installation and setup, including WSL instantiation. -It is intuitive, transparent (telemetry opt-out), backed by RedHat. - -Unfortunately, it relies on Windows Subsystem for Linux (WSL), which is not available for INBO users at the moment. - -:( - -We are working on it. -{{% /callout %}} - -## Setup - -The instructions below were tested on Arch Linux, but generalize easily. - -I follow the `podman` installation instructions for Arch Linux, to set up a **rootless container environment**. - -Installation: - -``` sh -pacman -Sy podman podman-docker passt -``` - -The last one, `passt` (providing `pasta`, yum!), is required for rootless network access. -Optionally, there is `podman-compose`. - -Originally, Podman was designed to run *only if you are root*, just like Docker. -However, we experienced that it now comes in *rootless* configuration per default ([further instructions](https://man.archlinux.org/man/podman.1#Rootless_mode)). -Just to be safe, I briefly list the major configuration steps. - -The first step is to confirm a required kernel module: check that `unpriviledged_users_clone` is set to one. - -``` sh -sysctl kernel.unprivileged_userns_clone -``` - -Then, configure "subordinate user IDs". -There are detail differences in each Linux distribution; with some luck, your username is already present in these lists: - -``` sh -cat /etc/subuid -cat /etc/subgid -``` - -If not, you can be admitted to the club of subordinates with the command: - -``` sh -usermod --add-subuids 100000-165535 --add-subgids 100000-165535 -podman system migrate -``` - -We note some useful commands on the way: `podman system ...` and `podman info`. -You might immediately check "native rootless overlays" (has something to do with mounting filesystems in the container): - -``` sh -podman info | grep -i overlay -``` - -Then, networking: pods might need to communicate to each other and to the world. -And, of course, container storage: make sure you know where your containers are stored. -These and more settings are in `/etc/containers/containers.conf` and `/etc/containers/storage.conf`; make sure to scan and edit them to your liking. - -## Usage - -You can use images from `docker.io` with Podman. -The only difference from Docker is the explicit mention of the source, `docker.io`. -For example: - -``` sh -podman search docker.io/alpine -podman pull docker.io/alpine # download a machine -podman run -it docker.io/alpine # will connect to the container -exit -``` - -## Limitations - -Note that at least some `docker.io` images will not work: I actually experienced issues with the "rootless Docker image": - -``` sh -# podman run --rm -it docker.io/docker:25.0-dind-rootless -``` - -However, it is logical that that one does not work: it builds a (root-level, Section 3.5) Docker which is supposed to contain a rootless Docker. -The outer Docker layer requires root, which Podman cannot provide. - -This is a logical case; if you understand it, congratulations: you have achieved a basic understanding of containers and user privileges :) -There might be yet other images which do not work by default and require additional tinkering in Podman, due to its altered design. -Most use cases are covered, for example a containerized R environment. - -## Podman Rocker - -From here, **Podman is a full drop-in replacement for Docker**; just that you are not forced to grant host system root privileges to containers. - -Any Dockerfile should work, with the mentioned mini-adjustment to `FROM`. -And you can use any Docker image; `docker.io/rocker/rstudio` [is available](https://rocker-project.org/use/rootless-podman.html) (don't forget to specify the port). -You may even write `docker` in the terminal: it will alias to `podman` (via the `podman-docker` package on Linux, or an alias). - -``` sh -podman run --rm -p 8787:8787 -e PASSWORD=YOURNEWPASSWORD -v /data/git/coding-club:/root/coding-club docker.io/rocker/rstudio -``` - -There is another subtle change: the default user to login to `rstudio` is not `rstudio`, but `root`, because for some reason RStudio needs to have root rights on the container. -You had those before anyways, but now they are confined to within the pod. -There might be workarounds, which I will explore. - -{{% callout note %}} -To summarize the Podman experience: - -- **Docker's Dockerfiles like the one above will build equally well on Podman, except for micro-adjustments compared to Docker.** -- You can even stick to the `docker` commands thanks to the `podman-docker` package. -- There is Podman Desktop, if you like clicking. -- Podman is everything Docker is, just minimally different, and more secure, full FOSS. -{{% /callout %}} - -Kudos to the Podman devs! - # Summary -In this tutorial, I demonstrated the basics of containerization with Docker and Podman. +In this series of tutorials, I demonstrate the basics of containerization with Docker and Podman. There are convenient GUI apps, and sophisticated terminal commands, the latter are much more powerful. +This particular notebook assembled references, useful commands, information about the installation of Docker, and general considerations. + +This is the central node of a series of tutorials; the others are: +- Running containers: [https://tutorials.inbo.be/tutorials/development_containers_run](../development_containers_run) +- Building containers: [https://tutorials.inbo.be/tutorials/development_containers_build](../development_containers_build) +- Advanced Build Recipes: +- Switching to Podman: [https://tutorials.inbo.be/tutorials/development_containers_podman](../development_containers_podman) Personally, I find the concept of containerization fascinating, and was surprised how simple and useful of a trick it is. @@ -860,15 +347,4 @@ Your head might be twisting in a swirl of containers by now. I hope you find this overview useful, nevertheless. Thank you for reading! - -[^2]: I mostly follow [this tutorial](https://jsta.github.io/r-docker-tutorial/02-Launching-Docker.html). - -[^3]: Just like "Github" is a server service to store git repositories, guess what: "Docker Hub" is a hosting service to store Docker containers. - -[^4]: Here I quoted the docs () before having read them. - -[^5]: If you did not install the `buildx` package on Linux, you will read a legacy warning. - -[^6]: Reference to the film "La Grande Bellezza". - -[^7]: Daniel J. Walsh (2019): "How does rootless Podman work?" +[^1]: Reference to the film "La Grande Bellezza". diff --git a/content/tutorials/development_containers/notes_qmd.txt b/content/tutorials/development_containers/notes_qmd.txt index 671454d91..9eaf0a9fe 100644 --- a/content/tutorials/development_containers/notes_qmd.txt +++ b/content/tutorials/development_containers/notes_qmd.txt @@ -7,14 +7,16 @@ steps to get a qmd to hugo markdown: + include yaml preserve_yaml: true but double-check the yaml header: it does not always copy correctly (author, date, categories, tags). +also check data and description ++ remove TOC + (usually unnecessary for short texts) + callouts: https://rossabaker.com/configs/website/shortcodes/callout/ {{% callout note %}} {{% /callout %}} - + section crosslinks: ## Section diff --git a/content/tutorials/development_containers_build/index.md b/content/tutorials/development_containers_build/index.md new file mode 100644 index 000000000..cd2f58125 --- /dev/null +++ b/content/tutorials/development_containers_build/index.md @@ -0,0 +1,286 @@ +--- +title: Building Custom Containers +description: How to customize and extend containers with Dockerfiles and the `build` command. +date: "2025-02-21" +authors: [falkmielke] +categories: ["development", "open science"] +tags: ["development", "open science", "docker", "containers"] +number-sections: false +params: + math: true +format: + html: + toc: true + html-math-method: katex + hugo-md: + toc: true + preserve_yaml: true + html-math-method: katex +output: + hugo-md: + preserve_yaml: true + variant: gfm+footnotes + html: + variant: gfm+footnotes +--- + + +By now, you [will have successfully installed](../tutorials/development_containers) Docker or [Podman](../tutorials/development_containers_podman). +You hopefully succeeded in [running others' containers](../tutorials/development_containers_run), e.g. from a container repository. + +Next, it is time to customize your container. + +To give you a metaphor to work on: imagine you have a nice little DIY project for your garage workshop. +This time, you would like to build your own [Matryoshka dolls](https://en.wikipedia.org/wiki/Matryoshka_doll) (матрёшка, stacking dolls, a great allegory for recursion). + +https://images.unsplash.com/photo-1586010135736-c16373adf060?q=80 +(Photo by Iza Gawrych on Unsplash) + +Like all good DIY, you do not fully start from scratch: you start with a blueprint which someone else has created, or general building instructions. +You usually do not grow your own trees to get the wood, you buy wooden blocks of approximately the right size; neither do you mix you own paint from elemental ingredients, you assemble what others have to offer. +But with those ingredients, you customize your making and end up with a very individual creation which, ideally, is exactly what you had in mind. + +Customizing container images with the `build` command is the same business. +Start from an image someone else prepared, as close as possible to your outcome. +Add extra ingredients, few of them are innovative. +Sprinkle in your own files for customization. +The result is a container with a set of components which noone else might have ever used. + +{{% callout note %}} +With Docker Desktop, you have the graphical interface for "builds". +This might fall under the extended functionality which requires a login. + +Yet even without a login, you *can* proceed via a terminal, as below. +Once you create a `Dockerfile` and build it, it will appear in the GUI. +{{% /callout %}} + +
    +build on Windows + +
    + +# Simple Example: A Webserver with Python/`flask` + +## Rationale + +Matryoshka dolls only work because the internal dolls are smaller than the ones covering them. +In terms of software, size is a rather abstract metric, but you might think of different layers as "wrappers" to toher elements. + +For example, [`flask`](https://palletsprojects.com/projects/flask) is a wrapper for other tools ("Werkzeug"), and it is a library within the Python ecosystem. +In this chapter, you will learn how to wrap `flask` in a container. + +## Init: What is a `flask` + +[Python `flask`](https://en.wikipedia.org/wiki/Flask_(web_framework)) is a library which allows you to execute Python scripts upon web access by users. +Though I will not go into details, know that flask is a useful library for interactive website functions. +For example, you can use flask to gather information a user provides in an html form, then process and store it wherever you like. + +I started from the following examples and tutorials to spin up a flask container, but provide modifications and comments on the steps. + +- +- + +> **It all starts with a [Dockerfile](https://www.geeksforgeeks.org/what-is-dockerfile).**[^1] + +As you will see, the Docker file will give you all the design choices to create your own containers. +I think of the Docker file as a script which provides all the instructions to set up your container, starting with `FROM` (i.e. which prior container you build upon) to `RUN`ning any type of commands. +Not *any* type, really: we are working on (mysterious, powerful) Linux - don't fret, it is easier than you think! + +To our `python/flask` example. +A list of the official python containers is [available here](https://hub.docker.com/_/python). +Note that you build every container upon the skeleton of an operating system: I chose [Alpine Linux](https://en.wikipedia.org/wiki/Alpine_Linux). +(It's *en vogue*.) + +The Dockerfile resides in your working folder (yet it also defines a [`WORKDIR`](https://stackoverflow.com/a/51066379) from within which later commands are executed). + +- Navigate to a folder in which you intend to store your container(s), e.g. `cd C:\data\docker` (Windows) or `cd /data/docker` (Linux). +- Create a file called `Dockerfile`: `touch Dockerfile`. +- Edit the file in your favorite text editor (`vim Dockerfile`; Windows users probably use "notepad"). +- Paste and optionally modify the content below. + + + + # Use the official Python image (Alpine Linux, Python 3) + FROM python:3-alpine + + # install app dependencies + RUN apk update && apk add --no-cache python3 py3-pip + RUN pip install flask + + # install app + COPY hello.py / + + # final configuration + ENV FLASK_APP=hello + EXPOSE 8000 + CMD ["flask", "run", "--host", "0.0.0.0", "--port", "8000"] + +Note that the following `hello.py` file needs to be present in your working directory (you will be reminded by a friendly error message): + +``` python +from flask import Flask +app = Flask(__name__) + +@app.route("/") +def hello(): + return "Hello, INBO!" +``` + +With the `Dockerfile` and `hello.py` in place, you can build the container [^2]. + +``` {sh} +#| eval: false +# on Windows, you are already in an administrator terminal +docker build --pull -t my-flask . + +docker build --pull -t my-flask . +``` + +On Linux, you might need to use `sudo` if the user is not in the `docker` group, like so: `sudo docker build -t my-flask`. +Using `--pull` is good practice to ensure the download of the latest upstream containers; you could even use `--no-cache` to avoid previous downloads altogether. +The `-t` parameter [will "tag" the image at build time](https://docs.docker.com/get-started/docker-concepts/building-images/build-tag-and-publish-an-image), auto-generating extra metadata. +Also, some variants can omit the final dot ("."), others require it; the dot is just a Linux shorthand reference to the current working directory (i.e. where your Dockerfile resides). + +
    +build + +
    + +List your available container images via the `docker images` command. + +You should now see a `python` image, which is the base alpine image we built upon. +There is also a `my-flask`. +Try it! + +``` {sh} +#| eval: false +docker run my-flask +``` + +The terminal should give you an IP and port; because the flask runs in a container, `localhost:8000` will **not work** out-of-the-box. +Instead, in my case, it was `http://172.17.0.2:8000`. +(Sadly, although I could build and run this container on windows, I did not get through via the browser :shrug: but try with port mapping `-p 8000:8000`.) + +{{% callout note %}} +So far, so good. +We have used an existing image and added `flask` on top of it. +This works via writing a Dockerfile and building an image. +{{% /callout %}} + +## Multiple Images: `compose` *versus* `build` + +The above works fine for most cases. +However, if you want to assemble and combine multiple images, or build on base images from multiple sources, you need a level up. + +In that case `docker compose` is [the way to go](https://docs.docker.com/compose/gettingstarted). +On Debian or Ubuntu, this extra functionality comes with the `docker-compose-plugin`. +I did not have the need to try this out, yet, but will return here if that changes. + +# Application: RStudio With Packages + +## Rationale + +A Python flask might not be your kind of Matryoshka doll, if you are mainly concerned with heavy R scripting from within your familiar RStudio environment. +To re-iterate: containers are immensely flexible, and images are available for a multitude of situations. + +With the general tools presented above, we should be able to apply the above to modify the `rocker/rstudio` server image for our purpose. + +Build recipes for some of the INBO packages you might want to include are collected in this repository: + +- + +Contributions are much appreciated! + +## Dockerfile + +This use case is, in fact, well documented: + +- +- +- + +The Rocker crew rocks! +They prepared quite [a lot of useful images](https://hub.docker.com/u/rocker), including for example the `tidyverse` or geospatial packages. + +Note the syntax in `FROM`: it is `rocker/:`. + + FROM rocker/rstudio:latest + # (Use the rocker rstudio image) + + # update the system packages + RUN apt update \ + && apt upgrade --yes + + # git2rdata requires git + RUN apt-get update \ + && apt-get install -y --no-install-recommends \ + git libgit2-dev\ + && apt-get clean + + # update pre-installed R packages + # RUN Rscript -e 'update.packages(ask=FALSE)' + + # copy a `.Rprofile` to the container + # available here: https://tutorials.inbo.be/installation/administrator/admin_install_r/Rprofile.site + COPY docker/.Rprofile $R_HOME/etc/Rprofile.site + + # install package via an R command (`R -q -e` or `Rscript -e`) + # (a) from pre-configured repositories + RUN Rscript -e 'install.packages("git2rdata")' + + # (b) via r-universe + RUN R -q -e 'install.packages("watina", repos = c(inbo = "https://inbo.r-universe.dev", CRAN = "https://cloud.r-project.org"))' + + # (b) from github + RUN R -q -e 'install.packages("remotes")' + RUN R -q -e 'remotes::install_github("inbo/INBOmd", dependencies = TRUE)' + +It takes some puzzle work to get the dependencies right, e.g. with the `libgit2` dependency (try commenting out that line to get a feeling for build failure). +However, there is hope: (i) the error output is quite instructive (at least for Linux users), (ii) building is incremental, so you can add successively. +It just takes patience. +As a shortcut, consider using `pak` ([from r-lib](https://pak.r-lib.org)) or `r2u` ([apt repository](https://github.com/eddelbuettel/r2u)) to implicitly deal with the system dependencies. +Generally, remember which system powers your container (Debian/Ubuntu), find help online, and document your progress. + +{{% callout note %}} +Dockerfiles offer some room for optimization. +For example, every `RUN` is a "Layer"; you should put stable layers top and volatile layers later. +In principle, it is recommended to combine layers as much as possible. + +More here: +{{% /callout %}} + +Test the image: + +``` {sh} +#| eval: false +docker build -t test-rstudio . +``` + +Run it, as before: + +``` {sh} +#| eval: false +docker run --rm -p 8787:8787 -e PASSWORD=YOURNEWPASSWORD test-rstudio +``` + +Another good practice is to extract modifications in scripts and modularly bring them in to be executed upon installation ([see here](https://stackoverflow.com/q/69167940), [and here](https://rocker-project.org/use/extending.html#install2.r)), via `COPY`. +This exposes them to a more refined version control on the host machine. +As you know, [version control is key!](https://tutorials.inbo.be/tags/git) + +# Summary + +Like a Matryoshka doll, software often comes in *layers*, as I have tried to illustrate in the examples above. +When designing and building Dockerfiles, you effectively craft your own DIY Matryoshka. +This may involve tinkering, some sawdust will fall off on the sides, but often the end product is quite presentable. + +And that is one of the main purposes of a custom docker image: you can store a given set of interrelated software building blocks for later use (reproducibility). +Some of these sets are rather rough, abstract, or general (like the images you get on image repositories, which you can [simply pull and run](../tutorials/development_containers_run)). +Others are bespoke, containing exact requirements for a given task. +Both functions are important building blocks of open science, and I elaborate more about this framework [in the main article on containerization](../tutorials/development_containers). +Docker is a specific implementation of the container concept, and you might also want to [try out Podman](../tutorials/development_containers_podman) as an alternative. + +Good luck with all your DIY projects, and thank you for reading! + +[^1]: Here I quoted the docs () before having read them. + +[^2]: If you did not install the `buildx` package on Linux, you will read a legacy warning. diff --git a/content/tutorials/development_containers_build/index.qmd b/content/tutorials/development_containers_build/index.qmd index e5e803b5d..d58a9cc86 100644 --- a/content/tutorials/development_containers_build/index.qmd +++ b/content/tutorials/development_containers_build/index.qmd @@ -25,8 +25,8 @@ output: --- -By now, you [will have successfully installed](/tutorials/TODO) Docker or [Podman](/tutorials/TODO). -You hopefully succeeded in [running others' containers](/tutorials/TODO), e.g. from a container repository. +By now, you [will have successfully installed](../tutorials/development_containers) Docker or [Podman](../tutorials/development_containers_podman). +You hopefully succeeded in [running others' containers](../tutorials/development_containers_run), e.g. from a container repository. Next, it is time to customize your container. @@ -305,10 +305,10 @@ This may involve tinkering, some sawdust will fall off on the sides, but often t And that is one of the main purposes of a custom docker image: you can store a given set of interrelated software building blocks for later use (reproducibility). -Some of these sets are rather rough, abstract, or general (like the images you get on image repositories, which you can [simply pull and run](/tutorials/TODO)). +Some of these sets are rather rough, abstract, or general (like the images you get on image repositories, which you can [simply pull and run](../tutorials/development_containers_run)). Others are bespoke, containing exact requirements for a given task. -Both functions are important building blocks of open science, and I elaborate more about this framework [in the main article on containerization](/tutorials/TODO). -Docker is a specific implementation of the container concept, and you might also want to [try out Podman](/tutorials/TODO) as an alternative. +Both functions are important building blocks of open science, and I elaborate more about this framework [in the main article on containerization](../tutorials/development_containers). +Docker is a specific implementation of the container concept, and you might also want to [try out Podman](../tutorials/development_containers_podman) as an alternative. Good luck with all your DIY projects, and thank you for reading! diff --git a/content/tutorials/development_containers_podman/index.md b/content/tutorials/development_containers_podman/index.md new file mode 100644 index 000000000..79fbedba7 --- /dev/null +++ b/content/tutorials/development_containers_podman/index.md @@ -0,0 +1,178 @@ +--- +title: Containers with Podman +description: 'Podman: a drop-in alternative to Docker.' +date: "2025-02-21" +authors: [falkmielke] +categories: ["development", "open science"] +tags: ["development", "open science", "docker", "containers"] +number-sections: false +params: + math: true +format: + html: + toc: true + html-math-method: katex + hugo-md: + toc: true + preserve_yaml: true + html-math-method: katex +output: + hugo-md: + preserve_yaml: true + variant: gfm+footnotes + html: + variant: gfm+footnotes +--- + + + +In this cluster of tutorials, you might have [gotten a general overview on containers](../../tutorials/development_containers), and installed Docker. +You can find instructions on [how to run existing images](../../tutorials/development_containers_run), and take this further to [building custom containers](../../tutorials/development_containers_build). +And during the installation and use of Docker, you might have been annoyed by the mandatory administrator mode, or quirks of the Desktop App. +Or you might value fully free and open source software, like I do. + +Luckily, Docker is not a monolith. +There are alternative approaches to containerization which mitigate some of the Docker limitations and disadvantages. +In this tutorial, I will present [Podman](https://podman.io), a Docker alternative which I personally use the most (besides occasionally turning to ["buildah"](https://buildah.io)). + +# Podman + +Podman might be the most prominent Docker alternative. +Vocabulary is marginally different: a container is a "pod", they run on a "machine", and this FOSS tool helps you to manage them with the `podman` command. + +One major advantage of Podman is that it can be configured to run **"rootless"**, i.e. without administrator rights [^1]. +A second advantage is that it is "all community", full Free and Open Source: it does not promote and "enterprise edition". + +Podman is [well documented](https://podman.io/docs/installation). +Another reliable source as so often is the [Arch Linux wiki on Podman](https://wiki.archlinux.org/title/Podman), no matter which Linux you are on. +Windows users have succeeded in running Podman through a WSL. + +{{% callout note %}} +For Windows, there is a convenient "Podman Desktop" GUI which guides you through the installation and setup, including WSL instantiation. +It is intuitive, transparent (telemetry opt-out), backed by RedHat. + +Unfortunately, it relies on Windows Subsystem for Linux (WSL), which is not available for INBO users at the moment. + +:( + +We are working on it. +{{% /callout %}} + +# Setup + +The instructions below were tested on Arch Linux, but generalize easily. + +I follow the `podman` installation instructions for Arch Linux, to set up a **rootless container environment**. + +Installation: + +``` {sh} +#| eval: false +pacman -Sy podman podman-docker passt +``` + +The last one, `passt` (providing `pasta`, yum!), is required for rootless network access. +Optionally, there is `podman-compose`. + +Originally, Podman was designed to run *only if you are root*, just like Docker. +However, we experienced that it now comes in *rootless* configuration per default ([further instructions](https://man.archlinux.org/man/podman.1#Rootless_mode)). +Just to be safe, I briefly list the major configuration steps. + +The first step is to confirm a required kernel module: check that `unpriviledged_users_clone` is set to one. + +``` {sh} +#| eval: false +sysctl kernel.unprivileged_userns_clone +``` + +Then, configure "subordinate user IDs". +There are detail differences in each Linux distribution; with some luck, your username is already present in these lists: + +``` {sh} +#| eval: false +cat /etc/subuid +cat /etc/subgid +``` + +If not, you can be admitted to the club of subordinates with the command: + +``` {sh} +#| eval: false +usermod --add-subuids 100000-165535 --add-subgids 100000-165535 +podman system migrate +``` + +We note some useful commands on the way: `podman system ...` and `podman info`. +You might immediately check "native rootless overlays" (has something to do with mounting filesystems in the container): + +``` {sh} +#| eval: false +podman info | grep -i overlay +``` + +Then, networking: pods might need to communicate to each other and to the world. +And, of course, container storage: make sure you know where your containers are stored. +These and more settings are in `/etc/containers/containers.conf` and `/etc/containers/storage.conf`; make sure to scan and edit them to your liking. + +# Usage + +You can use images from `docker.io` with Podman. +The only difference from Docker is the explicit mention of the source, `docker.io`. +For example: + +``` {sh} +#| eval: false +podman search docker.io/alpine +podman pull docker.io/alpine # download a machine +podman run -it docker.io/alpine # will connect to the container +exit +``` + +Except for the prefix, everything you [can read in our `docker run` tutorial](../../tutorials/development_containers_run) still applies. + +# Limitations + +Note that at least some `docker.io` images will not work: I actually experienced issues with the "rootless Docker image": + +``` {sh} +#| eval: false +# podman run --rm -it docker.io/docker:25.0-dind-rootless +``` + +However, it is logical that that one does not work: it builds a (root-level) Docker which is supposed to contain a rootless Docker ([*cf.* the overview tutorial](../../tutorials/development_containers#sec-rootless)). +The outer Docker layer requires root, which Podman cannot provide. + +This is a logical case; if you understand it, congratulations: you have achieved a basic understanding of containers and user privileges :) +There might be yet other images which do not work by default and require additional tinkering in Podman, due to its altered design. +Most use cases are covered, for example a containerized R environment. + +# Podman Rocker + +From here, **Podman is a full drop-in replacement for Docker**; just that you are not forced to grant host system root privileges to containers. +This means that you can simply apply [everything I showed about the `build` command](../../tutorial/development_containers_build) by exchanging `docker` for `podman`. + +Any Dockerfile should work, with the mentioned mini-adjustment to `FROM`. +And you can use any Docker image; `docker.io/rocker/rstudio` [is available](https://rocker-project.org/use/rootless-podman.html) (don't forget to specify the port). +You may even write `docker` in the terminal: it will alias to `podman` (via the `podman-docker` package on Linux, or an alias). + +``` {sh} +#| eval: false +podman run --rm -p 8787:8787 -e PASSWORD=YOURNEWPASSWORD -v /data/git/coding-club:/root/coding-club docker.io/rocker/rstudio +``` + +There is another subtle change: the default user to login to `rstudio` is not `rstudio`, but `root`, because for some reason RStudio needs to have root rights on the container. +You had those before anyways, but now they are confined to within the pod. +There might be workarounds, which I will explore. + +# Summary + +To summarize the Podman experience: + +- **Docker's Dockerfiles like the one above will build equally well on Podman, except for micro-adjustments compared to Docker.** +- You can even stick to the `docker` commands thanks to the `podman-docker` package. +- There is Podman Desktop, if you like clicking. +- Podman is everything Docker is, just minimally different, and more secure, full FOSS. + +Kudos to the Podman devs! + +[^1]: Daniel J. Walsh (2019): "How does rootless Podman work?" diff --git a/content/tutorials/development_containers_podman/index.qmd b/content/tutorials/development_containers_podman/index.qmd index 69c949585..b48b27748 100644 --- a/content/tutorials/development_containers_podman/index.qmd +++ b/content/tutorials/development_containers_podman/index.qmd @@ -152,7 +152,7 @@ Note that at least some `docker.io` images will not work: I actually experienced # podman run --rm -it docker.io/docker:25.0-dind-rootless ``` -However, it is logical that that one does not work: it builds a (root-level, [@sec-rootless]) Docker which is supposed to contain a rootless Docker. +However, it is logical that that one does not work: it builds a (root-level) Docker which is supposed to contain a rootless Docker ([*cf.* the overview tutorial](../../tutorials/development_containers#sec-rootless)). The outer Docker layer requires root, which Podman cannot provide. This is a logical case; if you understand it, congratulations: you have achieved a basic understanding of containers and user privileges :) diff --git a/content/tutorials/development_containers_run/index.md b/content/tutorials/development_containers_run/index.md new file mode 100644 index 000000000..52326f28d --- /dev/null +++ b/content/tutorials/development_containers_run/index.md @@ -0,0 +1,240 @@ +--- +title: Running Existing Containers +description: Pulling and running containers from an online container repository. +date: "2025-02-21" +authors: [falkmielke] +categories: ["development", "open science"] +tags: ["development", "open science", "docker", "containers"] +number-sections: false +params: + math: true +format: + html: + toc: true + html-math-method: katex + hugo-md: + toc: true + preserve_yaml: true + html-math-method: katex +output: + hugo-md: + preserve_yaml: true + variant: gfm+footnotes + html: + variant: gfm+footnotes +--- + + +Docker is about assembling and working in containers. +"Living" in containers. +Or, rather, you can think of this as living in a ["tiny home", or "mobile home"](https://parametric-architecture.com/tiny-house-movement). +(Let's call it a fancy caravan.) +In the simple, but comfortable case, you do not get to pick a general design or to choose all details of the interior: you just take that wheeled cabine "as is" from a tiny home reseller. + +
    +Black/white image of a tiny home as a metaphor for software containerization. + +
    + +Just as a tiny home is a mini-version of an immobile house, a container can be thought of as a miniature computer which can be transferred to other computing environments. +The good news: +there are a gazillion **Docker images available** on repositories like [Docker Hub](https://hub.docker.com) or [Quay](https://quay.io). + +This tutorial will show you how to use such "containers-to-go", thereby demonstrating some basic principles and vocabulary about containerization. +I assume that you have [installed docker](../../tutorials/development_containers). +This tutorial will stay on the more involved route of running Docker in the terminal (the Docker Desktop "app" is rather self-explanatory, and you can manoever it easily with knowledge of terminal vocabulary). +Once you master these first step, you can proceed to [customize your container images](../../tutorials/development_containers_build). +You might also [consider Podman as a Docker alternative](../../tutorials/development_containers_podman). + +## Example + +Because of the useful idea of bringing your computer environment along (think of benefits for distributed computing), container images of all kind are abundant on the container repositories mentioned above. +For example[^1], there are Docker images with [rstudio server](https://posit.co/download/rstudio-server) pre-installed: + +- + +{{% callout note %}} +If you control containers via the desktop app, simply search, pull, and run it. +{{% /callout %}} + + +
    +desktop app: run + +
    + +If you are comfortable using the terminal, execute the following script (*Windows*: use an administrator terminal). +If it does not find the resources locally, Docker will download and extract the image from Docker Hub[^2]. + +``` sh +docker run --rm -p 8787:8787 -e PASSWORD=YOURNEWPASSWORD rocker/rstudio +``` + +- The `run` command will automatically `pull`, i.e. download an existing image; though you could also `pull` without running. +- The `--rm` flag makes the Docker container non-permanent, i.e. disk space will be freed after you close the container (Section 0.4). +- The port specified at `-p` is the one you use to access this local container server (the `-p` actually maps host- and container ports). You have to specify it explicitly, otherwise the host system will not let you pass (`:gandalf-meme:`). +- The `-e` flag allows you to specify environment variables, in this case used to set a password for the RStudio server. But if you do not specify one, a random password will be generated and displayed upon startup (read the terminal output). + +
    +run + +
    + +You are now running (`run`) a `rocker/rstudio` server instance on your `localhost`, i.e. your computer. +You can access it via a browser, going to , with the username `rstudio` and your chosen password. + +You can shut down the container with the keyboard shortcut `[ctrl]+[C]` (probably `[ctrl]+[Z] [Return]` on Windows). + + + +## File Access + +The downside of this is that your container is isolated (well... at least to a certain degree). + +Images can take up considerable storage space. +Storing files locally, i.e. on the host machine, without storing an unneccessarily filled container, might be a good strategy. +This can be achieved by mapping a virtual path on the container to a local drive on your computer. +(Linux users will be familiar with the concept of "mounting" and "linking" storage locations.) +Note that the technique is equally relevant when running the container locally, hence not exclusive to remote hosts. + +Docker `run` brings the `-v` flag for mounting volumes. +Suppose you have an R project you would like to work on, stored, for example, in this path: + +- `/data/git/coding-club` + +Then you can link this to your container's home folder via the following command. + +``` sh +# Windows syntax, mapping on `D:\data` +docker run --rm -p 8787:8787 -v //d/data/git/coding-club:/home/rstudio/coding-club rocker/rstudio + +# Linux syntax +docker run --rm -p 8787:8787 -v /data/git/coding-club:/home/rstudio/coding-club rocker/rstudio +``` + +Again, navigate to , *et voilà*, you can access your project and store files back in your regular folders. + +## Limitations + +This is a simple and quick way to run R and RStudio in a container. + +However, there are limitations: + + +{{% callout note %}} + +- You have to live with the R packages provided in the container, or otherwise install them each time you access it... +- ... unless you make your container permanent by omitting the `--rm` option. Note that this will cost considerable disk space, will not transfer to other computers (the original purpose of Docker), and demand occasional updates (Section 0.4). +- You could alternatively add `--pull always` to `docker run`, which will check and pull new versions. +- Speaking of updates: it is good practice to keep software up to date. Occasionally update or simply re-install your Docker image and R packages to get the latest versions. +- You should make sure that the containers are configured correctly and securely. This is especially important with server components which expose your machine to the internet. +- Because most containers contain a Linux system, user permissions are taken seriously, and the consequences might be confusing. There are guides online ([e.g. here](https://labex.io/tutorials/docker-how-to-handle-permissions-in-docker-415866)); there are example repositories (like the author's own struggle [here](https://github.com/inbo/containbo?tab=readme-ov-file#understanding-volumes) and [here](https://github.com/inbo/containbo/tree/main/emacs)); base images are well set up and one can normally get by with default users. +- There is a performance penalty from using containers: in inaccurate laymans' terms, they emulate (parts of a) "computer" inside your computer. +{{% /callout %}} + +On the performance issue: I attempted this on my local laptop with matrix multiplication. + +``` r +# https://cran.r-project.org/web/packages/rbenchmark/rbenchmark.pdf +# install.packages("rbenchmark") + +test <- function(){ + # test from https://prdm0.github.io/ropenblas/#installation + m <- 1e4; n <- 1e3; k <- 3e2 + X <- matrix(rnorm(m*k), nrow=m); Y <- matrix(rnorm(n*k), ncol=n) + X %*% Y +} + +benchmark(test()) +``` + +In the terminal: + + test replications elapsed relative user.self sys.self user.child sys.child + 1 test() 100 22.391 1 83.961 65.291 0 0 + +In the container: + + test replications elapsed relative user.self sys.self user.child sys.child + 1 test() 100 26.076 1 102.494 153.89 0 0 + +Now, the *good news* is that the difference is not by orders of magnitude. +This indicates that the chosen rocker image integrated the more performant `blas` variant which is [recommended](https://pbs-assess.github.io/sdmTMB/index.html#installation) [elsewhere](https://prdm0.github.io/ropenblas/#installation) (`blas-openblas`). + +The *bad news* is that we still a hit of `-20%` performance, which is considerable. + +This is just a single snapshot on a laptop, and putatively `blas`-confounded. +Feel free to systematically and scientifically repeat the tests on your own machine. + + + +## Container Permanence: The `--rm` Option + +As briefly touched above, `docker run` comes with the `--rm` option. +This basically enables two separate workflows, i.e. usage paradigms. + +The first option, which is the default, is that your container is stored on the system permanently. +This counts for the upstream images, which are downloaded upon first invocation of a container. +But also, changes you apply while working in the container are persistently stored until you log in again, using hard drive space of the host. +Images may still be removed by manually running `docker rmi [...]` ([*cf.* "useful commands" in the overview tutorial](../../tutorials/development_containers#sec-commands)). + +In contrast, with the second option, `docker run --rm [...]`, ad-hoc changes in the container are removed when the container is finished. +Unless, of course, you mount a local volume with `docker run --rm -v [...]` (Section 0.2). +However, contrary to a rather general intuition, starting a container with `--rm` will not require dependency download a second time. + +You might want to test this for yourself. +Consider the following series of commands to create a test file in the Docker home directory: + +``` sh +docker run --name testing_permanence --rm -it docker.io/rocker/r-base +echo "testing permanence." > ~/test.txt +cat ~/test.txt +exit +``` + +Re-connecting is instantateous. +However, + +``` sh +docker run --name testing_permanence --rm -it docker.io/rocker/r-base bash +cat ~/test.txt +``` + +will return: + +> cat: /root/test.txt: No such file or directory + +This behavior is desired (in the second workflow above): if you start up a fresh environment each time you work in Docker, you **assure that your work pipeline is independent of prior changes on the system**. +Whether this makes sense as a workflow has to be evaluated with respect to hard drive space requirement, updates, the option to build upon a customized Dockerfile, reproducibility potential. + +You can "link in" folders for working files (note how you have to specify the full path to `new_home`, and that this container uses the root user by default): + +``` sh +mkdir new_home +docker run --name testing_permanence -v /data/containers/new_home:/root --rm -it docker.io/rocker/r-base bash +echo "testing permanence." > ~/test.txt +``` + +Using `--rm` might not be desirable in every case. +However, it is a valuable option for testing, good to have when disk space is sparse, or as a final check before publishing. +Generally, I would consider it good practice to treat containers as volatile, thereby keeping them hostmachine-independent as much as possible. + +# Summary + +Docker images are the actual containers which you create from the Dockerfile blueprints by the process of building. +In the "tiny home" metaphor: your "image" is the physical (small, but real, DIY-achievement) home to live in, built from step-by-step instructions. +Think of a Docker image as a virtual copy of your computer which you store for later re-activation. + +Luckily, other people have prepared images for you. +For example, a collection of images for specific analysis pipelines at INBO are preserved at [Docker Hub/inbobmk](https://hub.docker.com/u/inbobmk). +We consider these "stable" versions because they could be re-activated no matter what crazy future updates will shatter the R community, which enables us to return to all details of previous analyses. + +This tutorial provided introductory details on how to run such images. +If you would like to take this further and customize your containers, proceed with [the next tutorial about the `build` command](../../tutorials/development_containers_build). +Those commands are practically identical [in Docker and Podman](../../tutorials/development_containers_podman). + +An overview on the topic is [available here](../../tutorials/development_containers). + +[^1]: I mostly follow [this tutorial](https://jsta.github.io/r-docker-tutorial/02-Launching-Docker.html). + +[^2]: Just like "Github" is a server service to store git repositories, guess what: "Docker Hub" is a hosting service to store Docker containers. diff --git a/content/tutorials/development_containers_run/index.qmd b/content/tutorials/development_containers_run/index.qmd index ddb2d0b51..735dc0d72 100644 --- a/content/tutorials/development_containers_run/index.qmd +++ b/content/tutorials/development_containers_run/index.qmd @@ -25,10 +25,6 @@ output: --- -TODO: cross-links - - - Docker is about assembling and working in containers. "Living" in containers. Or, rather, you can think of this as living in a ["tiny home", or "mobile home"](https://parametric-architecture.com/tiny-house-movement). @@ -44,10 +40,10 @@ there are a gazillion **Docker images available** on repositories like [Docker H This tutorial will show you how to use such "containers-to-go", thereby demonstrating some basic principles and vocabulary about containerization. -I assume that you have [installed docker](/tutorials/TODO). +I assume that you have [installed docker](../tutorials/development_containers). This tutorial will stay on the more involved route of running Docker in the terminal (the Docker Desktop "app" is rather self-explanatory, and you can manoever it easily with knowledge of terminal vocabulary). -Once you master these first step, you can proceed to [customize your container images](/tutorials/TODO). -You might also [consider Podman as a Docker alternative](/tutorials/TODO). +Once you master these first step, you can proceed to [customize your container images](../tutorials/development_containers_build). +You might also [consider Podman as a Docker alternative](../tutorials/development_containers_podman). ## Example @@ -193,7 +189,7 @@ This basically enables two separate workflows, i.e. usage paradigms. The first option, which is the default, is that your container is stored on the system permanently. This counts for the upstream images, which are downloaded upon first invocation of a container. But also, changes you apply while working in the container are persistently stored until you log in again, using hard drive space of the host. -Images may still be removed by manually running `docker rmi [...]` ([@sec-commands]). +Images may still be removed by manually running `docker rmi [...]` ([*cf.* "useful commands" in the overview tutorial](../../tutorials/development_containers#sec-commands)). In contrast, with the second option, `docker run --rm [...]`, ad-hoc changes in the container are removed when the container is finished. @@ -258,7 +254,7 @@ We consider these "stable" versions because they could be re-activated no matter This tutorial provided introductory details on how to run such images. -If you would like to take this further and customize your containers, proceed with [the next tutorial about the `build` command](/tutorials/TODO). -Those commands are practically identical [in Docker and Podman](/tutorials/TODO). +If you would like to take this further and customize your containers, proceed with [the next tutorial about the `build` command](../tutorials/development_containers_build). +Those commands are practically identical [in Docker and Podman](../tutorials/development_containers_podman). -An overview on the topic is [available here](/tutorials/TODO). +An overview on the topic is [available here](../tutorials/development_containers). From 580fb3aed8dd93144c262356a77003576aea005e Mon Sep 17 00:00:00 2001 From: Falk Mielke Date: Fri, 21 Feb 2025 11:20:20 +0100 Subject: [PATCH 37/51] docker: tutorial cluster interactions --- .../tutorials/development_containers/index.md | 20 +++++++++++-------- .../development_containers/index.qmd | 20 ++++++++++--------- .../development_containers_build/index.md | 18 ++++++++++------- .../development_containers_build/index.qmd | 7 +++++-- 4 files changed, 39 insertions(+), 26 deletions(-) diff --git a/content/tutorials/development_containers/index.md b/content/tutorials/development_containers/index.md index 63284f1cc..dcecf6e9b 100644 --- a/content/tutorials/development_containers/index.md +++ b/content/tutorials/development_containers/index.md @@ -29,9 +29,13 @@ output: You might have heard about "containerization" with [**Docker**](https://docs.docker.com). Docker has been labeled "the *Holy Grail* of reproducibility" in [The Open Science Manual by Claudio Zandonella Callegher and Davide Massidda (2023)](https://arca-dpss.github.io/manual-open-science/docker-chapter.html). Although containerization is an immensely useful Open Science tool worth striving for, the *Holy Grail* is an inaccurate metaphor, because -(i) Unlike The Grail, Docker is easy to find and accessible. -(ii) Docker alone does not make a reproducible workflow; some of its capability is occasionally confused with package version management. -(iii) Docker has issues, some of them mitigated by configuration adjustment or switching to "Podman". + +- (i) Unlike The Grail, Docker is easy to find and accessible. +- (ii) Docker alone does not make a reproducible workflow; some of its capability is occasionally confused with package version management. +- (iii) Docker has issues, some of them mitigated by configuration adjustment or switching to "Podman". + +Time to explore what containers really are, and what they are not. + # Overview @@ -47,15 +51,15 @@ or store and publish a whole image right away. In this notebook, you will find **installation instructions**, useful commands, references, and a loose assembly of general and almost philosophical topics to prime you on the **complications and misconceptions** surrounding containerization. There are numerous useful build instructions and container images already out there, which you can **simply `pull` and `run`**. -This is an easy, entry level application of container software like Docker, [covered in an introductory tutorial](../../../tutorials/TODO). +This is an easy, entry level application of container software like Docker, [covered in an introductory tutorial](../../tutorials/development_containers_run). -A second step is to set up and deploy a **self-`build` custom container** I demonstrate step-by-step [in a slightly more advanced tutorial](../../../tutorials/TODO). +A second step is to set up and deploy a **self-`build` custom container** I demonstrate step-by-step [in a slightly more advanced tutorial](../../tutorials/development_containers_build). This is intended to be a rather general test case, enabling you to later configure more specific container solutions for your own purpose. For example, you will learn how to spin up an existing `rocker/rstudio` container, and even modify it with additional system components and libraries. For relevant INBO-specific use cases, make sure to [check out the `containbo` repository](https://github.com/inbo/containbo) which documents **even more tipps and tricks** assembled during my humble (but mostly succesful) attempts to get INBO R packages to run in a container environment. -I also present **Podman** as a [full replacement for Docker](../../../tutorials/TODO), and recommend to give it a try. +I also present **Podman** as a [full replacement for Docker](../../tutorials/development_containers_podman), and recommend to give it a try. On Windows, installation, configuration, and management of containers runs via the `docker desktop` app. However, this series of tutorials also covers (and in fact focuses on) the terminal-centered steps to be executed on a Linux computer or within a WSL. @@ -173,7 +177,7 @@ docker --version Congratulations: now the fun starts! -With docker installed, the next step is to run a container image which someone else has prepared and hosted online, [which you can read about in the next tutorial](../../../tutorials/TODO). +With docker installed, the next step is to run a container image which someone else has prepared and hosted online, [which you can read about in the next tutorial](../../tutorials/development_containers_run). # The Holy Grail? @@ -253,7 +257,7 @@ Historically, Docker could not run "rootless", i.e. without elevated privileges [This seems to have changed](https://docs.docker.com/engine/security/rootless), according to Docker. Some caution is still warranted: the setup procedure requires downloading and running shell scripts (which must be checked); the deamon still builds on `systemd` (*usually* root level); some functionality is limited. -On the other hand, there is Podman (cf. the [Podman tutorial](../../../tutorials/TODO)). +On the other hand, there is Podman (cf. the [Podman tutorial](../../tutorials/development_containers_podman)). It *used to* require almost the same extra steps as the `docker-rootless` to work rootless, but we found that these requirements are now met per default. It seems that, at the time of writing, Docker and Podman have identical capabilities in terms of rootless containerization. The remaining difference is that Podman seems to have more sensible default settings. diff --git a/content/tutorials/development_containers/index.qmd b/content/tutorials/development_containers/index.qmd index ebfe8ecc4..3a8c65e88 100644 --- a/content/tutorials/development_containers/index.qmd +++ b/content/tutorials/development_containers/index.qmd @@ -1,5 +1,5 @@ --- -title: "Containers with Docker and Podman" +title: "Containers: An Overview" description: "Introduction to containerization and the practical use of Docker-like tools." date: "2025-02-21" authors: [falkmielke] @@ -28,10 +28,12 @@ output: You might have heard about "containerization" with [**Docker**](https://docs.docker.com). Docker has been labeled "the *Holy Grail* of reproducibility" in [The Open Science Manual by Claudio Zandonella Callegher and Davide Massidda (2023)](https://arca-dpss.github.io/manual-open-science/docker-chapter.html). Although containerization is an immensely useful Open Science tool worth striving for, the *Holy Grail* is an inaccurate metaphor, because -(i) Unlike The Grail, Docker is easy to find and accessible. -(ii) Docker alone does not make a reproducible workflow; some of its capability is occasionally confused with package version management. -(iii) Docker has issues, some of them mitigated by configuration adjustment or switching to "Podman". +- (i) Unlike The Grail, Docker is easy to find and accessible. +- (ii) Docker alone does not make a reproducible workflow; some of its capability is occasionally confused with package version management. +- (iii) Docker has issues, some of them mitigated by configuration adjustment or switching to "Podman". + +Time to explore what containers really are, and what they are not. # Overview @@ -49,10 +51,10 @@ In this notebook, you will find **installation instructions**, [**useful command There are numerous useful build instructions and container images already out there, which you can **simply `pull` and `run`**. -This is an easy, entry level application of container software like Docker, [covered in an introductory tutorial](/tutorials/TODO). +This is an easy, entry level application of container software like Docker, [covered in an introductory tutorial](../../tutorials/development_containers_run). -A second step is to set up and deploy a **self-`build` custom container** I demonstrate step-by-step [in a slightly more advanced tutorial](/tutorials/TODO). +A second step is to set up and deploy a **self-`build` custom container** I demonstrate step-by-step [in a slightly more advanced tutorial](../../tutorials/development_containers_build). This is intended to be a rather general test case, enabling you to later configure more specific container solutions for your own purpose. For example, you will learn how to spin up an existing `rocker/rstudio` container, and even modify it with additional system components and libraries. @@ -60,7 +62,7 @@ For example, you will learn how to spin up an existing `rocker/rstudio` containe For relevant INBO-specific use cases, make sure to [check out the `containbo` repository](https://github.com/inbo/containbo) which documents **even more tipps and tricks** assembled during my humble (but mostly succesful) attempts to get INBO R packages to run in a container environment. -I also present **Podman** as a [full replacement for Docker](/tutorials/TODO), and recommend to give it a try. +I also present **Podman** as a [full replacement for Docker](../../tutorials/development_containers_podman), and recommend to give it a try. On Windows, installation, configuration, and management of containers runs via the `docker desktop` app. @@ -192,7 +194,7 @@ docker --version Congratulations: now the fun starts! -With docker installed, the next step is to run a container image which someone else has prepared and hosted online, [which you can read about in the next tutorial](/tutorials/TODO). +With docker installed, the next step is to run a container image which someone else has prepared and hosted online, [which you can read about in the next tutorial](../../tutorials/development_containers_run). # The Holy Grail? @@ -282,7 +284,7 @@ Historically, Docker could not run "rootless", i.e. without elevated privileges. Some caution is still warranted: the setup procedure requires downloading and running shell scripts (which must be checked); the deamon still builds on `systemd` (*usually* root level); some functionality is limited. -On the other hand, there is Podman (cf. the [Podman tutorial](/tutorials/TODO)). +On the other hand, there is Podman (cf. the [Podman tutorial](../../tutorials/development_containers_podman)). It *used to* require almost the same extra steps as the `docker-rootless` to work rootless, but we found that these requirements are now met per default. It seems that, at the time of writing, Docker and Podman have identical capabilities in terms of rootless containerization. The remaining difference is that Podman seems to have more sensible default settings. diff --git a/content/tutorials/development_containers_build/index.md b/content/tutorials/development_containers_build/index.md index cd2f58125..dc4e6181a 100644 --- a/content/tutorials/development_containers_build/index.md +++ b/content/tutorials/development_containers_build/index.md @@ -25,16 +25,20 @@ output: --- -By now, you [will have successfully installed](../tutorials/development_containers) Docker or [Podman](../tutorials/development_containers_podman). -You hopefully succeeded in [running others' containers](../tutorials/development_containers_run), e.g. from a container repository. +By now, you [will have successfully installed](../../tutorials/development_containers) Docker or [Podman](../../tutorials/development_containers_podman). +You hopefully succeeded in [running others' containers](../../tutorials/development_containers_run), e.g. from a container repository. Next, it is time to customize your container. To give you a metaphor to work on: imagine you have a nice little DIY project for your garage workshop. This time, you would like to build your own [Matryoshka dolls](https://en.wikipedia.org/wiki/Matryoshka_doll) (матрёшка, stacking dolls, a great allegory for recursion). -https://images.unsplash.com/photo-1586010135736-c16373adf060?q=80 -(Photo by Iza Gawrych on Unsplash) +
    +build + +
    + + Like all good DIY, you do not fully start from scratch: you start with a blueprint which someone else has created, or general building instructions. You usually do not grow your own trees to get the wood, you buy wooden blocks of approximately the right size; neither do you mix you own paint from elemental ingredients, you assemble what others have to offer. @@ -274,10 +278,10 @@ When designing and building Dockerfiles, you effectively craft your own DIY Matr This may involve tinkering, some sawdust will fall off on the sides, but often the end product is quite presentable. And that is one of the main purposes of a custom docker image: you can store a given set of interrelated software building blocks for later use (reproducibility). -Some of these sets are rather rough, abstract, or general (like the images you get on image repositories, which you can [simply pull and run](../tutorials/development_containers_run)). +Some of these sets are rather rough, abstract, or general (like the images you get on image repositories, which you can [simply pull and run](../../tutorials/development_containers_run)). Others are bespoke, containing exact requirements for a given task. -Both functions are important building blocks of open science, and I elaborate more about this framework [in the main article on containerization](../tutorials/development_containers). -Docker is a specific implementation of the container concept, and you might also want to [try out Podman](../tutorials/development_containers_podman) as an alternative. +Both functions are important building blocks of open science, and I elaborate more about this framework [in the main article on containerization](../../tutorials/development_containers). +Docker is a specific implementation of the container concept, and you might also want to [try out Podman](../../tutorials/development_containers_podman) as an alternative. Good luck with all your DIY projects, and thank you for reading! diff --git a/content/tutorials/development_containers_build/index.qmd b/content/tutorials/development_containers_build/index.qmd index d58a9cc86..069a8ba0f 100644 --- a/content/tutorials/development_containers_build/index.qmd +++ b/content/tutorials/development_containers_build/index.qmd @@ -34,8 +34,11 @@ Next, it is time to customize your container. To give you a metaphor to work on: imagine you have a nice little DIY project for your garage workshop. This time, you would like to build your own [Matryoshka dolls](https://en.wikipedia.org/wiki/Matryoshka_doll) (матрёшка, stacking dolls, a great allegory for recursion). -https://images.unsplash.com/photo-1586010135736-c16373adf060?q=80 -(Photo by Iza Gawrych on Unsplash) +
    +build + +
    + Like all good DIY, you do not fully start from scratch: you start with a blueprint which someone else has created, or general building instructions. From db380e3135f39d3863798baae65e0dc721baf499 Mon Sep 17 00:00:00 2001 From: Falk Mielke Date: Fri, 21 Feb 2025 11:40:55 +0100 Subject: [PATCH 38/51] docker: cherry - a catchy image for the overview --- .../tutorials/development_containers/index.md | 13 +++++++++++-- .../tutorials/development_containers/index.qmd | 10 ++++++++++ .../development_containers_build/index.md | 2 +- .../development_containers_build/index.qmd | 2 +- ...Gemini_Generated_Image_ngoz1wngoz1wngoz.jpg | Bin 0 -> 114666 bytes 5 files changed, 23 insertions(+), 4 deletions(-) create mode 100644 static/images/tutorials/development_docker/Gemini_Generated_Image_ngoz1wngoz1wngoz.jpg diff --git a/content/tutorials/development_containers/index.md b/content/tutorials/development_containers/index.md index dcecf6e9b..dbc89f5fb 100644 --- a/content/tutorials/development_containers/index.md +++ b/content/tutorials/development_containers/index.md @@ -1,7 +1,7 @@ --- -title: Containers with Docker and Podman +title: Containers: An Overview description: Introduction to containerization and the practical use of Docker-like tools. -date: '2025-02-21' +date: "2025-02-21" authors: [falkmielke] categories: ["development", "open science"] tags: ["development", "open science", "docker", "containers"] @@ -34,6 +34,13 @@ Although containerization is an immensely useful Open Science tool worth strivin - (ii) Docker alone does not make a reproducible workflow; some of its capability is occasionally confused with package version management. - (iii) Docker has issues, some of them mitigated by configuration adjustment or switching to "Podman". + +
    +build + +
    + + Time to explore what containers really are, and what they are not. @@ -352,3 +359,5 @@ I hope you find this overview useful, nevertheless. Thank you for reading! [^1]: Reference to the film "La Grande Bellezza". + +[^2]: Produced with Google Gemini (2025-02-21). Prompt: "I would love to have a comic-style image of a whale in a grail. The grail should be golden and shiny, resembling the holy grail. The whale on top is a reference to the docker logo (you may add sketchy little container blocks on its back)." diff --git a/content/tutorials/development_containers/index.qmd b/content/tutorials/development_containers/index.qmd index 3a8c65e88..fdac3d165 100644 --- a/content/tutorials/development_containers/index.qmd +++ b/content/tutorials/development_containers/index.qmd @@ -33,6 +33,16 @@ Although containerization is an immensely useful Open Science tool worth strivin - (ii) Docker alone does not make a reproducible workflow; some of its capability is occasionally confused with package version management. - (iii) Docker has issues, some of them mitigated by configuration adjustment or switching to "Podman". +
    +build + +
    + +[^8]: Produced with Google Gemini (2025-02-21). Prompt: "I would love to have a comic-style image of a whale in a grail. The grail should be golden and shiny, resembling the holy grail. The whale on top is a reference to the docker logo (you may add sketchy little container blocks on its back). +" + + + Time to explore what containers really are, and what they are not. # Overview diff --git a/content/tutorials/development_containers_build/index.md b/content/tutorials/development_containers_build/index.md index dc4e6181a..fb6441e20 100644 --- a/content/tutorials/development_containers_build/index.md +++ b/content/tutorials/development_containers_build/index.md @@ -41,7 +41,7 @@ This time, you would like to build your own [Matryoshka dolls](https://en.wikipe Like all good DIY, you do not fully start from scratch: you start with a blueprint which someone else has created, or general building instructions. -You usually do not grow your own trees to get the wood, you buy wooden blocks of approximately the right size; neither do you mix you own paint from elemental ingredients, you assemble what others have to offer. +You usually do not grow your own trees to get the wood, you buy wooden blocks of approximately the right size; neither do you mix paint from elemental ingredients, you assemble what others have to offer. But with those ingredients, you customize your making and end up with a very individual creation which, ideally, is exactly what you had in mind. Customizing container images with the `build` command is the same business. diff --git a/content/tutorials/development_containers_build/index.qmd b/content/tutorials/development_containers_build/index.qmd index 069a8ba0f..434b0e7e6 100644 --- a/content/tutorials/development_containers_build/index.qmd +++ b/content/tutorials/development_containers_build/index.qmd @@ -42,7 +42,7 @@ This time, you would like to build your own [Matryoshka dolls](https://en.wikipe Like all good DIY, you do not fully start from scratch: you start with a blueprint which someone else has created, or general building instructions. -You usually do not grow your own trees to get the wood, you buy wooden blocks of approximately the right size; neither do you mix you own paint from elemental ingredients, you assemble what others have to offer. +You usually do not grow your own trees to get the wood, you buy wooden blocks of approximately the right size; neither do you mix paint from elemental ingredients, you assemble what others have to offer. But with those ingredients, you customize your making and end up with a very individual creation which, ideally, is exactly what you had in mind. diff --git a/static/images/tutorials/development_docker/Gemini_Generated_Image_ngoz1wngoz1wngoz.jpg b/static/images/tutorials/development_docker/Gemini_Generated_Image_ngoz1wngoz1wngoz.jpg new file mode 100644 index 0000000000000000000000000000000000000000..79a65a0d92e49e8506bb26b8157fe36465cdaa22 GIT binary patch literal 114666 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 a!GemgTSpjvVQ2$x9g6E0Nv4i6fB)ItyCaGK literal 0 HcmV?d00001 From 4a40f6e1ad9b23e919449d40497abdbb4452dc91 Mon Sep 17 00:00:00 2001 From: Falk Mielke Date: Fri, 21 Feb 2025 11:44:47 +0100 Subject: [PATCH 39/51] docker: how to place a caption footnote --- content/tutorials/development_containers/index.md | 4 ++-- content/tutorials/development_containers/index.qmd | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/content/tutorials/development_containers/index.md b/content/tutorials/development_containers/index.md index dbc89f5fb..1a2d279dc 100644 --- a/content/tutorials/development_containers/index.md +++ b/content/tutorials/development_containers/index.md @@ -37,8 +37,8 @@ Although containerization is an immensely useful Open Science tool worth strivin
    build - -
    + +
  2. [^2] Time to explore what containers really are, and what they are not. diff --git a/content/tutorials/development_containers/index.qmd b/content/tutorials/development_containers/index.qmd index fdac3d165..3ace41959 100644 --- a/content/tutorials/development_containers/index.qmd +++ b/content/tutorials/development_containers/index.qmd @@ -35,8 +35,8 @@ Although containerization is an immensely useful Open Science tool worth strivin
    build - -
    + +[^8] [^8]: Produced with Google Gemini (2025-02-21). Prompt: "I would love to have a comic-style image of a whale in a grail. The grail should be golden and shiny, resembling the holy grail. The whale on top is a reference to the docker logo (you may add sketchy little container blocks on its back). " From 28bc56247681e6ba3a3d062c22a77faaf45cfb5b Mon Sep 17 00:00:00 2001 From: Falk Mielke Date: Fri, 21 Feb 2025 11:50:24 +0100 Subject: [PATCH 40/51] docker: how to put colon in yaml title --- content/tutorials/development_containers/index.md | 8 ++++---- content/tutorials/development_containers/index.qmd | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/content/tutorials/development_containers/index.md b/content/tutorials/development_containers/index.md index 1a2d279dc..99a458266 100644 --- a/content/tutorials/development_containers/index.md +++ b/content/tutorials/development_containers/index.md @@ -1,6 +1,6 @@ --- -title: Containers: An Overview -description: Introduction to containerization and the practical use of Docker-like tools. +title: "Containers: An Overview" +description: "Introduction to containerization and the practical use of Docker-like tools." date: "2025-02-21" authors: [falkmielke] categories: ["development", "open science"] @@ -37,8 +37,8 @@ Although containerization is an immensely useful Open Science tool worth strivin
    build - -
    [^2] + + Time to explore what containers really are, and what they are not. diff --git a/content/tutorials/development_containers/index.qmd b/content/tutorials/development_containers/index.qmd index 3ace41959..4581494ee 100644 --- a/content/tutorials/development_containers/index.qmd +++ b/content/tutorials/development_containers/index.qmd @@ -1,5 +1,5 @@ --- -title: "Containers: An Overview" +title: ""Containers: An Overview"" description: "Introduction to containerization and the practical use of Docker-like tools." date: "2025-02-21" authors: [falkmielke] @@ -35,8 +35,8 @@ Although containerization is an immensely useful Open Science tool worth strivin
    build - -
    [^8] + + [^8]: Produced with Google Gemini (2025-02-21). Prompt: "I would love to have a comic-style image of a whale in a grail. The grail should be golden and shiny, resembling the holy grail. The whale on top is a reference to the docker logo (you may add sketchy little container blocks on its back). " From 04821ee97f11f08c77223c3743cc06f619f83813 Mon Sep 17 00:00:00 2001 From: Falk Mielke Date: Fri, 21 Feb 2025 11:54:21 +0100 Subject: [PATCH 41/51] docker: that footnote again... --- content/tutorials/development_containers/index.md | 3 ++- content/tutorials/development_containers/index.qmd | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/content/tutorials/development_containers/index.md b/content/tutorials/development_containers/index.md index 99a458266..ca79b80b3 100644 --- a/content/tutorials/development_containers/index.md +++ b/content/tutorials/development_containers/index.md @@ -37,8 +37,9 @@ Although containerization is an immensely useful Open Science tool worth strivin
    build - +
    +(Image via Google Gemini, modified[^2]) Time to explore what containers really are, and what they are not. diff --git a/content/tutorials/development_containers/index.qmd b/content/tutorials/development_containers/index.qmd index 4581494ee..ebbd44793 100644 --- a/content/tutorials/development_containers/index.qmd +++ b/content/tutorials/development_containers/index.qmd @@ -35,8 +35,9 @@ Although containerization is an immensely useful Open Science tool worth strivin
    build - +
    +(Image via Google Gemini, modified[^8]) [^8]: Produced with Google Gemini (2025-02-21). Prompt: "I would love to have a comic-style image of a whale in a grail. The grail should be golden and shiny, resembling the holy grail. The whale on top is a reference to the docker logo (you may add sketchy little container blocks on its back). " From b64f85a54f9da0065ba06ff0e982a0c58a1358e8 Mon Sep 17 00:00:00 2001 From: Falk Mielke Date: Fri, 21 Feb 2025 11:58:54 +0100 Subject: [PATCH 42/51] docker: direct link to installation --- content/tutorials/development_containers/index.md | 2 ++ content/tutorials/development_containers/index.qmd | 1 + content/tutorials/development_containers_build/index.md | 2 +- content/tutorials/development_containers_build/index.qmd | 2 +- content/tutorials/development_containers_run/index.md | 2 +- content/tutorials/development_containers_run/index.qmd | 2 +- 6 files changed, 7 insertions(+), 4 deletions(-) diff --git a/content/tutorials/development_containers/index.md b/content/tutorials/development_containers/index.md index ca79b80b3..c98af0257 100644 --- a/content/tutorials/development_containers/index.md +++ b/content/tutorials/development_containers/index.md @@ -92,6 +92,8 @@ Here is an incomplete list of online material which you might find helpful. - - + +
    # Installation The installation procedure [is documented here](https://docs.docker.com/install). diff --git a/content/tutorials/development_containers/index.qmd b/content/tutorials/development_containers/index.qmd index ebbd44793..5045c142c 100644 --- a/content/tutorials/development_containers/index.qmd +++ b/content/tutorials/development_containers/index.qmd @@ -101,6 +101,7 @@ Here is an incomplete list of online material which you might find helpful. - + # Installation The installation procedure [is documented here](https://docs.docker.com/install). diff --git a/content/tutorials/development_containers_build/index.md b/content/tutorials/development_containers_build/index.md index fb6441e20..b7c4c24eb 100644 --- a/content/tutorials/development_containers_build/index.md +++ b/content/tutorials/development_containers_build/index.md @@ -25,7 +25,7 @@ output: --- -By now, you [will have successfully installed](../../tutorials/development_containers) Docker or [Podman](../../tutorials/development_containers_podman). +By now, you [will have successfully installed](../../tutorials/development_containers#sec-installation) Docker or [Podman](../../tutorials/development_containers_podman). You hopefully succeeded in [running others' containers](../../tutorials/development_containers_run), e.g. from a container repository. Next, it is time to customize your container. diff --git a/content/tutorials/development_containers_build/index.qmd b/content/tutorials/development_containers_build/index.qmd index 434b0e7e6..c173d645c 100644 --- a/content/tutorials/development_containers_build/index.qmd +++ b/content/tutorials/development_containers_build/index.qmd @@ -25,7 +25,7 @@ output: --- -By now, you [will have successfully installed](../tutorials/development_containers) Docker or [Podman](../tutorials/development_containers_podman). +By now, you [will have successfully installed](../tutorials/development_containers#sec-installation) Docker or [Podman](../tutorials/development_containers_podman). You hopefully succeeded in [running others' containers](../tutorials/development_containers_run), e.g. from a container repository. Next, it is time to customize your container. diff --git a/content/tutorials/development_containers_run/index.md b/content/tutorials/development_containers_run/index.md index 52326f28d..60fdedcec 100644 --- a/content/tutorials/development_containers_run/index.md +++ b/content/tutorials/development_containers_run/index.md @@ -41,7 +41,7 @@ The good news: there are a gazillion **Docker images available** on repositories like [Docker Hub](https://hub.docker.com) or [Quay](https://quay.io). This tutorial will show you how to use such "containers-to-go", thereby demonstrating some basic principles and vocabulary about containerization. -I assume that you have [installed docker](../../tutorials/development_containers). +I assume that you have [installed docker](../../tutorials/development_containers#sec-installation). This tutorial will stay on the more involved route of running Docker in the terminal (the Docker Desktop "app" is rather self-explanatory, and you can manoever it easily with knowledge of terminal vocabulary). Once you master these first step, you can proceed to [customize your container images](../../tutorials/development_containers_build). You might also [consider Podman as a Docker alternative](../../tutorials/development_containers_podman). diff --git a/content/tutorials/development_containers_run/index.qmd b/content/tutorials/development_containers_run/index.qmd index 735dc0d72..ffddf4abc 100644 --- a/content/tutorials/development_containers_run/index.qmd +++ b/content/tutorials/development_containers_run/index.qmd @@ -40,7 +40,7 @@ there are a gazillion **Docker images available** on repositories like [Docker H This tutorial will show you how to use such "containers-to-go", thereby demonstrating some basic principles and vocabulary about containerization. -I assume that you have [installed docker](../tutorials/development_containers). +I assume that you have [installed docker](../tutorials/development_containers#sec-installation). This tutorial will stay on the more involved route of running Docker in the terminal (the Docker Desktop "app" is rather self-explanatory, and you can manoever it easily with knowledge of terminal vocabulary). Once you master these first step, you can proceed to [customize your container images](../tutorials/development_containers_build). You might also [consider Podman as a Docker alternative](../tutorials/development_containers_podman). From b862c618032c7b9c02e52a6359459e283cbfa1ae Mon Sep 17 00:00:00 2001 From: Falk Mielke Date: Fri, 21 Feb 2025 12:04:06 +0100 Subject: [PATCH 43/51] docker: that footnote again :/ --- content/tutorials/development_containers/index.md | 9 +++++---- content/tutorials/development_containers/index.qmd | 6 +++--- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/content/tutorials/development_containers/index.md b/content/tutorials/development_containers/index.md index c98af0257..9fcde6c09 100644 --- a/content/tutorials/development_containers/index.md +++ b/content/tutorials/development_containers/index.md @@ -39,7 +39,7 @@ Although containerization is an immensely useful Open Science tool worth strivin build -(Image via Google Gemini, modified[^2]) + Time to explore what containers really are, and what they are not. @@ -257,7 +257,7 @@ Ideally, to be a "full stack open science developer", you want to implement **a -## "Because Roots Are Important"[^1]: Rootless Mode +## "Because Roots Are Important": Rootless Mode[^2] One of the main criticism about Docker is the necessity to run in a privileged user environment, which is indeed a security issue. This may refer to the system process requiring elevated privileges, or users in the `docker` system group [effectively having superuser privileges](https://github.com/moby/moby/issues/9976). @@ -361,6 +361,7 @@ Your head might be twisting in a swirl of containers by now. I hope you find this overview useful, nevertheless. Thank you for reading! -[^1]: Reference to the film "La Grande Bellezza". -[^2]: Produced with Google Gemini (2025-02-21). Prompt: "I would love to have a comic-style image of a whale in a grail. The grail should be golden and shiny, resembling the holy grail. The whale on top is a reference to the docker logo (you may add sketchy little container blocks on its back)." +[^1]: Produced with Google Gemini (2025-02-21). Prompt: "I would love to have a comic-style image of a whale in a grail. The grail should be golden and shiny, resembling the holy grail. The whale on top is a reference to the docker logo (you may add sketchy little container blocks on its back)." + +[^2]: Reference to the film "La Grande Bellezza". diff --git a/content/tutorials/development_containers/index.qmd b/content/tutorials/development_containers/index.qmd index 5045c142c..e273ae78b 100644 --- a/content/tutorials/development_containers/index.qmd +++ b/content/tutorials/development_containers/index.qmd @@ -37,9 +37,9 @@ Although containerization is an immensely useful Open Science tool worth strivin build -(Image via Google Gemini, modified[^8]) + -[^8]: Produced with Google Gemini (2025-02-21). Prompt: "I would love to have a comic-style image of a whale in a grail. The grail should be golden and shiny, resembling the holy grail. The whale on top is a reference to the docker logo (you may add sketchy little container blocks on its back). +[^1]: Produced with Google Gemini (2025-02-21). Prompt: "I would love to have a comic-style image of a whale in a grail. The grail should be golden and shiny, resembling the holy grail. The whale on top is a reference to the docker logo (you may add sketchy little container blocks on its back). " @@ -282,7 +282,7 @@ And, once more, those images are not a "holy grail" solution: they are not entir Ideally, to be a "full stack open science developer", you want to implement **a mixed strategy** consisting virtual environments and containers, wrapped in version control and stored in a backup image. -## "Because Roots Are Important"[^6]: Rootless Mode {#sec-rootless} +## "Because Roots Are Important": Rootless Mode[^6] {#sec-rootless} [^6]: Reference to the film "La Grande Bellezza". From 65e8d31d254e6dfd40d014f958fb89379dd0b6a2 Mon Sep 17 00:00:00 2001 From: Falk Mielke Date: Fri, 21 Feb 2025 12:06:42 +0100 Subject: [PATCH 44/51] docker: still no footnote (I feel clumsy.) --- content/tutorials/development_containers/index.md | 2 +- content/tutorials/development_containers/index.qmd | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/content/tutorials/development_containers/index.md b/content/tutorials/development_containers/index.md index 9fcde6c09..07228270c 100644 --- a/content/tutorials/development_containers/index.md +++ b/content/tutorials/development_containers/index.md @@ -39,7 +39,7 @@ Although containerization is an immensely useful Open Science tool worth strivin build - +[^1] Time to explore what containers really are, and what they are not. diff --git a/content/tutorials/development_containers/index.qmd b/content/tutorials/development_containers/index.qmd index e273ae78b..f4d6cd9f9 100644 --- a/content/tutorials/development_containers/index.qmd +++ b/content/tutorials/development_containers/index.qmd @@ -37,7 +37,7 @@ Although containerization is an immensely useful Open Science tool worth strivin build - +[^1] [^1]: Produced with Google Gemini (2025-02-21). Prompt: "I would love to have a comic-style image of a whale in a grail. The grail should be golden and shiny, resembling the holy grail. The whale on top is a reference to the docker logo (you may add sketchy little container blocks on its back). " From 1057eeaa9d44caa79e3f9f035bd938596843fc4a Mon Sep 17 00:00:00 2001 From: Falk Mielke Date: Fri, 21 Feb 2025 12:10:04 +0100 Subject: [PATCH 45/51] docker: footnote (n'th attempt) --- content/tutorials/development_containers/index.md | 5 ++--- content/tutorials/development_containers/index.qmd | 6 ++---- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/content/tutorials/development_containers/index.md b/content/tutorials/development_containers/index.md index 07228270c..3b58d9e75 100644 --- a/content/tutorials/development_containers/index.md +++ b/content/tutorials/development_containers/index.md @@ -37,9 +37,8 @@ Although containerization is an immensely useful Open Science tool worth strivin
    build - +
    -[^1] Time to explore what containers really are, and what they are not. @@ -362,6 +361,6 @@ I hope you find this overview useful, nevertheless. Thank you for reading! -[^1]: Produced with Google Gemini (2025-02-21). Prompt: "I would love to have a comic-style image of a whale in a grail. The grail should be golden and shiny, resembling the holy grail. The whale on top is a reference to the docker logo (you may add sketchy little container blocks on its back)." +[^1]: Generated by Google Gemini (2025-02-21), modified. Prompt `I would love to have a comic-style image of a whale in a grail. The grail should be golden and shiny, resembling the holy grail. The whale on top is a reference to the docker logo (you may add sketchy little container blocks on its back).` [^2]: Reference to the film "La Grande Bellezza". diff --git a/content/tutorials/development_containers/index.qmd b/content/tutorials/development_containers/index.qmd index f4d6cd9f9..2511982ae 100644 --- a/content/tutorials/development_containers/index.qmd +++ b/content/tutorials/development_containers/index.qmd @@ -35,12 +35,10 @@ Although containerization is an immensely useful Open Science tool worth strivin
    build - +
    -[^1] -[^1]: Produced with Google Gemini (2025-02-21). Prompt: "I would love to have a comic-style image of a whale in a grail. The grail should be golden and shiny, resembling the holy grail. The whale on top is a reference to the docker logo (you may add sketchy little container blocks on its back). -" +[^1]: Generated by Google Gemini (2025-02-21), modified. Prompt `I would love to have a comic-style image of a whale in a grail. The grail should be golden and shiny, resembling the holy grail. The whale on top is a reference to the docker logo (you may add sketchy little container blocks on its back).` From 5b142cc69106701bac7e648e0058d1a370f9682c Mon Sep 17 00:00:00 2001 From: Falk Mielke Date: Fri, 21 Feb 2025 12:19:52 +0100 Subject: [PATCH 46/51] docker: footnote hack in html --- content/tutorials/development_containers/index.md | 9 +++++++-- content/tutorials/development_containers/index.qmd | 9 +++++++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/content/tutorials/development_containers/index.md b/content/tutorials/development_containers/index.md index 3b58d9e75..055b3a967 100644 --- a/content/tutorials/development_containers/index.md +++ b/content/tutorials/development_containers/index.md @@ -37,7 +37,7 @@ Although containerization is an immensely useful Open Science tool worth strivin
    build - +
    @@ -361,6 +361,11 @@ I hope you find this overview useful, nevertheless. Thank you for reading! -[^1]: Generated by Google Gemini (2025-02-21), modified. Prompt `I would love to have a comic-style image of a whale in a grail. The grail should be golden and shiny, resembling the holy grail. The whale on top is a reference to the docker logo (you may add sketchy little container blocks on its back).` +
    +
      +
    1. +*

      Generated by Google Gemini (2025-02-21), modified. Prompt `I would love to have a comic-style image of a whale in a grail. The grail should be golden and shiny, resembling the holy grail. The whale on top is a reference to the docker logo (you may add sketchy little container blocks on its back).` +↩︎

      +
    [^2]: Reference to the film "La Grande Bellezza". diff --git a/content/tutorials/development_containers/index.qmd b/content/tutorials/development_containers/index.qmd index 2511982ae..616d6dd0c 100644 --- a/content/tutorials/development_containers/index.qmd +++ b/content/tutorials/development_containers/index.qmd @@ -35,10 +35,9 @@ Although containerization is an immensely useful Open Science tool worth strivin
    build - +
    -[^1]: Generated by Google Gemini (2025-02-21), modified. Prompt `I would love to have a comic-style image of a whale in a grail. The grail should be golden and shiny, resembling the holy grail. The whale on top is a reference to the docker logo (you may add sketchy little container blocks on its back).` @@ -400,3 +399,9 @@ Thank you for reading! +
    +
      +
    1. +*

      Generated by Google Gemini (2025-02-21), modified. Prompt `I would love to have a comic-style image of a whale in a grail. The grail should be golden and shiny, resembling the holy grail. The whale on top is a reference to the docker logo (you may add sketchy little container blocks on its back).` +↩︎

      +
    From 6626c0e379252085e2c735306d9501f267bd13e8 Mon Sep 17 00:00:00 2001 From: Falk Mielke Date: Fri, 21 Feb 2025 12:29:06 +0100 Subject: [PATCH 47/51] docker: adding a podman image --- content/tutorials/development_containers_build/index.md | 2 +- content/tutorials/development_containers_build/index.qmd | 2 +- content/tutorials/development_containers_podman/index.md | 7 +++++++ content/tutorials/development_containers_podman/index.qmd | 7 +++++++ 4 files changed, 16 insertions(+), 2 deletions(-) diff --git a/content/tutorials/development_containers_build/index.md b/content/tutorials/development_containers_build/index.md index b7c4c24eb..727cbaa9d 100644 --- a/content/tutorials/development_containers_build/index.md +++ b/content/tutorials/development_containers_build/index.md @@ -34,7 +34,7 @@ To give you a metaphor to work on: imagine you have a nice little DIY project fo This time, you would like to build your own [Matryoshka dolls](https://en.wikipedia.org/wiki/Matryoshka_doll) (матрёшка, stacking dolls, a great allegory for recursion).
    -build +Photo of a set of Matryoshka dolls.
    diff --git a/content/tutorials/development_containers_build/index.qmd b/content/tutorials/development_containers_build/index.qmd index c173d645c..09db061a5 100644 --- a/content/tutorials/development_containers_build/index.qmd +++ b/content/tutorials/development_containers_build/index.qmd @@ -35,7 +35,7 @@ To give you a metaphor to work on: imagine you have a nice little DIY project fo This time, you would like to build your own [Matryoshka dolls](https://en.wikipedia.org/wiki/Matryoshka_doll) (матрёшка, stacking dolls, a great allegory for recursion).
    -build +Photo of a set of Matryoshka dolls.
    diff --git a/content/tutorials/development_containers_podman/index.md b/content/tutorials/development_containers_podman/index.md index 79fbedba7..37d2cd2e4 100644 --- a/content/tutorials/development_containers_podman/index.md +++ b/content/tutorials/development_containers_podman/index.md @@ -35,6 +35,13 @@ Luckily, Docker is not a monolith. There are alternative approaches to containerization which mitigate some of the Docker limitations and disadvantages. In this tutorial, I will present [Podman](https://podman.io), a Docker alternative which I personally use the most (besides occasionally turning to ["buildah"](https://buildah.io)). + +
    +The podman masquot, a stylized comic seal, jumping into the water. + +
    + + # Podman Podman might be the most prominent Docker alternative. diff --git a/content/tutorials/development_containers_podman/index.qmd b/content/tutorials/development_containers_podman/index.qmd index b48b27748..88aa8150c 100644 --- a/content/tutorials/development_containers_podman/index.qmd +++ b/content/tutorials/development_containers_podman/index.qmd @@ -36,6 +36,13 @@ There are alternative approaches to containerization which mitigate some of the In this tutorial, I will present [Podman](https://podman.io), a Docker alternative which I personally use the most (besides occasionally turning to ["buildah"](https://buildah.io)). +
    +The podman masquot, a stylized comic seal, jumping into the water. + +
    + + + # Podman Podman might be the most prominent Docker alternative. Vocabulary is marginally different: a container is a "pod", they run on a "machine", and this FOSS tool helps you to manage them with the `podman` command. From 73cbceab51c295bfbd9ec6780d74be2c644ad78b Mon Sep 17 00:00:00 2001 From: Falk Mielke Date: Fri, 21 Feb 2025 12:36:09 +0100 Subject: [PATCH 48/51] docker: changing notebook order (rename) --- .../{development_containers => development_containers1}/index.bak | 0 .../{development_containers => development_containers1}/index.md | 0 .../{development_containers => development_containers1}/index.qmd | 0 .../notes_qmd.txt | 0 .../index.md | 0 .../index.qmd | 0 .../index.md | 0 .../index.qmd | 0 .../index.md | 0 .../index.qmd | 0 10 files changed, 0 insertions(+), 0 deletions(-) rename content/tutorials/{development_containers => development_containers1}/index.bak (100%) rename content/tutorials/{development_containers => development_containers1}/index.md (100%) rename content/tutorials/{development_containers => development_containers1}/index.qmd (100%) rename content/tutorials/{development_containers => development_containers1}/notes_qmd.txt (100%) rename content/tutorials/{development_containers_run => development_containers2_run}/index.md (100%) rename content/tutorials/{development_containers_run => development_containers2_run}/index.qmd (100%) rename content/tutorials/{development_containers_build => development_containers3_build}/index.md (100%) rename content/tutorials/{development_containers_build => development_containers3_build}/index.qmd (100%) rename content/tutorials/{development_containers_podman => development_containers4_podman}/index.md (100%) rename content/tutorials/{development_containers_podman => development_containers4_podman}/index.qmd (100%) diff --git a/content/tutorials/development_containers/index.bak b/content/tutorials/development_containers1/index.bak similarity index 100% rename from content/tutorials/development_containers/index.bak rename to content/tutorials/development_containers1/index.bak diff --git a/content/tutorials/development_containers/index.md b/content/tutorials/development_containers1/index.md similarity index 100% rename from content/tutorials/development_containers/index.md rename to content/tutorials/development_containers1/index.md diff --git a/content/tutorials/development_containers/index.qmd b/content/tutorials/development_containers1/index.qmd similarity index 100% rename from content/tutorials/development_containers/index.qmd rename to content/tutorials/development_containers1/index.qmd diff --git a/content/tutorials/development_containers/notes_qmd.txt b/content/tutorials/development_containers1/notes_qmd.txt similarity index 100% rename from content/tutorials/development_containers/notes_qmd.txt rename to content/tutorials/development_containers1/notes_qmd.txt diff --git a/content/tutorials/development_containers_run/index.md b/content/tutorials/development_containers2_run/index.md similarity index 100% rename from content/tutorials/development_containers_run/index.md rename to content/tutorials/development_containers2_run/index.md diff --git a/content/tutorials/development_containers_run/index.qmd b/content/tutorials/development_containers2_run/index.qmd similarity index 100% rename from content/tutorials/development_containers_run/index.qmd rename to content/tutorials/development_containers2_run/index.qmd diff --git a/content/tutorials/development_containers_build/index.md b/content/tutorials/development_containers3_build/index.md similarity index 100% rename from content/tutorials/development_containers_build/index.md rename to content/tutorials/development_containers3_build/index.md diff --git a/content/tutorials/development_containers_build/index.qmd b/content/tutorials/development_containers3_build/index.qmd similarity index 100% rename from content/tutorials/development_containers_build/index.qmd rename to content/tutorials/development_containers3_build/index.qmd diff --git a/content/tutorials/development_containers_podman/index.md b/content/tutorials/development_containers4_podman/index.md similarity index 100% rename from content/tutorials/development_containers_podman/index.md rename to content/tutorials/development_containers4_podman/index.md diff --git a/content/tutorials/development_containers_podman/index.qmd b/content/tutorials/development_containers4_podman/index.qmd similarity index 100% rename from content/tutorials/development_containers_podman/index.qmd rename to content/tutorials/development_containers4_podman/index.qmd From 9c3fcb6131922fe2e4ed83a55ceee5a9d23f1157 Mon Sep 17 00:00:00 2001 From: Falk Mielke Date: Fri, 21 Feb 2025 12:47:15 +0100 Subject: [PATCH 49/51] docker: crosslinks corrected --- .../tutorials/development_containers1/index.md | 16 ++++++++-------- .../tutorials/development_containers1/index.qmd | 16 ++++++++-------- .../development_containers2_run/index.md | 14 +++++++------- .../development_containers2_run/index.qmd | 14 +++++++------- .../development_containers3_build/index.md | 10 +++++----- .../development_containers3_build/index.qmd | 10 +++++----- .../development_containers4_podman/index.md | 10 +++++----- .../development_containers4_podman/index.qmd | 10 +++++----- 8 files changed, 50 insertions(+), 50 deletions(-) diff --git a/content/tutorials/development_containers1/index.md b/content/tutorials/development_containers1/index.md index 055b3a967..1a3e7b16b 100644 --- a/content/tutorials/development_containers1/index.md +++ b/content/tutorials/development_containers1/index.md @@ -58,15 +58,15 @@ or store and publish a whole image right away. In this notebook, you will find **installation instructions**, useful commands, references, and a loose assembly of general and almost philosophical topics to prime you on the **complications and misconceptions** surrounding containerization. There are numerous useful build instructions and container images already out there, which you can **simply `pull` and `run`**. -This is an easy, entry level application of container software like Docker, [covered in an introductory tutorial](../../tutorials/development_containers_run). +This is an easy, entry level application of container software like Docker, [covered in an introductory tutorial](../../tutorials/development_containers2_run). -A second step is to set up and deploy a **self-`build` custom container** I demonstrate step-by-step [in a slightly more advanced tutorial](../../tutorials/development_containers_build). +A second step is to set up and deploy a **self-`build` custom container** I demonstrate step-by-step [in a slightly more advanced tutorial](../../tutorials/development_containers3_build). This is intended to be a rather general test case, enabling you to later configure more specific container solutions for your own purpose. For example, you will learn how to spin up an existing `rocker/rstudio` container, and even modify it with additional system components and libraries. For relevant INBO-specific use cases, make sure to [check out the `containbo` repository](https://github.com/inbo/containbo) which documents **even more tipps and tricks** assembled during my humble (but mostly succesful) attempts to get INBO R packages to run in a container environment. -I also present **Podman** as a [full replacement for Docker](../../tutorials/development_containers_podman), and recommend to give it a try. +I also present **Podman** as a [full replacement for Docker](../../tutorials/development_containers4_podman), and recommend to give it a try. On Windows, installation, configuration, and management of containers runs via the `docker desktop` app. However, this series of tutorials also covers (and in fact focuses on) the terminal-centered steps to be executed on a Linux computer or within a WSL. @@ -186,7 +186,7 @@ docker --version Congratulations: now the fun starts! -With docker installed, the next step is to run a container image which someone else has prepared and hosted online, [which you can read about in the next tutorial](../../tutorials/development_containers_run). +With docker installed, the next step is to run a container image which someone else has prepared and hosted online, [which you can read about in the next tutorial](../../tutorials/development_containers2_run). # The Holy Grail? @@ -266,7 +266,7 @@ Historically, Docker could not run "rootless", i.e. without elevated privileges [This seems to have changed](https://docs.docker.com/engine/security/rootless), according to Docker. Some caution is still warranted: the setup procedure requires downloading and running shell scripts (which must be checked); the deamon still builds on `systemd` (*usually* root level); some functionality is limited. -On the other hand, there is Podman (cf. the [Podman tutorial](../../tutorials/development_containers_podman)). +On the other hand, there is Podman (cf. the [Podman tutorial](../../tutorials/development_containers4_podman)). It *used to* require almost the same extra steps as the `docker-rootless` to work rootless, but we found that these requirements are now met per default. It seems that, at the time of writing, Docker and Podman have identical capabilities in terms of rootless containerization. The remaining difference is that Podman seems to have more sensible default settings. @@ -345,10 +345,10 @@ There are convenient GUI apps, and sophisticated terminal commands, the latter a This particular notebook assembled references, useful commands, information about the installation of Docker, and general considerations. This is the central node of a series of tutorials; the others are: -- Running containers: [https://tutorials.inbo.be/tutorials/development_containers_run](../development_containers_run) -- Building containers: [https://tutorials.inbo.be/tutorials/development_containers_build](../development_containers_build) +- Running containers: [https://tutorials.inbo.be/tutorials/development_containers2_run](../development_containers2_run) +- Building containers: [https://tutorials.inbo.be/tutorials/development_containers3_build](../development_containers3_build) - Advanced Build Recipes: -- Switching to Podman: [https://tutorials.inbo.be/tutorials/development_containers_podman](../development_containers_podman) +- Switching to Podman: [https://tutorials.inbo.be/tutorials/development_containers4_podman](../development_containers4_podman) Personally, I find the concept of containerization fascinating, and was surprised how simple and useful of a trick it is. diff --git a/content/tutorials/development_containers1/index.qmd b/content/tutorials/development_containers1/index.qmd index 616d6dd0c..ddc687b0d 100644 --- a/content/tutorials/development_containers1/index.qmd +++ b/content/tutorials/development_containers1/index.qmd @@ -59,10 +59,10 @@ In this notebook, you will find **installation instructions**, [**useful command There are numerous useful build instructions and container images already out there, which you can **simply `pull` and `run`**. -This is an easy, entry level application of container software like Docker, [covered in an introductory tutorial](../../tutorials/development_containers_run). +This is an easy, entry level application of container software like Docker, [covered in an introductory tutorial](../../tutorials/development_containers2_run). -A second step is to set up and deploy a **self-`build` custom container** I demonstrate step-by-step [in a slightly more advanced tutorial](../../tutorials/development_containers_build). +A second step is to set up and deploy a **self-`build` custom container** I demonstrate step-by-step [in a slightly more advanced tutorial](../../tutorials/development_containers3_build). This is intended to be a rather general test case, enabling you to later configure more specific container solutions for your own purpose. For example, you will learn how to spin up an existing `rocker/rstudio` container, and even modify it with additional system components and libraries. @@ -70,7 +70,7 @@ For example, you will learn how to spin up an existing `rocker/rstudio` containe For relevant INBO-specific use cases, make sure to [check out the `containbo` repository](https://github.com/inbo/containbo) which documents **even more tipps and tricks** assembled during my humble (but mostly succesful) attempts to get INBO R packages to run in a container environment. -I also present **Podman** as a [full replacement for Docker](../../tutorials/development_containers_podman), and recommend to give it a try. +I also present **Podman** as a [full replacement for Docker](../../tutorials/development_containers4_podman), and recommend to give it a try. On Windows, installation, configuration, and management of containers runs via the `docker desktop` app. @@ -203,7 +203,7 @@ docker --version Congratulations: now the fun starts! -With docker installed, the next step is to run a container image which someone else has prepared and hosted online, [which you can read about in the next tutorial](../../tutorials/development_containers_run). +With docker installed, the next step is to run a container image which someone else has prepared and hosted online, [which you can read about in the next tutorial](../../tutorials/development_containers2_run). # The Holy Grail? @@ -293,7 +293,7 @@ Historically, Docker could not run "rootless", i.e. without elevated privileges. Some caution is still warranted: the setup procedure requires downloading and running shell scripts (which must be checked); the deamon still builds on `systemd` (*usually* root level); some functionality is limited. -On the other hand, there is Podman (cf. the [Podman tutorial](../../tutorials/development_containers_podman)). +On the other hand, there is Podman (cf. the [Podman tutorial](../../tutorials/development_containers4_podman)). It *used to* require almost the same extra steps as the `docker-rootless` to work rootless, but we found that these requirements are now met per default. It seems that, at the time of writing, Docker and Podman have identical capabilities in terms of rootless containerization. The remaining difference is that Podman seems to have more sensible default settings. @@ -381,10 +381,10 @@ There are convenient GUI apps, and sophisticated terminal commands, the latter a This particular notebook assembled references, useful commands, information about the installation of Docker, and general considerations. This is the central node of a series of tutorials; the others are: -- Running containers: [https://tutorials.inbo.be/tutorials/development_containers_run](../development_containers_run) -- Building containers: [https://tutorials.inbo.be/tutorials/development_containers_build](../development_containers_build) +- Running containers: [https://tutorials.inbo.be/tutorials/development_containers2_run](../development_containers2_run) +- Building containers: [https://tutorials.inbo.be/tutorials/development_containers3_build](../development_containers3_build) - Advanced Build Recipes: [https://github.com/inbo/containbo](https://github.com/inbo/containbo) -- Switching to Podman: [https://tutorials.inbo.be/tutorials/development_containers_podman](../development_containers_podman) +- Switching to Podman: [https://tutorials.inbo.be/tutorials/development_containers4_podman](../development_containers4_podman) Personally, I find the concept of containerization fascinating, and was surprised how simple and useful of a trick it is. diff --git a/content/tutorials/development_containers2_run/index.md b/content/tutorials/development_containers2_run/index.md index 60fdedcec..b8e364bb3 100644 --- a/content/tutorials/development_containers2_run/index.md +++ b/content/tutorials/development_containers2_run/index.md @@ -41,10 +41,10 @@ The good news: there are a gazillion **Docker images available** on repositories like [Docker Hub](https://hub.docker.com) or [Quay](https://quay.io). This tutorial will show you how to use such "containers-to-go", thereby demonstrating some basic principles and vocabulary about containerization. -I assume that you have [installed docker](../../tutorials/development_containers#sec-installation). +I assume that you have [installed docker](../../tutorials/development_containers1#sec-installation). This tutorial will stay on the more involved route of running Docker in the terminal (the Docker Desktop "app" is rather self-explanatory, and you can manoever it easily with knowledge of terminal vocabulary). -Once you master these first step, you can proceed to [customize your container images](../../tutorials/development_containers_build). -You might also [consider Podman as a Docker alternative](../../tutorials/development_containers_podman). +Once you master these first step, you can proceed to [customize your container images](../../tutorials/development_containers3_build). +You might also [consider Podman as a Docker alternative](../../tutorials/development_containers4_podman). ## Example @@ -176,7 +176,7 @@ This basically enables two separate workflows, i.e. usage paradigms. The first option, which is the default, is that your container is stored on the system permanently. This counts for the upstream images, which are downloaded upon first invocation of a container. But also, changes you apply while working in the container are persistently stored until you log in again, using hard drive space of the host. -Images may still be removed by manually running `docker rmi [...]` ([*cf.* "useful commands" in the overview tutorial](../../tutorials/development_containers#sec-commands)). +Images may still be removed by manually running `docker rmi [...]` ([*cf.* "useful commands" in the overview tutorial](../../tutorials/development_containers1#sec-commands)). In contrast, with the second option, `docker run --rm [...]`, ad-hoc changes in the container are removed when the container is finished. Unless, of course, you mount a local volume with `docker run --rm -v [...]` (Section 0.2). @@ -230,10 +230,10 @@ For example, a collection of images for specific analysis pipelines at INBO are We consider these "stable" versions because they could be re-activated no matter what crazy future updates will shatter the R community, which enables us to return to all details of previous analyses. This tutorial provided introductory details on how to run such images. -If you would like to take this further and customize your containers, proceed with [the next tutorial about the `build` command](../../tutorials/development_containers_build). -Those commands are practically identical [in Docker and Podman](../../tutorials/development_containers_podman). +If you would like to take this further and customize your containers, proceed with [the next tutorial about the `build` command](../../tutorials/development_containers3_build). +Those commands are practically identical [in Docker and Podman](../../tutorials/development_containers4_podman). -An overview on the topic is [available here](../../tutorials/development_containers). +An overview on the topic is [available here](../../tutorials/development_containers1). [^1]: I mostly follow [this tutorial](https://jsta.github.io/r-docker-tutorial/02-Launching-Docker.html). diff --git a/content/tutorials/development_containers2_run/index.qmd b/content/tutorials/development_containers2_run/index.qmd index ffddf4abc..415eaa337 100644 --- a/content/tutorials/development_containers2_run/index.qmd +++ b/content/tutorials/development_containers2_run/index.qmd @@ -40,10 +40,10 @@ there are a gazillion **Docker images available** on repositories like [Docker H This tutorial will show you how to use such "containers-to-go", thereby demonstrating some basic principles and vocabulary about containerization. -I assume that you have [installed docker](../tutorials/development_containers#sec-installation). +I assume that you have [installed docker](../tutorials/development_containers1#sec-installation). This tutorial will stay on the more involved route of running Docker in the terminal (the Docker Desktop "app" is rather self-explanatory, and you can manoever it easily with knowledge of terminal vocabulary). -Once you master these first step, you can proceed to [customize your container images](../tutorials/development_containers_build). -You might also [consider Podman as a Docker alternative](../tutorials/development_containers_podman). +Once you master these first step, you can proceed to [customize your container images](../tutorials/development_containers3_build). +You might also [consider Podman as a Docker alternative](../tutorials/development_containers4_podman). ## Example @@ -189,7 +189,7 @@ This basically enables two separate workflows, i.e. usage paradigms. The first option, which is the default, is that your container is stored on the system permanently. This counts for the upstream images, which are downloaded upon first invocation of a container. But also, changes you apply while working in the container are persistently stored until you log in again, using hard drive space of the host. -Images may still be removed by manually running `docker rmi [...]` ([*cf.* "useful commands" in the overview tutorial](../../tutorials/development_containers#sec-commands)). +Images may still be removed by manually running `docker rmi [...]` ([*cf.* "useful commands" in the overview tutorial](../../tutorials/development_containers1#sec-commands)). In contrast, with the second option, `docker run --rm [...]`, ad-hoc changes in the container are removed when the container is finished. @@ -254,7 +254,7 @@ We consider these "stable" versions because they could be re-activated no matter This tutorial provided introductory details on how to run such images. -If you would like to take this further and customize your containers, proceed with [the next tutorial about the `build` command](../tutorials/development_containers_build). -Those commands are practically identical [in Docker and Podman](../tutorials/development_containers_podman). +If you would like to take this further and customize your containers, proceed with [the next tutorial about the `build` command](../tutorials/development_containers3_build). +Those commands are practically identical [in Docker and Podman](../tutorials/development_containers4_podman). -An overview on the topic is [available here](../tutorials/development_containers). +An overview on the topic is [available here](../tutorials/development_containers1). diff --git a/content/tutorials/development_containers3_build/index.md b/content/tutorials/development_containers3_build/index.md index 727cbaa9d..734560b68 100644 --- a/content/tutorials/development_containers3_build/index.md +++ b/content/tutorials/development_containers3_build/index.md @@ -25,8 +25,8 @@ output: --- -By now, you [will have successfully installed](../../tutorials/development_containers#sec-installation) Docker or [Podman](../../tutorials/development_containers_podman). -You hopefully succeeded in [running others' containers](../../tutorials/development_containers_run), e.g. from a container repository. +By now, you [will have successfully installed](../../tutorials/development_containers1#sec-installation) Docker or [Podman](../../tutorials/development_containers4_podman). +You hopefully succeeded in [running others' containers](../../tutorials/development_containers2_run), e.g. from a container repository. Next, it is time to customize your container. @@ -278,10 +278,10 @@ When designing and building Dockerfiles, you effectively craft your own DIY Matr This may involve tinkering, some sawdust will fall off on the sides, but often the end product is quite presentable. And that is one of the main purposes of a custom docker image: you can store a given set of interrelated software building blocks for later use (reproducibility). -Some of these sets are rather rough, abstract, or general (like the images you get on image repositories, which you can [simply pull and run](../../tutorials/development_containers_run)). +Some of these sets are rather rough, abstract, or general (like the images you get on image repositories, which you can [simply pull and run](../../tutorials/development_containers2_run)). Others are bespoke, containing exact requirements for a given task. -Both functions are important building blocks of open science, and I elaborate more about this framework [in the main article on containerization](../../tutorials/development_containers). -Docker is a specific implementation of the container concept, and you might also want to [try out Podman](../../tutorials/development_containers_podman) as an alternative. +Both functions are important building blocks of open science, and I elaborate more about this framework [in the main article on containerization](../../tutorials/development_containers1). +Docker is a specific implementation of the container concept, and you might also want to [try out Podman](../../tutorials/development_containers4_podman) as an alternative. Good luck with all your DIY projects, and thank you for reading! diff --git a/content/tutorials/development_containers3_build/index.qmd b/content/tutorials/development_containers3_build/index.qmd index 09db061a5..8ba5aa337 100644 --- a/content/tutorials/development_containers3_build/index.qmd +++ b/content/tutorials/development_containers3_build/index.qmd @@ -25,8 +25,8 @@ output: --- -By now, you [will have successfully installed](../tutorials/development_containers#sec-installation) Docker or [Podman](../tutorials/development_containers_podman). -You hopefully succeeded in [running others' containers](../tutorials/development_containers_run), e.g. from a container repository. +By now, you [will have successfully installed](../tutorials/development_containers1#sec-installation) Docker or [Podman](../tutorials/development_containers4_podman). +You hopefully succeeded in [running others' containers](../tutorials/development_containers2_run), e.g. from a container repository. Next, it is time to customize your container. @@ -308,10 +308,10 @@ This may involve tinkering, some sawdust will fall off on the sides, but often t And that is one of the main purposes of a custom docker image: you can store a given set of interrelated software building blocks for later use (reproducibility). -Some of these sets are rather rough, abstract, or general (like the images you get on image repositories, which you can [simply pull and run](../tutorials/development_containers_run)). +Some of these sets are rather rough, abstract, or general (like the images you get on image repositories, which you can [simply pull and run](../tutorials/development_containers2_run)). Others are bespoke, containing exact requirements for a given task. -Both functions are important building blocks of open science, and I elaborate more about this framework [in the main article on containerization](../tutorials/development_containers). -Docker is a specific implementation of the container concept, and you might also want to [try out Podman](../tutorials/development_containers_podman) as an alternative. +Both functions are important building blocks of open science, and I elaborate more about this framework [in the main article on containerization](../tutorials/development_containers1). +Docker is a specific implementation of the container concept, and you might also want to [try out Podman](../tutorials/development_containers4_podman) as an alternative. Good luck with all your DIY projects, and thank you for reading! diff --git a/content/tutorials/development_containers4_podman/index.md b/content/tutorials/development_containers4_podman/index.md index 37d2cd2e4..8a2e7803a 100644 --- a/content/tutorials/development_containers4_podman/index.md +++ b/content/tutorials/development_containers4_podman/index.md @@ -26,8 +26,8 @@ output: -In this cluster of tutorials, you might have [gotten a general overview on containers](../../tutorials/development_containers), and installed Docker. -You can find instructions on [how to run existing images](../../tutorials/development_containers_run), and take this further to [building custom containers](../../tutorials/development_containers_build). +In this cluster of tutorials, you might have [gotten a general overview on containers](../../tutorials/development_containers1), and installed Docker. +You can find instructions on [how to run existing images](../../tutorials/development_containers2_run), and take this further to [building custom containers](../../tutorials/development_containers3_build). And during the installation and use of Docker, you might have been annoyed by the mandatory administrator mode, or quirks of the Desktop App. Or you might value fully free and open source software, like I do. @@ -135,7 +135,7 @@ podman run -it docker.io/alpine # will connect to the container exit ``` -Except for the prefix, everything you [can read in our `docker run` tutorial](../../tutorials/development_containers_run) still applies. +Except for the prefix, everything you [can read in our `docker run` tutorial](../../tutorials/development_containers2_run) still applies. # Limitations @@ -146,7 +146,7 @@ Note that at least some `docker.io` images will not work: I actually experienced # podman run --rm -it docker.io/docker:25.0-dind-rootless ``` -However, it is logical that that one does not work: it builds a (root-level) Docker which is supposed to contain a rootless Docker ([*cf.* the overview tutorial](../../tutorials/development_containers#sec-rootless)). +However, it is logical that that one does not work: it builds a (root-level) Docker which is supposed to contain a rootless Docker ([*cf.* the overview tutorial](../../tutorials/development_containers1#sec-rootless)). The outer Docker layer requires root, which Podman cannot provide. This is a logical case; if you understand it, congratulations: you have achieved a basic understanding of containers and user privileges :) @@ -156,7 +156,7 @@ Most use cases are covered, for example a containerized R environment. # Podman Rocker From here, **Podman is a full drop-in replacement for Docker**; just that you are not forced to grant host system root privileges to containers. -This means that you can simply apply [everything I showed about the `build` command](../../tutorial/development_containers_build) by exchanging `docker` for `podman`. +This means that you can simply apply [everything I showed about the `build` command](../../tutorial/development_containers3_build) by exchanging `docker` for `podman`. Any Dockerfile should work, with the mentioned mini-adjustment to `FROM`. And you can use any Docker image; `docker.io/rocker/rstudio` [is available](https://rocker-project.org/use/rootless-podman.html) (don't forget to specify the port). diff --git a/content/tutorials/development_containers4_podman/index.qmd b/content/tutorials/development_containers4_podman/index.qmd index 88aa8150c..f1c53e57b 100644 --- a/content/tutorials/development_containers4_podman/index.qmd +++ b/content/tutorials/development_containers4_podman/index.qmd @@ -25,8 +25,8 @@ output: --- -In this cluster of tutorials, you might have [gotten a general overview on containers](/tutorials/TODO), and installed Docker. -You can find instructions on [how to run existing images](/tutorials/TODO), and take this further to [building custom containers](/tutorials/TODO). +In this cluster of tutorials, you might have [gotten a general overview on containers](../../tutorials/development_containers1), and installed Docker. +You can find instructions on [how to run existing images](../../tutorials/development_containers2_run), and take this further to [building custom containers](../../tutorials/development_containers3_build). And during the installation and use of Docker, you might have been annoyed by the mandatory administrator mode, or quirks of the Desktop App. Or you might value fully free and open source software, like I do. @@ -147,7 +147,7 @@ exit ``` -Except for the prefix, everything you [can read in our `docker run` tutorial](/tutorials/TODO) still applies. +Except for the prefix, everything you [can read in our `docker run` tutorial](../../tutorials/development_containers2_run) still applies. # Limitations @@ -159,7 +159,7 @@ Note that at least some `docker.io` images will not work: I actually experienced # podman run --rm -it docker.io/docker:25.0-dind-rootless ``` -However, it is logical that that one does not work: it builds a (root-level) Docker which is supposed to contain a rootless Docker ([*cf.* the overview tutorial](../../tutorials/development_containers#sec-rootless)). +However, it is logical that that one does not work: it builds a (root-level) Docker which is supposed to contain a rootless Docker ([*cf.* the overview tutorial](../../tutorials/development_containers1#sec-rootless)). The outer Docker layer requires root, which Podman cannot provide. This is a logical case; if you understand it, congratulations: you have achieved a basic understanding of containers and user privileges :) @@ -170,7 +170,7 @@ Most use cases are covered, for example a containerized R environment. # Podman Rocker From here, **Podman is a full drop-in replacement for Docker**; just that you are not forced to grant host system root privileges to containers. -This means that you can simply apply [everything I showed about the `build` command](/tutorial/TODO) by exchanging `docker` for `podman`. +This means that you can simply apply [everything I showed about the `build` command](../../tutorial/development_containers3_build) by exchanging `docker` for `podman`. Any Dockerfile should work, with the mentioned mini-adjustment to `FROM`. From 4c2cdcfbe4a6c0eea9ba786cd8f694e748eebb6e Mon Sep 17 00:00:00 2001 From: Falk Mielke Date: Fri, 21 Feb 2025 14:21:53 +0100 Subject: [PATCH 50/51] docker: markdown blocks / hugo clash curly brackets did not go well with the hugo update https://github.com/inbo/tutorials/pull/359 --- .../development_containers1/index.md | 22 ++--- .../development_containers1/index.qmd | 10 +-- .../development_containers2_run/index.qmd | 4 +- .../development_containers3_build/index.md | 80 ++++++++++--------- .../development_containers3_build/index.qmd | 14 ++-- .../development_containers4_podman/index.md | 16 ++-- .../development_containers4_podman/index.qmd | 16 ++-- 7 files changed, 84 insertions(+), 78 deletions(-) diff --git a/content/tutorials/development_containers1/index.md b/content/tutorials/development_containers1/index.md index 1a3e7b16b..62dd6b4ff 100644 --- a/content/tutorials/development_containers1/index.md +++ b/content/tutorials/development_containers1/index.md @@ -138,7 +138,7 @@ Either way, note that you need to run the docker app or docker in a terminal *as More info about the installation on your specific Linux operation systems [can be found here](https://docs.docker.com/engine/install). The procedure for Debian or Ubuntu-based distributions involves trusting dockers gpg keys and adding an extra repository, [some caution is warranted](https://wiki.debian.org/DontBreakDebian). -``` {sh} +``` sh #| eval: false sudo apt update && sudo apt install docker-ce docker-buildx-plugin # debian-based # sudo pacman -Sy docker docker-buildx # Arch Linux @@ -151,7 +151,7 @@ Many features which you would take for granted in this kind of software (securit For users to be able to use Docker, they must be in the "docker" group. (Insert your username at ``.) -``` {sh} +``` sh #| eval: false sudo usermod -a -G docker ``` @@ -165,7 +165,7 @@ However, due to [diverse](https://docs.docker.com/engine/security) [security](ht On a `systemd` system, you can start and stop Docker on demand via the following commands (those will ask you for `sudo` authentification if necessary). -``` {sh} +``` sh #| eval: false systemctl start docker @@ -179,7 +179,7 @@ For aficionados: docker actually runs multiple services: the docker service, the You can check the Docker installation by confirming the version at which the service is running. -``` {sh} +``` sh #| eval: false docker --version ``` @@ -296,14 +296,16 @@ In this (and only this) situation, the simple solution is to copy a clone of the The `git clone` should reside within the Dockerfile folder. Then the Dockerfile section can look like the following: - # copy the repo - COPY my_private_repo /opt/my_private_repo +``` +# copy the repo +COPY my_private_repo /opt/my_private_repo - # manually install dependencies - RUN R -q -e 'install.packages("remotes", dependencies = TRUE)' +# manually install dependencies +RUN R -q -e 'install.packages("remotes", dependencies = TRUE)' - # install package from folder - RUN R -q -e 'install.packages("/opt/my_private_repo", repos = NULL, type = "source", dependencies = TRUE)' +# install package from folder +RUN R -q -e 'install.packages("/opt/my_private_repo", repos = NULL, type = "source", dependencies = TRUE)' +``` This way of handling private repositories [seems to be good practice](https://stackoverflow.com/questions/23391839/clone-private-git-repo-with-dockerfile/55761914#55761914), for being simple, secure, and generally most feasible. diff --git a/content/tutorials/development_containers1/index.qmd b/content/tutorials/development_containers1/index.qmd index ddc687b0d..9226bcb7b 100644 --- a/content/tutorials/development_containers1/index.qmd +++ b/content/tutorials/development_containers1/index.qmd @@ -147,7 +147,7 @@ Either way, note that you need to run the docker app or docker in a terminal *as More info about the installation on your specific Linux operation systems [can be found here](https://docs.docker.com/engine/install). The procedure for Debian or Ubuntu-based distributions involves trusting dockers gpg keys and adding an extra repository, [some caution is warranted](https://wiki.debian.org/DontBreakDebian). -```{sh} +```sh #| eval: false sudo apt update && sudo apt install docker-ce docker-buildx-plugin # debian-based # sudo pacman -Sy docker docker-buildx # Arch Linux @@ -162,7 +162,7 @@ Many features which you would take for granted in this kind of software (securit For users to be able to use Docker, they must be in the "docker" group. (Insert your username at ``.) -```{sh} +```sh #| eval: false sudo usermod -a -G docker ``` @@ -178,7 +178,7 @@ However, due to [diverse](https://docs.docker.com/engine/security) [security](ht On a `systemd` system, you can start and stop Docker on demand via the following commands (those will ask you for `sudo` authentification if necessary). -```{sh} +```sh #| eval: false systemctl start docker @@ -195,7 +195,7 @@ For aficionados: docker actually runs multiple services: the docker service, the You can check the Docker installation by confirming the version at which the service is running. -```{sh} +```sh #| eval: false docker --version ``` @@ -328,7 +328,7 @@ In this (and only this) situation, the simple solution is to copy a clone of the The `git clone` should reside within the Dockerfile folder. Then the Dockerfile section can look like the following: -```{} +``` # copy the repo COPY my_private_repo /opt/my_private_repo diff --git a/content/tutorials/development_containers2_run/index.qmd b/content/tutorials/development_containers2_run/index.qmd index 415eaa337..0bce8582f 100644 --- a/content/tutorials/development_containers2_run/index.qmd +++ b/content/tutorials/development_containers2_run/index.qmd @@ -157,14 +157,14 @@ benchmark(test()) In the terminal: -```{} +``` test replications elapsed relative user.self sys.self user.child sys.child 1 test() 100 22.391 1 83.961 65.291 0 0 ``` In the container: -```{} +``` test replications elapsed relative user.self sys.self user.child sys.child 1 test() 100 26.076 1 102.494 153.89 0 0 ``` diff --git a/content/tutorials/development_containers3_build/index.md b/content/tutorials/development_containers3_build/index.md index 734560b68..7ac97c160 100644 --- a/content/tutorials/development_containers3_build/index.md +++ b/content/tutorials/development_containers3_build/index.md @@ -104,20 +104,22 @@ The Dockerfile resides in your working folder (yet it also defines a [`WORKDIR`] - # Use the official Python image (Alpine Linux, Python 3) - FROM python:3-alpine +``` +# Use the official Python image (Alpine Linux, Python 3) +FROM python:3-alpine - # install app dependencies - RUN apk update && apk add --no-cache python3 py3-pip - RUN pip install flask +# install app dependencies +RUN apk update && apk add --no-cache python3 py3-pip +RUN pip install flask - # install app - COPY hello.py / +# install app +COPY hello.py / - # final configuration - ENV FLASK_APP=hello - EXPOSE 8000 - CMD ["flask", "run", "--host", "0.0.0.0", "--port", "8000"] +# final configuration +ENV FLASK_APP=hello +EXPOSE 8000 +CMD ["flask", "run", "--host", "0.0.0.0", "--port", "8000"] +``` Note that the following `hello.py` file needs to be present in your working directory (you will be reminded by a friendly error message): @@ -132,7 +134,7 @@ def hello(): With the `Dockerfile` and `hello.py` in place, you can build the container [^2]. -``` {sh} +``` sh #| eval: false # on Windows, you are already in an administrator terminal docker build --pull -t my-flask . @@ -156,7 +158,7 @@ You should now see a `python` image, which is the base alpine image we built upo There is also a `my-flask`. Try it! -``` {sh} +``` sh #| eval: false docker run my-flask ``` @@ -208,36 +210,38 @@ They prepared quite [a lot of useful images](https://hub.docker.com/u/rocker), i Note the syntax in `FROM`: it is `rocker/:`. - FROM rocker/rstudio:latest - # (Use the rocker rstudio image) +``` +FROM rocker/rstudio:latest +# (Use the rocker rstudio image) - # update the system packages - RUN apt update \ - && apt upgrade --yes +# update the system packages +RUN apt update \ + && apt upgrade --yes - # git2rdata requires git - RUN apt-get update \ - && apt-get install -y --no-install-recommends \ - git libgit2-dev\ - && apt-get clean +# git2rdata requires git +RUN apt-get update \ + && apt-get install -y --no-install-recommends \ + git libgit2-dev\ + && apt-get clean - # update pre-installed R packages - # RUN Rscript -e 'update.packages(ask=FALSE)' +# update pre-installed R packages +# RUN Rscript -e 'update.packages(ask=FALSE)' - # copy a `.Rprofile` to the container - # available here: https://tutorials.inbo.be/installation/administrator/admin_install_r/Rprofile.site - COPY docker/.Rprofile $R_HOME/etc/Rprofile.site +# copy a `.Rprofile` to the container +# available here: https://tutorials.inbo.be/installation/administrator/admin_install_r/Rprofile.site +COPY docker/.Rprofile $R_HOME/etc/Rprofile.site - # install package via an R command (`R -q -e` or `Rscript -e`) - # (a) from pre-configured repositories - RUN Rscript -e 'install.packages("git2rdata")' +# install package via an R command (`R -q -e` or `Rscript -e`) +# (a) from pre-configured repositories +RUN Rscript -e 'install.packages("git2rdata")' - # (b) via r-universe - RUN R -q -e 'install.packages("watina", repos = c(inbo = "https://inbo.r-universe.dev", CRAN = "https://cloud.r-project.org"))' +# (b) via r-universe +RUN R -q -e 'install.packages("watina", repos = c(inbo = "https://inbo.r-universe.dev", CRAN = "https://cloud.r-project.org"))' - # (b) from github - RUN R -q -e 'install.packages("remotes")' - RUN R -q -e 'remotes::install_github("inbo/INBOmd", dependencies = TRUE)' +# (b) from github +RUN R -q -e 'install.packages("remotes")' +RUN R -q -e 'remotes::install_github("inbo/INBOmd", dependencies = TRUE)' +``` It takes some puzzle work to get the dependencies right, e.g. with the `libgit2` dependency (try commenting out that line to get a feeling for build failure). However, there is hope: (i) the error output is quite instructive (at least for Linux users), (ii) building is incremental, so you can add successively. @@ -255,14 +259,14 @@ More here: Test the image: -``` {sh} +``` sh #| eval: false docker build -t test-rstudio . ``` Run it, as before: -``` {sh} +``` sh #| eval: false docker run --rm -p 8787:8787 -e PASSWORD=YOURNEWPASSWORD test-rstudio ``` diff --git a/content/tutorials/development_containers3_build/index.qmd b/content/tutorials/development_containers3_build/index.qmd index 8ba5aa337..0d0dd4617 100644 --- a/content/tutorials/development_containers3_build/index.qmd +++ b/content/tutorials/development_containers3_build/index.qmd @@ -113,7 +113,7 @@ The Dockerfile resides in your working folder (yet it also defines a [`WORKDIR`] - Edit the file in your favorite text editor (`vim Dockerfile`; Windows users probably use "notepad"). - Paste and optionally modify the content below. -```{} +``` # Use the official Python image (Alpine Linux, Python 3) FROM python:3-alpine @@ -133,7 +133,7 @@ CMD ["flask", "run", "--host", "0.0.0.0", "--port", "8000"] Note that the following `hello.py` file needs to be present in your working directory (you will be reminded by a friendly error message): -```{python} +```python #| eval: false from flask import Flask app = Flask(__name__) @@ -146,7 +146,7 @@ def hello(): With the `Dockerfile` and `hello.py` in place, you can build the container [^4]. -```{sh} +```sh #| eval: false # on Windows, you are already in an administrator terminal docker build --pull -t my-flask . @@ -171,7 +171,7 @@ You should now see a `python` image, which is the base alpine image we built upo There is also a `my-flask`. Try it! -```{sh} +```sh #| eval: false docker run my-flask ``` @@ -229,7 +229,7 @@ They prepared quite [a lot of useful images](https://hub.docker.com/u/rocker), i Note the syntax in `FROM`: it is `rocker/:`. -```{} +``` FROM rocker/rstudio:latest # (Use the rocker rstudio image) @@ -280,7 +280,7 @@ More here: Test the image: -```{sh} +```sh #| eval: false docker build -t test-rstudio . ``` @@ -288,7 +288,7 @@ docker build -t test-rstudio . Run it, as before: -```{sh} +```sh #| eval: false docker run --rm -p 8787:8787 -e PASSWORD=YOURNEWPASSWORD test-rstudio ``` diff --git a/content/tutorials/development_containers4_podman/index.md b/content/tutorials/development_containers4_podman/index.md index 8a2e7803a..ffba769da 100644 --- a/content/tutorials/development_containers4_podman/index.md +++ b/content/tutorials/development_containers4_podman/index.md @@ -73,7 +73,7 @@ I follow the `podman` installation instructions for Arch Linux, to set up a **ro Installation: -``` {sh} +``` sh #| eval: false pacman -Sy podman podman-docker passt ``` @@ -87,7 +87,7 @@ Just to be safe, I briefly list the major configuration steps. The first step is to confirm a required kernel module: check that `unpriviledged_users_clone` is set to one. -``` {sh} +``` sh #| eval: false sysctl kernel.unprivileged_userns_clone ``` @@ -95,7 +95,7 @@ sysctl kernel.unprivileged_userns_clone Then, configure "subordinate user IDs". There are detail differences in each Linux distribution; with some luck, your username is already present in these lists: -``` {sh} +``` sh #| eval: false cat /etc/subuid cat /etc/subgid @@ -103,7 +103,7 @@ cat /etc/subgid If not, you can be admitted to the club of subordinates with the command: -``` {sh} +``` sh #| eval: false usermod --add-subuids 100000-165535 --add-subgids 100000-165535 podman system migrate @@ -112,7 +112,7 @@ podman system migrate We note some useful commands on the way: `podman system ...` and `podman info`. You might immediately check "native rootless overlays" (has something to do with mounting filesystems in the container): -``` {sh} +``` sh #| eval: false podman info | grep -i overlay ``` @@ -127,7 +127,7 @@ You can use images from `docker.io` with Podman. The only difference from Docker is the explicit mention of the source, `docker.io`. For example: -``` {sh} +``` sh #| eval: false podman search docker.io/alpine podman pull docker.io/alpine # download a machine @@ -141,7 +141,7 @@ Except for the prefix, everything you [can read in our `docker run` tutorial](.. Note that at least some `docker.io` images will not work: I actually experienced issues with the "rootless Docker image": -``` {sh} +``` sh #| eval: false # podman run --rm -it docker.io/docker:25.0-dind-rootless ``` @@ -162,7 +162,7 @@ Any Dockerfile should work, with the mentioned mini-adjustment to `FROM`. And you can use any Docker image; `docker.io/rocker/rstudio` [is available](https://rocker-project.org/use/rootless-podman.html) (don't forget to specify the port). You may even write `docker` in the terminal: it will alias to `podman` (via the `podman-docker` package on Linux, or an alias). -``` {sh} +``` sh #| eval: false podman run --rm -p 8787:8787 -e PASSWORD=YOURNEWPASSWORD -v /data/git/coding-club:/root/coding-club docker.io/rocker/rstudio ``` diff --git a/content/tutorials/development_containers4_podman/index.qmd b/content/tutorials/development_containers4_podman/index.qmd index f1c53e57b..7fbb37f3d 100644 --- a/content/tutorials/development_containers4_podman/index.qmd +++ b/content/tutorials/development_containers4_podman/index.qmd @@ -79,7 +79,7 @@ I follow the `podman` installation instructions for Arch Linux, to set up a **ro Installation: -```{sh} +```sh #| eval: false pacman -Sy podman podman-docker passt ``` @@ -95,7 +95,7 @@ Just to be safe, I briefly list the major configuration steps. The first step is to confirm a required kernel module: check that `unpriviledged_users_clone` is set to one. -```{sh} +```sh #| eval: false sysctl kernel.unprivileged_userns_clone ``` @@ -103,7 +103,7 @@ sysctl kernel.unprivileged_userns_clone Then, configure "subordinate user IDs". There are detail differences in each Linux distribution; with some luck, your username is already present in these lists: -```{sh} +```sh #| eval: false cat /etc/subuid cat /etc/subgid @@ -111,7 +111,7 @@ cat /etc/subgid If not, you can be admitted to the club of subordinates with the command: -```{sh} +```sh #| eval: false usermod --add-subuids 100000-165535 --add-subgids 100000-165535 podman system migrate @@ -121,7 +121,7 @@ podman system migrate We note some useful commands on the way: `podman system ...` and `podman info`. You might immediately check "native rootless overlays" (has something to do with mounting filesystems in the container): -```{sh} +```sh #| eval: false podman info | grep -i overlay ``` @@ -138,7 +138,7 @@ You can use images from `docker.io` with Podman. The only difference from Docker is the explicit mention of the source, `docker.io`. For example: -```{sh} +```sh #| eval: false podman search docker.io/alpine podman pull docker.io/alpine # download a machine @@ -154,7 +154,7 @@ Except for the prefix, everything you [can read in our `docker run` tutorial](.. Note that at least some `docker.io` images will not work: I actually experienced issues with the "rootless Docker image": -```{sh} +```sh #| eval: false # podman run --rm -it docker.io/docker:25.0-dind-rootless ``` @@ -177,7 +177,7 @@ Any Dockerfile should work, with the mentioned mini-adjustment to `FROM`. And you can use any Docker image; `docker.io/rocker/rstudio` [is available](https://rocker-project.org/use/rootless-podman.html) (don't forget to specify the port). You may even write `docker` in the terminal: it will alias to `podman` (via the `podman-docker` package on Linux, or an alias). -```{sh} +```sh #| eval: false podman run --rm -p 8787:8787 -e PASSWORD=YOURNEWPASSWORD -v /data/git/coding-club:/root/coding-club docker.io/rocker/rstudio ``` From df237daaa9cc1ab9e895d50d3fa10f3cf86b7600 Mon Sep 17 00:00:00 2001 From: Falk Mielke Date: Thu, 6 Mar 2025 10:42:55 +0100 Subject: [PATCH 51/51] docker: typo performacne drop --- content/tutorials/development_containers2_run/index.md | 2 +- content/tutorials/development_containers2_run/index.qmd | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/content/tutorials/development_containers2_run/index.md b/content/tutorials/development_containers2_run/index.md index b8e364bb3..ab2c2f044 100644 --- a/content/tutorials/development_containers2_run/index.md +++ b/content/tutorials/development_containers2_run/index.md @@ -161,7 +161,7 @@ In the container: Now, the *good news* is that the difference is not by orders of magnitude. This indicates that the chosen rocker image integrated the more performant `blas` variant which is [recommended](https://pbs-assess.github.io/sdmTMB/index.html#installation) [elsewhere](https://prdm0.github.io/ropenblas/#installation) (`blas-openblas`). -The *bad news* is that we still a hit of `-20%` performance, which is considerable. +The *bad news* is that we still suffer a performance drop of `-20%`, which is considerable. This is just a single snapshot on a laptop, and putatively `blas`-confounded. Feel free to systematically and scientifically repeat the tests on your own machine. diff --git a/content/tutorials/development_containers2_run/index.qmd b/content/tutorials/development_containers2_run/index.qmd index 0bce8582f..0f7794cd3 100644 --- a/content/tutorials/development_containers2_run/index.qmd +++ b/content/tutorials/development_containers2_run/index.qmd @@ -173,7 +173,7 @@ In the container: Now, the *good news* is that the difference is not by orders of magnitude. This indicates that the chosen rocker image integrated the more performant `blas` variant which is [recommended](https://pbs-assess.github.io/sdmTMB/index.html#installation) [elsewhere](https://prdm0.github.io/ropenblas/#installation) (`blas-openblas`). -The *bad news* is that we still a hit of `-20%` performance, which is considerable. +The *bad news* is that we still suffer a performance drop of `-20%`, which is considerable. This is just a single snapshot on a laptop, and putatively `blas`-confounded.