{"id":13401070,"url":"https://github.com/chrisguest75/docker_examples","last_synced_at":"2025-03-14T06:32:13.178Z","repository":{"id":37242731,"uuid":"202793124","full_name":"chrisguest75/docker_examples","owner":"chrisguest75","description":"Tests, tricks, tips and examples of Docker builds.  ","archived":false,"fork":false,"pushed_at":"2024-10-29T09:42:04.000Z","size":3705,"stargazers_count":8,"open_issues_count":28,"forks_count":3,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-10-29T11:47:58.192Z","etag":null,"topics":["docker"],"latest_commit_sha":null,"homepage":"","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/chrisguest75.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-08-16T20:11:35.000Z","updated_at":"2024-10-29T09:42:08.000Z","dependencies_parsed_at":"2023-10-16T03:59:20.568Z","dependency_job_id":"8d636043-621b-4e3c-8fd2-3a000f53517f","html_url":"https://github.com/chrisguest75/docker_examples","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chrisguest75%2Fdocker_examples","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chrisguest75%2Fdocker_examples/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chrisguest75%2Fdocker_examples/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chrisguest75%2Fdocker_examples/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/chrisguest75","download_url":"https://codeload.github.com/chrisguest75/docker_examples/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243538060,"owners_count":20307100,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docker"],"created_at":"2024-07-30T19:00:58.379Z","updated_at":"2025-03-14T06:32:13.162Z","avatar_url":"https://github.com/chrisguest75.png","language":"HTML","funding_links":[],"categories":["HTML"],"sub_categories":[],"readme":"# Docker Examples and Demos\n\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-%23FE5196?logo=conventionalcommits\u0026logoColor=white)](https://conventionalcommits.org) [![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit)](https://github.com/pre-commit/pre-commit)  \n\n[![Repository](https://skillicons.dev/icons?i=docker,nginx,bash,linux,html)](https://skillicons.dev)  \n\nA repository for showing examples of different Docker related concepts and tools. Work through examples to demonstrate and prove concepts that exist.  \n\nThe aim is to use examples to show how Docker behaves when building containers and to highlight incorrect assumptions about behaviour.  \n\nA list of things still to try and investigate [TODO.md](./TODO.md)  \n\n## Conventional Commits\n\nNOTE: This repo has switched to [conventional commits](https://www.conventionalcommits.org/en/v1.0.0). It requires `pre-commit` and `commitizen` to help with controlling this.  \n\n```sh\n# install pre-commmit (prerequisite for commitizen)\nbrew install pre-commit\nbrew install commitizen\n# conventional commits extension\ncode --install-extension vivaxy.vscode-conventional-commits\n\n# install hooks\npre-commit install --hook-type commit-msg --hook-type pre-push\n```\n\n## Checking changes in Docker\n\nDocker is a fast moving project. If you want to keep check on the changes being made here are a few helpful links.  \n\n* Check latest releases and commits into moby/buildkit repo [releases](https://github.com/moby/buildkit/releases)  \n* Check latest releases and commits into docker/compose repo [repo](https://github.com/docker/compose)  \n* Check latest releases and commits into containerd/containerd [repo](https://github.com/containerd/containerd)  \n* The compose speciifcation [compose-spec/compose-spec](https://github.com/compose-spec/compose-spec)\n* The OCI image specification [opencontainers/image-spec](https://github.com/opencontainers/image-spec/tree/main)\n* The OCI runtime specification [opencontainers/runtime-spec](https://github.com/opencontainers/runtime-spec/blob/main/spec.md)\n* The OCI distribution specification [opencontainers/distribution-spec](https://github.com/opencontainers/distribution-spec/blob/main/spec.md)\n* The OCI blog [here](https://opencontainers.org/posts/blog/)  \n* Check the docker blog [here](https://www.docker.com/blog/)  \n\n## Docker Desktop Architecture\n\nThis diagram represents the following components and relationships:\n\n* Docker Desktop: The main application that users interact with on their local machine.  \n* Docker Engine: The core component responsible for managing containers and images.  \n* Docker CLI: The command-line interface used to interact with Docker Engine.  \n* BuildKit: The toolkit used for building and packaging software in containers.  \n* Frontends: Components responsible for parsing build instructions and generating the build graph.  \n* OCI Images: The format used for packaging software in containers.  \n* Container Runtime: The runtime responsible for executing containers.  \n* Local Image Cache: A storage location for container images on the local machine.  \n* Remote Image Registry: A storage location for container images on remote servers.  \n\n```mermaid\ngraph LR\n    A[Docker Desktop]\n    B[Docker Engine]\n    C[Docker CLI]\n    D[BuildKit]\n    E[Frontends]\n    F[OCI Images]\n    G[Container Runtime]\n    H[Local Image Cache]\n    I[Remote Image Registry]\n\n    A --\u003e B\n    A --\u003e C\n    B --\u003e G\n    B --\u003e H\n    B --\u003e D\n    C --\u003e|build command| D\n    D --\u003e E\n    E --\u003e|Dockerfile.v0| D\n    D --\u003e|create images| F\n    F --\u003e H\n    H --\u003e G\n    H --\u003e I\n```\n\nIn the diagram, the Docker CLI sends a build command to BuildKit, which uses Frontends to parse the build instructions. BuildKit then creates OCI images, which are stored in the Local Image Cache. The Container Runtime can then execute these images as containers. The Local Image Cache can also interact with Remote Image Registries to fetch or push images.  \n\n### Container Runtime\n\nThe container runtime is a crucial component in the container ecosystem, responsible for managing the life cycle of containers. Its primary responsibilities include:  \n\n* Image Pulling: The container runtime fetches container images from local storage or remote image registries, such as Docker Hub or Google Container Registry. This ensures that the required image is available on the local system before container execution.  \n\n* Image Unpacking: The container runtime unpacks the container image, which consists of layered file systems, into a coherent file system that can be used by the container during execution.  \n\n* Container Creation: The container runtime creates containers by instantiating the appropriate resources, such as namespaces, cgroups, and file system mounts. It also sets up the necessary isolation and resource constraints to ensure that containers run in a secure and controlled environment.  \n\n* Container Execution: The container runtime starts the container's main process and ensures that it runs in the specified environment, with the appropriate configurations and resource limitations.  \n\n* Container Monitoring: The container runtime monitors the running containers for their health and status, allowing operators to track the performance and resource usage of their containers.  \n\n* Container Stop/Start/Restart: The container runtime manages container life cycle operations such as stopping, starting, and restarting containers as needed or upon user request.  \n\n* Container Deletion: The container runtime removes containers when they are no longer needed, cleaning up any associated resources and storage.  \n\n* Container Logging: The container runtime captures and manages the logs generated by containers, making them accessible to operators for debugging and monitoring purposes.  \n\n* Networking: The container runtime sets up and manages the network interfaces, connectivity, and isolation between containers and the host system, as well as between containers themselves.  \n\n* Security: The container runtime is responsible for implementing security features such as user namespace isolation, seccomp, AppArmor, or SELinux profiles, ensuring that containers run in a secure environment.  \n\nPopular container runtimes include Docker's containerd, Google's gVisor, and Red Hat's CRI-O. These runtimes often implement the Container Runtime Interface (CRI) to work with Kubernetes, allowing seamless container management within Kubernetes clusters.  \n\n## Contents\n\n- [Docker Examples and Demos](#docker-examples-and-demos)\n  - [Conventional Commits](#conventional-commits)\n  - [Checking changes in Docker](#checking-changes-in-docker)\n  - [Docker Desktop Architecture](#docker-desktop-architecture)\n    - [Container Runtime](#container-runtime)\n  - [Contents](#contents)\n  - [00 - Cheatsheet](#00---cheatsheet)\n  - [00 - Troubleshooting](#00---troubleshooting)\n  - [01 - Layers, Hiding and Squashing](#01---layers-hiding-and-squashing)\n  - [01b - Mv, Rm, Sh Scratch](#01b---mv-rm-sh-scratch)\n  - [02 - Host and Kernel details](#02---host-and-kernel-details)\n  - [03 - Buildargs](#03---buildargs)\n  - [04 - Docker Context](#04---docker-context)\n  - [05 - Root user](#05---root-user)\n  - [06 - Multistage small image size](#06---multistage-small-image-size)\n  - [07 - Buildkit](#07---buildkit)\n  - [08 - Layer caching with arguments](#08---layer-caching-with-arguments)\n  - [09 - Kaniko](#09---kaniko)\n  - [10 - Distro Versions](#10---distro-versions)\n  - [11 - Parameters and piping passthrough](#11---parameters-and-piping-passthrough)\n  - [12 - Background processes](#12---background-processes)\n  - [13 - Users and permissions](#13---users-and-permissions)\n  - [14 - CPU - control](#14---cpu---control)\n  - [14 - OOM - Out of memory](#14---oom---out-of-memory)\n  - [15 - ENTRYPOINT and CMD](#15---entrypoint-and-cmd)\n  - [16 - Layer caching with non-deterministic executions](#16---layer-caching-with-non-deterministic-executions)\n  - [17 - Microscanner](#17---microscanner)\n  - [18 - Hadolint](#18---hadolint)\n  - [19 - Locking versions with APT](#19---locking-versions-with-apt)\n  - [20 - Building a rootfs image](#20---building-a-rootfs-image)\n  - [21 - Nice prompts](#21---nice-prompts)\n  - [22 - Example of using dockle](#22---example-of-using-dockle)\n  - [23 - Building bash5 for Unbuntu 16.04](#23---building-bash5-for-unbuntu-1604)\n  - [24 - Reverse shells](#24---reverse-shells)\n  - [25 - Apparmor](#25---apparmor)\n  - [26 - Sidecar debugging](#26---sidecar-debugging)\n  - [27 - Readonly containers](#27---readonly-containers)\n  - [28 - Distroless](#28---distroless)\n  - [29 - Workflow feature flags](#29---workflow-feature-flags)\n  - [30 - Dive CI Tool](#30---dive-ci-tool)\n  - [31 - Structure Tests](#31---structure-tests)\n  - [32 - File extraction](#32---file-extraction)\n  - [33 - Label metadata](#33---label-metadata)\n  - [34 - Build volume from S3](#34---build-volume-from-s3)\n  - [34 - Simple volumes](#34---simple-volumes)\n  - [34 - Volume images](#34---volume-images)\n  - [35 - Layer Poisoning](#35---layer-poisoning)\n  - [36 - Layers Speed Tests](#36---layers-speed-tests)\n  - [37 - Registry Proxy](#37---registry-proxy)\n  - [38 - Alpine APK](#38---alpine-apk)\n  - [39 - SSH](#39---ssh)\n  - [40 - SSL nginx](#40---ssl-nginx)\n  - [41 - DevContainers](#41---devcontainers)\n  - [41 - NodeJS DevContainers](#41---nodejs-devcontainers)\n  - [42 - Docker systemd service](#42---docker-systemd-service)\n  - [43 - Buildpacks](#43---buildpacks)\n  - [44 - Reverse Proxy](#44---reverse-proxy)\n  - [45 - Docker Scan](#45---docker-scan)\n  - [46 - Docker in Docker (DinD)](#46---docker-in-docker-dind)\n  - [48 - trivy](#48---trivy)\n  - [49 - grype](#49---grype)\n  - [51 - Signals](#51---signals)\n  - [52 - docker-slim](#52---docker-slim)\n  - [53 - seccomp and apparmor](#53---seccomp-and-apparmor)\n  - [54 - semgrep](#54---semgrep)\n  - [55 - multiarch](#55---multiarch)\n  - [57 - ssh builds using ssh-agent](#57---ssh-builds-using-ssh-agent)\n  - [56 - pyenv versions](#56---pyenv-versions)\n  - [57 - Using SSH during build](#57---using-ssh-during-build)\n  - [58 - Secrets API key](#58---secrets-api-key)\n  - [59 - Compose V2 examples](#59---compose-v2-examples)\n  - [60 - heredocs](#60---heredocs)\n  - [61 - Using tmpfs](#61---using-tmpfs)\n  - [63 - Build matrix using build args](#63---build-matrix-using-build-args)\n  - [64 - SBOM](#64---sbom)\n  - [68 - Composing Services](#68---composing-services)\n  - [69 - Skopeo Inspecting Registries](#69---skopeo-inspecting-registries)\n  - [70 - Scaling Compose](#70---scaling-compose)\n  - [71 - cosign](#71---cosign)\n  - [72 - Building images manually](#72---building-images-manually)\n  - [73 - buildah](#73---buildah)\n  - [74 - onbuild](#74---onbuild)\n  - [75 - skaffold](#75---skaffold)\n  - [76 - Building CPP tools in containers](#76---building-cpp-tools-in-containers)\n  - [77 - healthchecks](#77---healthchecks)\n  - [78 - multiple contexts](#78---multiple-contexts)\n  - [79 - bake](#79---bake)\n  - [80 - crane](#80---crane)\n  - [81 - oras](#81---oras)\n  - [84 - cache-from](#84---cache-from)\n  - [85 - tini](#85---tini)\n  - [86 - WASM/WASI](#86---wasmwasi)\n  - [87 - Lazy Pulling](#87---lazy-pulling)\n  - [89 - Managing Diskspace](#89---managing-diskspace)\n  - [90 - Contexts and Builders](#90---contexts-and-builders)\n  - [91 - Buildkit Frontends](#91---buildkit-frontends)\n  - [93 - Metadata](#93---metadata)\n  - [98 - API Direct](#98---api-direct)\n\n## 00 - Cheatsheet\n\nCheatsheet style helpers for common tasks.  \nSteps [README.md](./00_cheatsheet/README.md)  \n\n## 00 - Troubleshooting\n\nBasic troubleshooting tips for installation and fixing issues.  \nSteps [README.md](./00_troubleshooting/README.md)  \n\n## 01 - Layers, Hiding and Squashing\n\nDemonstrates how layers are stored, files are hidden and can be squashed.  \nSteps [README.md](./01_layers_hiding/README.md)  \n\n## 01b - Mv, Rm, Sh Scratch\n\nBuilding a simple container with mv, rm, sh.  \nSteps [README.md](./01b_mv_cp_rm_scratch/README.md)  \n\n## 02 - Host and Kernel details\n\nDemonstrates how kernel versions are different for build and execution.  \nSteps [README.md](./02_host_and_kernel/README.md)  \n\n## 03 - Buildargs\n\nDemonstrate how buildargs are stored in the image.  Meaning anyone with access to the image will have access to the credentials.  With an example of new buildkit build time volume mounts to workaround this.  \nSteps [README.md](./03_buildargs_storage/README.md)  \n\n## 04 - Docker Context\n\nDemonstrate how to work with Docker context.  \nSteps [README.md](./04_docker_context/README.md)  \n\n## 05 - Root user\n\nDemonstrate root user and privilege inside the container.  \nSteps [README.md](./05_root_user/README.md)  \n\n## 06 - Multistage small image size\n\nDemonstrate multistage build small image size  \nSteps [README.md](./06_multistage/README.md)  \n\n## 07 - Buildkit\n\nDemonstrate buildkit parallel building  \nSteps [README.md](./07_buildkit_parallelbuilds/README.md)  \n\n## 08 - Layer caching with arguments\n\nDemonstrate layer caching and how different build arguments values will not be cached until built.  \nSteps [README.md](./08_caching_arguments/README.md)  \n\n## 09 - Kaniko\n\nDemonstrate using Kaniko to build a Docker image  \nSteps [README.md](./09_kaniko/README.md)  \n\n## 10 - Distro Versions\n\nDemonstrate different ways to find distro versions inside a container  \nSteps [README.md](./10_distro_versions/README.md)  \n\n## 11 - Parameters and piping passthrough\n\nDemonstrate passing parameters and piping into docker run.  \nSteps [README.md](./11_cmdline_passthrough/README.md)  \n\n## 12 - Background processes\n\nDemonstrate creating background processes  \nSteps [README.md](./12_background_processes/README.md)  \n\n## 13 - Users and permissions\n\nUsers and permissions  \nSteps [README.md](./13_users_and_permissions/README.md)  \n\n## 14 - CPU - control\n\nDemonstrate using the cpu limitations on containers.  \nSteps [README.md](./14_cpu_control/README.md)  \n\n## 14 - OOM - Out of memory\n\nDemonstrate how Docker deals with an out-of-memory issue  \nSteps [README.md](./14_out_of_memory/README.md)  \n\n## 15 - ENTRYPOINT and CMD\n\nDemonstrate how ENTRYPOINT and CMD differ  \nSteps [README.md](./15_entrypoint_cmd_run/README.md)  \n\n## 16 - Layer caching with non-deterministic executions\n\nDemonstrate how layer caching works with non-determinstic commands.  \nSteps [README.md](./16_cache_fails/README.md)  \n\n## 17 - Microscanner\n\nDemonstrate how to use Microscanner to detect vulnerabilities.  \nSteps [README.md](./17_microscanner/README.md)  \n\n## 18 - Hadolint\n\nDemonstrate hadolint  \nSteps [README.md](./18_hadolint/README.md)  \n\n## 19 - Locking versions with APT\n\nDemonstrate an apt locking technique  \nSteps [README.md](./19_apt_locking/README.md)  \n\n## 20 - Building a rootfs image\n\nDemonstrates building a root image  \nSteps [README.md](./20_build_root/README.md)  \n\n## 21 - Nice prompts\n\nDemonstrates configuring a nice prompt for `bash` and `zsh` inside a container  \nSteps [README.md](./21_nice_prompts/README.md)  \n\n## 22 - Example of using dockle\n\nDemonstrates using dockle to find issues with images.  \nSteps [README.md](./22_dockle/README.md)  \n\n## 23 - Building bash5 for Unbuntu 16.04\n\nDemonstrates building bash 5 on an ubuntu image.  \nSteps [README.md](./23_bash5_ubuntu/README.md)  \n\n## 24 - Reverse shells\n\nDemonstrates getting access into a container  \nSteps [README.md](./24_reverse_shell/README.md)  \n\n## 25 - Apparmor\n\nDemonstrates using Apparmor to restrict processes in a container.  \nSteps [README.md](./25_apparmor/README.md)  \n\n## 26 - Sidecar debugging\n\nDemonstrates sidecar techniques for debugging  \nSteps [README.md](./26_sidecar_debugging/README.md)  \n\n## 27 - Readonly containers\n\nDemonstrates a readonly container  \nSteps [README.md](./27_readonly_containers/README.md)  \n\n## 28 - Distroless\n\nDemonstrates a distroless container build  \nSteps [README.md](./28_distroless/README.md)  \n\n## 29 - Workflow feature flags\n\nA technique to use in CI systems where it is not possible to parameterise the workflow/pipeline.  \nSteps [README.md](./29_workflow_feature_flags/README.md)  \n\n## 30 - Dive CI Tool\n\nDemonstrates using dive tool to analyse images.  \nSteps [README.md](./30_dive_ci/README.md)  \n\n## 31 - Structure Tests\n\nDemonstrates how to use container structure testing.  \nSteps [README.md](./31_structure_tests/README.md)  \n\n## 32 - File extraction\n\nDemonstrates copying data out of container images.  \nSteps [README.md](./32_file_extraction/README.md)  \n\n## 33 - Label metadata\n\nDemonstrates adding label metadata to builds that helps us trace pipelines and build sources.  \nSteps [README.md](./33_label_metadata/README.md)  \n\n## 34 - Build volume from S3\n\nDemonstrate how to build a data volume for use by other containers.  \nSteps [README.md](./34_build_volume_from_s3/README.md)  \n\n## 34 - Simple volumes\n\nDemonstrates using simple volumes.  \nSteps [README.md](./34_simple_volumes/README.md)  \n\n## 34 - Volume images\n\nDemonstrates how to configure an image that can be mounted as a volume into a container.  \nSteps [README.md](./34_volume_images/README.md)  \n\n## 35 - Layer Poisoning\n\nDemonstrate how to inject file into multiple running containers from host.  \nSteps [README.md](./35_layer_poisoning/README.md)  \n\n## 36 - Layers Speed Tests\n\nDemonstrates timing differences with layers building and running  \nSteps [README.md](./36_layers_speed/README.md)  \n\n## 37 - Registry Proxy\n\nDemonstrate how to run a pull through registry proxy.  \nSteps [README.md](./37_registry_proxy/README.md)  \n\n## 38 - Alpine APK\n\nDemonstrate how to install a custom package in Alpine.  \nSteps [README.md](./38_alpine_apk/README.md)  \n\n## 39 - SSH\n\nDemonstrate how to use `ssh` inside a docker container  \nSteps [README.md](./39_ssh/README.md)  \n\n## 40 - SSL nginx\n\nCreate a self-signed ssl nginx endpoint for a container.  \nSteps [README.md](./40_ssl_nginx/README.md)  \n\n## 41 - DevContainers\n\nUse remote-containers vscode extension  \nSteps [README.md](./41_remote_containers/README.md)  \n\n## 41 - NodeJS DevContainers\n\nUse remote-containers vscode extension to create a nodejs and mongodb container  \nSteps [README.md](./41_nodejs_remote_devcontainer/README.md)  \n\n## 42 - Docker systemd service\n\nDemonstrate how to use docker containers as systemd.  \nSteps [README.md](./42_docker_systemd_service/README.md)  \n\n## 43 - Buildpacks\n\nDemonstrate how to use a build pack to build a simple Python container  \nSteps [README.md](./43_buildpacks/README.md)  \n\n## 44 - Reverse Proxy\n\nDemonstrate a simple reverse proxy to manage build deployments  \nSteps [README.md](./44_reverse_proxy/README.md)  \n\n## 45 - Docker Scan\n\nDemonstrate some examples of using `docker scan`.  \nSteps [README.md](./45_docker_scan/README.md)  \n\n## 46 - Docker in Docker (DinD)\n\nDemonstrate how to use Docker in Docker  \nSteps [README.md](./46_dind/README.md)  \n\n## 48 - trivy\n\nDemonstrate some examples of using `trivy`.  \nSteps [README.md](./48_trivy/README.md)  \n\n## 49 - grype\n\nDemonstrate some examples of using `grype`.  \nSteps [README.md](./49_grype/README.md)  \n\n## 51 - Signals\n\nDemonstrate how signals work in containers  \nSteps [README.md](./51_signals/README.md)  \n\n## 52 - docker-slim\n\nDemonstrate dockerslim and how to use it to reduce container sizes.  \nSteps [README.md](./52_dockerslim/README.md)  \n\n## 53 - seccomp and apparmor\n\nDemonstrate seccomp and apparmor and how to use them.  \nSteps [README.md](./53_seccomp_and_apparmor/README.md)  \n\n## 54 - semgrep\n\nDemonstrate semgrep on dockerfile and other standard container resources  \nSteps [README.md](./54_semgrep/README.md)  \n\n## 55 - multiarch\n\nDemonstrate building and running multi-arch images  \nSteps [README.md](./55_multiarch/README.md)  \n\n## 57 - ssh builds using ssh-agent\n\nDemonstrate how to use an ssh mount during build.  \nSteps [README.md](./57_ssh_build_with_sshagent/README.md)  \n\n## 56 - pyenv versions\n\nDemonstrate how to get `pyenv` installing a particular version in a container  \nSteps [README.md](./56_pyenv_versions/README.md)  \n\n## 57 - Using SSH during build\n\nDemonstrate how to use an ssh mount during build.  \nSteps [README.md](./57_ssh_build_with_sshagent/README.md)  \n\n## 58 - Secrets API key\n\nDemonstrate how to use a secrets mount during build (requires buildkit).  \nSteps [README.md](./58_secrets_apikey/README.md)  \n\n## 59 - Compose V2 examples\n\nDemonstrate how to use docker compose v2.  \nSteps [README.md](./59_composev2/README.md)  \n\n## 60 - heredocs\n\nDemonstrate how to use HEREDOC in a Dockerfile.  \nSteps [README.md](./60_heredocs/README.md)  \n\n## 61 - Using tmpfs\n\nDemonstrate how to use `tmpfs` with Docker.  \nSteps [README.md](./61_tmpfs/README.md)  \n\n## 63 - Build matrix using build args\n\nDemonstrate creating a build matrix from a single container.  \nSteps [README.md](./63_build_matrix/README.md)  \n\n## 64 - SBOM\n\nDemonstrates SBOM generation for docker images.  \nSteps [README.md](./64_sbom/README.md)  \n\n## 68 - Composing Services\n\nDemonstrate how to use docker compose to compose multiple services  \nSteps [README.md](./68_composing_services/README.md)  \n\n## 69 - Skopeo Inspecting Registries\n\nDemonstrate using `Skopeo` to interrogate registries.  \nSteps [README.md](./69_skopeo/README.md)  \n\n## 70 - Scaling Compose\n\nDemonstrate how to use docker compose scale.  \nSteps [README.md](./70_scaling_compose/README.md)  \n\n## 71 - cosign\n\nDemonstrate `cosign` for signing OCI images.  \nSteps [README.md](./71_cosign/README.md)  \n\n## 72 - Building images manually  \n\nDemonstrates how to build images manually.  \nSteps [README.md](./72_build_image_manually/README.md)  \n\n## 73 - buildah\n\nDemonstrate how to use buildah (linux only).  \nSteps [README.md](./73_buildah/README.md)  \n\n## 74 - onbuild\n\nDemonstrate using `ONBUILD` to control build steps.  \nSteps [README.md](./74_onbuild/README.md)  \n\n## 75 - skaffold\n\nDemonstrate how to use `skaffold` for local development.  \nSteps [README.md](./75_skaffold/README.md)  \n\n## 76 - Building CPP tools in containers  \n\nBuilding example CPP package (SOX) inside a docker container.  \nSteps [README.md](./76_building_cpp_package/README.md)  \n\n## 77 - healthchecks\n\nDemonstrate how to use `docker compose` healthchecks.  \nSteps [README.md](./77_healthchecks/README.md)  \n\n## 78 - multiple contexts\n\nDemonstrate how to use `docker buildx` with multiple contexts.  \nSteps [README.md](./78_multi_context/README.md)  \n\n## 79 - bake\n\nDemonstrate how to use `bake` to build multiple images.  \nSteps [README.md](./79_bake/README.md)  \n\n## 80 - crane\n\nDemonstrate how to use `crane`  \nSteps [README.md](./80_crane/README.md)  \n\n## 81 - oras\n\nDemonstrate how to use OCI Registry-as-Storage (ORAS)  \nSteps [README.md](./81_oras/README.md)  \n\n## 84 - cache-from\n\nDemonstrate how to use `--cache-from` to speed up builds.  \nSteps [README.md](./84_cache_from/README.md)  \n\n## 85 - tini\n\nDemonstrate `tini` init-system in Docker to handle SIGTERM and SIGHALT correctly.  \nSteps [README.md](./85_tini/README.md)  \n\n## 86 - WASM/WASI\n\nDemonstrate how to setup a WASI based container.  \nSteps [README.md](./86_wasi/README.md)  \n\n## 87 - Lazy Pulling\n\nDemonstrate how to control buildkit to build images ordered for lazy pulls.  \nSteps [README.md](./87_lazy_pulling/README.md)  \n\n## 89 - Managing Diskspace\n\nGive some examples and advice on how to manage disk space with docker.  \nSteps [README.md](./89_managing_diskspace/README.md)  \n\n## 90 - Contexts and Builders\n\nDemonstrate how to use docker builders.  \nSteps [README.md](./90_contexts_and_builders/README.md)  \n\n## 91 - Buildkit Frontends\n\nDemonstrate how to use `docker frontends`.  \nSteps [README.md](./91_buildkit_frontends/README.md)  \n\n## 93 - Metadata\n\nDemonstrate how the metadata output file works.  \nSteps [README.md](./93_metadata/README.md)  \n\n## 98 - API Direct\n\nDemonstrate how to invoke the API directly.  \nSteps [README.md](./98_api_direct/README.md)  \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchrisguest75%2Fdocker_examples","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fchrisguest75%2Fdocker_examples","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchrisguest75%2Fdocker_examples/lists"}