From c69024f49e59744807d74bdb164630768b9a2a71 Mon Sep 17 00:00:00 2001 From: Ryan Dale Date: Fri, 24 Nov 2023 09:27:20 -0500 Subject: [PATCH] add inventory of dockerfiles/images --- source/developer/dockerfile-inventory.rst | 167 +++ source/developer/index.rst | 1 + source/images/bioconda-containers.excalidraw | 1318 ++++++++++++++++++ source/images/bioconda-containers.png | Bin 0 -> 47033 bytes source/images/bioconda-containers.svg | 21 + 5 files changed, 1507 insertions(+) create mode 100644 source/developer/dockerfile-inventory.rst create mode 100644 source/images/bioconda-containers.excalidraw create mode 100644 source/images/bioconda-containers.png create mode 100644 source/images/bioconda-containers.svg diff --git a/source/developer/dockerfile-inventory.rst b/source/developer/dockerfile-inventory.rst new file mode 100644 index 0000000..1629e20 --- /dev/null +++ b/source/developer/dockerfile-inventory.rst @@ -0,0 +1,167 @@ +Dockerfile inventory +==================== + +Docker containers are used in multiple ways by bioconda-utils. Broadly, we can +divide them into containers used for *building* packages and containers used +for the bot. + +Overview of containers used in building +--------------------------------------- + +Bioconda builds not only conda packages but also Docker containers with the +package installed. Here's how it works. + + +.. figure:: ../images/bioconda-containers.png + + Sketch of how containers and packages interact with :command:`bioconda-utils + build --docker --mulled-test`. See below for details. [:download:`excalidraw + <../images/bioconda-containers.excalidraw>`] [:download:`SVG + <../images/bioconda-containers.svg>`] + +If we run :command:`bioconda-utils build` without the :command:`--docker` +argument, it will build a conda package using the conda-build in the local +environment and the built package will appear in the host's :file:`conda-bld` +directory, ready for uploading to the channel. + +However, the host may have libraries or packages installed that are not defined +in the recipe. If a package uses any of these, then even if tests pass on this +host they may fail on another machine that is missing those undeclared +dependencies, resulting in a broken package. Since we use multiple CI providers +(CircleCI, GitHub Actions, Azure DevOps), and since any one of these providers +may install or update libraries on their hosts at any time, there is a risk of +creating packages that work when building but are broken on other systems. + +To guard against this, we run :command:`bioconda-utils build` with the +:command:`--docker` argument. This runs conda-build inside a Docker container, +isolating it from the host and preventing any host libraries from being used. +As before, the resulting package is found in the host's :file:`conda-bld` +directory. + +When we additionally use the :command:`--mulled-test` argument, +:program:`bioconda-utils` will run :program:`mulled-build` from the `galaxy-lib +`_ package. +:program:`mulled-build` is a tool to convert conda packages into Docker images. +It uses `involucro `_ to make a final, +minimal image with a dramatically reduced file size. + +This process uses two images: an image containing conda, and a minimal base +image. First, a container with conda installed is used to :command:`conda +install` the package built in the previous step into the container. This +installs the package's dependencies as well. The test commands are extracted +from the package, and run to test this newly-installed package. Next, *just the +conda environment directory* is extracted from the conda container and layered +onto the base image using :program:`involucro`. + +The base image has very little else, not even conda. So the end result is +a minimal Docker image with nothing but the installed package and its +dependencies (and therefore a small size), ready to be uploaded to +a repository. + + +Details of containers using in building +--------------------------------------- + +The **build image** is used for *building* a package, isolated from the host. +The built package appears back on the host's local channel. + +The **conda image** is used by mulled-build for *installing* the conda package +in such a way that the resulting conda env can be easily copied out by +involucro + +The **base image** is used by involucro as a starting image into which it will +copy the conda env created by mulled-build in the conda image + +The **extended base image** is used in rare cases where very minimal base image +is *too* minimal. In this case, recipe authors can specify +``container:extended-base:true`` in the meta.yaml file, and the extended image +will be used as the base instead. + +Here are the images, their respective Dockerfiles, and where they are built. + +.. list-table:: + :header-rows: 1 + :class: inventory + + * - description + - image + - maintained in + - dockerfile + - built by + + * - build image + - ``quay.io/bioconda/bioconda-utils-build-env-cos7`` + - bioconda-utils + - `Dockerfile `_ + - `GitHub Action workflow `_ + + * - conda image + - ``quay.io/bioconda/create-env:latest`` + - bioconda-containers + - `Dockerfile `_ + - `GitHub Action workflow `_ + + * - base image + - ``quay.io/bioconda/base-glibc-busybox-bash:3.0`` + - bioconda-containers + - `Dockerfile `_ + - `GitHub Action workflow `_ + + * - extended base image + - ``quay.io/bioconda/base-glibc-debian-bash:3.0`` + - bioconda-containers + - `Dockerfile `_ + - `GitHub Action workflow `_ + +As of Nov 2023, each of these is configured to be built on both amd64 and arm64 +(a.k.a x86_64 and aarch64) architectures. + +In the actual :program:`bioconda-utils` code, the containers are specified in +several ways. Note that the links to code below point to specific commits in +order to highlight a line, so these may not be the most up-to-date code. But it +can give you a starting point for where to look. + +- The build image is configured in `bioconda_utils/cli `_. + +- mulled-build pays attention to `env vars + `_ + that define what images to use. + +- `bioconda_utils.pkg_test.test_package() + `_ + sets DEST_BASE_IMAGE to the `base_image` arg, which in turn is set in + `bioconda_utils.build.build() + `_. + This can take one of two hard-coded values, depending on if the recipe needed + an extended image or not. + +- mulled-build also needs a conda image to use. This is set by bioconda-utils + in `pkg_test.py + `_ + which is then passed to `build.build + `_. + + +The bot +------- + +The BiocondaBot responds to comments on PRs an interacts with some artifacts +created by package builds. In order to have rapid response times, the bot is +implemented as a set of tagged Docker containers. + +The bot actions largely consist of relatively simple HTTP requests. The code +for these actions if maintained in the `src/bioconda_bot +`_ +Python package, within the bioconda-containers repo. There are different tagged +images for the different behaviors of the bot, which are built and pushed in +the `bot.yaml +`_ +GitHub Action workflow in the bioconda-containers repo. For example, the +comment behavior on bioconda-recipes is defined `here +`_, +which uses the ``quay.io/bioconda/bot:comment`` container, sets some env +variables that GitHub Actions has access to, and runs :command:`bioconda-bot +comment` in the container. This container was created `here +`_, +when the `matrix.tag was set to "comment" +`_. diff --git a/source/developer/index.rst b/source/developer/index.rst index ea76ebf..37f721a 100644 --- a/source/developer/index.rst +++ b/source/developer/index.rst @@ -9,5 +9,6 @@ Developer Docs bulk repodata_patching ci-inventory + dockerfile-inventory repo-inventory aarch64 diff --git a/source/images/bioconda-containers.excalidraw b/source/images/bioconda-containers.excalidraw new file mode 100644 index 0000000..a311012 --- /dev/null +++ b/source/images/bioconda-containers.excalidraw @@ -0,0 +1,1318 @@ +{ + "type": "excalidraw", + "version": 2, + "source": "https://excalidraw.com", + "elements": [ + { + "id": "Ry0HXcfp2TtDCwDgRSN05", + "type": "rectangle", + "x": 315.244140625, + "y": 439.88203125, + "width": 641.97265625, + "height": 29.2, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffd43b", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "seed": 591301005, + "version": 427, + "versionNonce": 861916067, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "92AKwAgt4H6S0AAjrQu_3" + } + ], + "updated": 1700758646509, + "link": null, + "locked": false + }, + { + "id": "92AKwAgt4H6S0AAjrQu_3", + "type": "text", + "x": 570.60546875, + "y": 444.88203125, + "width": 131.25, + "height": 19.2, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 1410176237, + "version": 491, + "versionNonce": 1498177347, + "isDeleted": false, + "boundElements": null, + "updated": 1700758646509, + "link": null, + "locked": false, + "text": "bioconda-utils", + "fontSize": 16, + "fontFamily": 3, + "textAlign": "center", + "verticalAlign": "middle", + "baseline": 15, + "containerId": "Ry0HXcfp2TtDCwDgRSN05", + "originalText": "bioconda-utils", + "lineHeight": 1.2 + }, + { + "type": "rectangle", + "version": 493, + "versionNonce": 424045965, + "isDeleted": false, + "id": "DMfgmgWEVMH6fhFuNgxVr", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 504.8535156250001, + "y": 479.989453125, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffec99", + "width": 446.31640624999983, + "height": 29.2, + "seed": 129562083, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "ebIoI_c0AL2Mect1VXg5P" + } + ], + "updated": 1700758642591, + "link": null, + "locked": false + }, + { + "id": "ebIoI_c0AL2Mect1VXg5P", + "type": "text", + "x": 671.76171875, + "y": 484.989453125, + "width": 112.5, + "height": 19.2, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 1102745517, + "version": 453, + "versionNonce": 1587229677, + "isDeleted": false, + "boundElements": null, + "updated": 1700758642592, + "link": null, + "locked": false, + "text": "mulled-build", + "fontSize": 16, + "fontFamily": 3, + "textAlign": "center", + "verticalAlign": "middle", + "baseline": 15, + "containerId": "DMfgmgWEVMH6fhFuNgxVr", + "originalText": "mulled-build", + "lineHeight": 1.2 + }, + { + "type": "rectangle", + "version": 663, + "versionNonce": 429563373, + "isDeleted": false, + "id": "abSQmI8Tl4VEY2QBVppey", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 733.376953125, + "y": 517.59375, + "strokeColor": "#1e1e1e", + "backgroundColor": "#fff9db", + "width": 216.76171874999997, + "height": 29.2, + "seed": 1468203427, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "QDHZi5ciBJh_S7srIu1IG" + } + ], + "updated": 1700758628960, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 652, + "versionNonce": 969562189, + "isDeleted": false, + "id": "QDHZi5ciBJh_S7srIu1IG", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 799.5703125, + "y": 522.59375, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 84.375, + "height": 19.2, + "seed": 1066980675, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1700758628961, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 3, + "text": "involucro", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "abSQmI8Tl4VEY2QBVppey", + "originalText": "involucro", + "lineHeight": 1.2, + "baseline": 15 + }, + { + "id": "cCiUDhdHKsMRPLATOl74B", + "type": "line", + "x": 152.51953125, + "y": 686.49609375, + "width": 766.21484375, + "height": 0, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 2081779939, + "version": 218, + "versionNonce": 1974850285, + "isDeleted": false, + "boundElements": null, + "updated": 1700758620397, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 766.21484375, + 0 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": null + }, + { + "id": "lzBDka8XJXnQKztZ11Dxh", + "type": "text", + "x": 278.33984375, + "y": 748.20078125, + "width": 150, + "height": 19.2, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 507070019, + "version": 215, + "versionNonce": 1198972515, + "isDeleted": false, + "boundElements": [ + { + "id": "YBQpyBT_TcIo47RBV5WZP", + "type": "arrow" + } + ], + "updated": 1700758620397, + "link": null, + "locked": false, + "text": "recipes/pkgname/", + "fontSize": 16, + "fontFamily": 3, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 15, + "containerId": null, + "originalText": "recipes/pkgname/", + "lineHeight": 1.2 + }, + { + "id": "uD7PB-jAZk41aqxRuaISt", + "type": "text", + "x": 469.8046875, + "y": 748.18125, + "width": 234.375, + "height": 19.2, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 797833347, + "version": 179, + "versionNonce": 1718819331, + "isDeleted": false, + "boundElements": [ + { + "id": "Wv4FKPgKrMaF6iDzDn0Lx", + "type": "arrow" + }, + { + "id": "z2WjdCLrgR50gxx-9Mp6i", + "type": "arrow" + } + ], + "updated": 1700758620397, + "link": null, + "locked": false, + "text": "conda-bld/pkgname.tar.bz2", + "fontSize": 16, + "fontFamily": 3, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 15, + "containerId": null, + "originalText": "conda-bld/pkgname.tar.bz2", + "lineHeight": 1.2 + }, + { + "id": "YBQpyBT_TcIo47RBV5WZP", + "type": "arrow", + "x": 323.4322857790941, + "y": 736.7515625, + "width": 21.145419762216193, + "height": 55.58479406392064, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 2043726947, + "version": 1315, + "versionNonce": 626341837, + "isDeleted": false, + "boundElements": null, + "updated": 1700758665077, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 21.145419762216193, + -55.58479406392064 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "lzBDka8XJXnQKztZ11Dxh", + "gap": 11.44921875, + "focus": -0.4822151595925682 + }, + "endBinding": { + "elementId": "ZSPG8ACP4jq3ssZMYNzQW", + "gap": 13.940205936079337, + "focus": 0.20174636147394562 + }, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "id": "Wv4FKPgKrMaF6iDzDn0Lx", + "type": "arrow", + "x": 503.05232956876023, + "y": 676.0541109444912, + "width": 34.33759363829097, + "height": 63.46698280550879, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 1479936387, + "version": 1349, + "versionNonce": 461362957, + "isDeleted": false, + "boundElements": null, + "updated": 1700758665076, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 34.33759363829097, + 63.46698280550879 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "ZSPG8ACP4jq3ssZMYNzQW", + "gap": 9.063868781165752, + "focus": -0.32741834502722905 + }, + "endBinding": { + "elementId": "uD7PB-jAZk41aqxRuaISt", + "gap": 8.66015625, + "focus": -0.32458329747209613 + }, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "id": "z2WjdCLrgR50gxx-9Mp6i", + "type": "arrow", + "x": 578.3213788819246, + "y": 739.74765625, + "width": 33.700690869569144, + "height": 83.9816591883033, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 2070448685, + "version": 915, + "versionNonce": 1083999011, + "isDeleted": false, + "boundElements": null, + "updated": 1700759043553, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 33.700690869569144, + -83.9816591883033 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "uD7PB-jAZk41aqxRuaISt", + "focus": -0.13192007287625357, + "gap": 8.43359375 + }, + "endBinding": { + "elementId": "Mp4CB3RLFFYLjwBEjjBCf", + "focus": 0.4992174931088646, + "gap": 1.4331845616966348 + }, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "type": "rectangle", + "version": 704, + "versionNonce": 221470413, + "isDeleted": false, + "id": "YagLhsW7rU9oRtGDs3MVQ", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 815.67578125, + "y": 567.35546875, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 140.07812499999994, + "height": 93.99609375, + "seed": 471524227, + "groupIds": [ + "qxo2_x0gTN9YPhOX7abNO" + ], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "UOwu-SVo7CcdghHvhRNoO" + } + ], + "updated": 1700758620397, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 734, + "versionNonce": 424706179, + "isDeleted": false, + "id": "UOwu-SVo7CcdghHvhRNoO", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 844.5771484375, + "y": 572.35546875, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 82.275390625, + "height": 46, + "seed": 1318681379, + "groupIds": [ + "qxo2_x0gTN9YPhOX7abNO" + ], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1700758620397, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 2, + "text": "base \ncontainer", + "textAlign": "center", + "verticalAlign": "top", + "containerId": "YagLhsW7rU9oRtGDs3MVQ", + "originalText": "base container", + "lineHeight": 1.15, + "baseline": 41 + }, + { + "type": "rectangle", + "version": 775, + "versionNonce": 1113062701, + "isDeleted": false, + "id": "90jJda8XDVExXoLSysirR", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 823.23828125, + "y": 623.15234375, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 129.57031250000003, + "height": 29.2, + "seed": 1352933059, + "groupIds": [ + "qxo2_x0gTN9YPhOX7abNO" + ], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "HBYY_8kDzFZ8A95N1D3Xr" + }, + { + "id": "NixZifivTH-xD1rNFKj8g", + "type": "arrow" + } + ], + "updated": 1700758620397, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 866, + "versionNonce": 756250659, + "isDeleted": false, + "id": "HBYY_8kDzFZ8A95N1D3Xr", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 841.1484375, + "y": 628.15234375, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 93.75, + "height": 19.2, + "seed": 1826180707, + "groupIds": [ + "qxo2_x0gTN9YPhOX7abNO" + ], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1700758620397, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 3, + "text": "/usr/local", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "90jJda8XDVExXoLSysirR", + "originalText": "/usr/local", + "lineHeight": 1.2, + "baseline": 15 + }, + { + "id": "NixZifivTH-xD1rNFKj8g", + "type": "arrow", + "x": 729.40234375, + "y": 642.2313583849638, + "width": 85.6875, + "height": 1.5641890104180902, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 359479811, + "version": 537, + "versionNonce": 1874482787, + "isDeleted": false, + "boundElements": null, + "updated": 1700759043553, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 85.6875, + 1.5641890104180902 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "Mp4CB3RLFFYLjwBEjjBCf", + "focus": 0.07085274746293091, + "gap": 10.89453125 + }, + "endBinding": { + "elementId": "90jJda8XDVExXoLSysirR", + "focus": -0.46725910481659183, + "gap": 8.1484375 + }, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "type": "rectangle", + "version": 527, + "versionNonce": 685145027, + "isDeleted": false, + "id": "y8aZgYOatYLM0Fa3dOUuj", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 586.07421875, + "y": 525, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 140.07812499999994, + "height": 136.27343750000003, + "seed": 2095935789, + "groupIds": [ + "EBigXOisoe8W1KUQ3lS5K" + ], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "Gr5IokqxpJqxRSfCPzEZl" + } + ], + "updated": 1700758620397, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 543, + "versionNonce": 1387419117, + "isDeleted": false, + "id": "Gr5IokqxpJqxRSfCPzEZl", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 614.9755859375, + "y": 530, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 82.275390625, + "height": 46, + "seed": 702595981, + "groupIds": [ + "EBigXOisoe8W1KUQ3lS5K" + ], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1700758620397, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 2, + "text": "conda \ncontainer", + "textAlign": "center", + "verticalAlign": "top", + "containerId": "y8aZgYOatYLM0Fa3dOUuj", + "originalText": "conda container", + "lineHeight": 1.15, + "baseline": 41 + }, + { + "type": "rectangle", + "version": 610, + "versionNonce": 1541267523, + "isDeleted": false, + "id": "Mp4CB3RLFFYLjwBEjjBCf", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 588.9375, + "y": 625.1328125, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 129.57031250000003, + "height": 29.2, + "seed": 1275482339, + "groupIds": [ + "EBigXOisoe8W1KUQ3lS5K" + ], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "-3ke31NdzuocXVw_hkILy" + }, + { + "id": "z2WjdCLrgR50gxx-9Mp6i", + "type": "arrow" + }, + { + "id": "NixZifivTH-xD1rNFKj8g", + "type": "arrow" + } + ], + "updated": 1700759043553, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 693, + "versionNonce": 1580266435, + "isDeleted": false, + "id": "-3ke31NdzuocXVw_hkILy", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 634.97265625, + "y": 630.1328125, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 37.5, + "height": 19.2, + "seed": 1030765699, + "groupIds": [ + "EBigXOisoe8W1KUQ3lS5K" + ], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1700759051498, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 3, + "text": "env/", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "Mp4CB3RLFFYLjwBEjjBCf", + "originalText": "env/", + "lineHeight": 1.2, + "baseline": 15 + }, + { + "type": "rectangle", + "version": 613, + "versionNonce": 1090955011, + "isDeleted": false, + "id": "HZ-rnkXnVkb89LtWcmhUZ", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 590.48046875, + "y": 590.4585937500001, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 129.57031250000003, + "height": 29.2, + "seed": 180706349, + "groupIds": [ + "EBigXOisoe8W1KUQ3lS5K" + ], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "x4SHbu6J53EOkI86YBWpP" + } + ], + "updated": 1700758620397, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 698, + "versionNonce": 895319725, + "isDeleted": false, + "id": "x4SHbu6J53EOkI86YBWpP", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 631.828125, + "y": 595.4585937500001, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 46.875, + "height": 19.2, + "seed": 730025613, + "groupIds": [ + "EBigXOisoe8W1KUQ3lS5K" + ], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1700758620397, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 3, + "text": "conda", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "HZ-rnkXnVkb89LtWcmhUZ", + "originalText": "conda", + "lineHeight": 1.2, + "baseline": 15 + }, + { + "id": "T80XglCa2EMVp9kTzyUad", + "type": "text", + "x": 176.8662109375, + "y": 592.29921875, + "width": 88.689453125, + "height": 32.199999999999996, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffec99", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 1326686243, + "version": 176, + "versionNonce": 2017513123, + "isDeleted": false, + "boundElements": null, + "updated": 1700758620397, + "link": null, + "locked": false, + "text": "Docker", + "fontSize": 28, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 26, + "containerId": null, + "originalText": "Docker", + "lineHeight": 1.15 + }, + { + "type": "text", + "version": 214, + "versionNonce": 1140007181, + "isDeleted": false, + "id": "8U-iTgt9HlDYzlNCGtoI9", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 176.8662109375, + "y": 717.353125, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffec99", + "width": 57.572265625, + "height": 32.199999999999996, + "seed": 1374987693, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1700758620397, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 2, + "text": "Host", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Host", + "lineHeight": 1.15, + "baseline": 26 + }, + { + "id": "ZSPG8ACP4jq3ssZMYNzQW", + "type": "rectangle", + "x": 313.4609375, + "y": 499.1015625, + "width": 187.53515625, + "height": 168.12499999999997, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [ + "VKry84j3vgFdUIVvIcZot" + ], + "frameId": null, + "roundness": { + "type": 3 + }, + "seed": 2141807747, + "version": 559, + "versionNonce": 1041120301, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "RSmIGjVVf1qi-P26cGPBy" + }, + { + "id": "Wv4FKPgKrMaF6iDzDn0Lx", + "type": "arrow" + }, + { + "id": "YBQpyBT_TcIo47RBV5WZP", + "type": "arrow" + } + ], + "updated": 1700758679592, + "link": null, + "locked": false + }, + { + "id": "RSmIGjVVf1qi-P26cGPBy", + "type": "text", + "x": 342.1845703125, + "y": 504.1015625, + "width": 130.087890625, + "height": 23, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [ + "VKry84j3vgFdUIVvIcZot" + ], + "frameId": null, + "roundness": null, + "seed": 1033868227, + "version": 618, + "versionNonce": 505719075, + "isDeleted": false, + "boundElements": null, + "updated": 1700758679592, + "link": null, + "locked": false, + "text": "build container", + "fontSize": 20, + "fontFamily": 2, + "textAlign": "center", + "verticalAlign": "top", + "baseline": 18, + "containerId": "ZSPG8ACP4jq3ssZMYNzQW", + "originalText": "build container", + "lineHeight": 1.15 + }, + { + "type": "rectangle", + "version": 772, + "versionNonce": 1118842509, + "isDeleted": false, + "id": "COs0yi5IlmMD9jBPtDSYv", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 327.6875, + "y": 620.153125, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 159.08203125000003, + "height": 29.2, + "seed": 1481006691, + "groupIds": [ + "VKry84j3vgFdUIVvIcZot" + ], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "9lNvtWk4-OHSmBA-xig0m" + } + ], + "updated": 1700758679592, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 1064, + "versionNonce": 580488387, + "isDeleted": false, + "id": "9lNvtWk4-OHSmBA-xig0m", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 341.603515625, + "y": 625.153125, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 131.25, + "height": 19.2, + "seed": 827496963, + "groupIds": [ + "VKry84j3vgFdUIVvIcZot" + ], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1700758679592, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 3, + "text": "bioconda-utils", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "COs0yi5IlmMD9jBPtDSYv", + "originalText": "bioconda-utils", + "lineHeight": 1.2, + "baseline": 15 + }, + { + "type": "rectangle", + "version": 644, + "versionNonce": 388289773, + "isDeleted": false, + "id": "wBcYIwBjFolSi4vZE0mDW", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 342.443359375, + "y": 549.6968750000001, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 129.57031250000003, + "height": 29.2, + "seed": 741604525, + "groupIds": [ + "VKry84j3vgFdUIVvIcZot" + ], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "Xiop5TihDc0Y2uoKalufe" + } + ], + "updated": 1700758679592, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 729, + "versionNonce": 2045836387, + "isDeleted": false, + "id": "Xiop5TihDc0Y2uoKalufe", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 383.791015625, + "y": 554.6968750000001, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 46.875, + "height": 19.2, + "seed": 1464459021, + "groupIds": [ + "VKry84j3vgFdUIVvIcZot" + ], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1700758679592, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 3, + "text": "conda", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "wBcYIwBjFolSi4vZE0mDW", + "originalText": "conda", + "lineHeight": 1.2, + "baseline": 15 + }, + { + "type": "rectangle", + "version": 665, + "versionNonce": 385199949, + "isDeleted": false, + "id": "uL7UDVECJInJJUMUqODvN", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 342.443359375, + "y": 584.2242187500001, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 129.57031250000003, + "height": 29.2, + "seed": 686579213, + "groupIds": [ + "VKry84j3vgFdUIVvIcZot" + ], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "Q1r1idMiMOx9hFfsS5wvt" + } + ], + "updated": 1700758679592, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 776, + "versionNonce": 1073313795, + "isDeleted": false, + "id": "Q1r1idMiMOx9hFfsS5wvt", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 355.666015625, + "y": 589.2242187500001, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 103.125, + "height": 19.2, + "seed": 1897534787, + "groupIds": [ + "VKry84j3vgFdUIVvIcZot" + ], + "frameId": null, + "roundness": null, + "boundElements": null, + "updated": 1700758679592, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 3, + "text": "conda-build", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "uL7UDVECJInJJUMUqODvN", + "originalText": "conda-build", + "lineHeight": 1.2, + "baseline": 15 + } + ], + "appState": { + "gridSize": null, + "viewBackgroundColor": "#ffffff" + }, + "files": {} +} \ No newline at end of file diff --git a/source/images/bioconda-containers.png b/source/images/bioconda-containers.png new file mode 100644 index 0000000000000000000000000000000000000000..ff3e569ae179d2e303ebb527e555ee9a8d36b2a1 GIT binary patch literal 47033 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 C+eT>s literal 0 HcmV?d00001 diff --git a/source/images/bioconda-containers.svg b/source/images/bioconda-containers.svg new file mode 100644 index 0000000..66108b6 --- /dev/null +++ b/source/images/bioconda-containers.svg @@ -0,0 +1,21 @@ + + + + + + + + bioconda-utilsmulled-buildinvolucrorecipes/pkgname/conda-bld/pkgname.tar.bz2base container/usr/localconda containerenv/condaDockerHostbuild containerbioconda-utilscondaconda-build \ No newline at end of file