Technical Documentation

Technical Guide: Docker Engine & Docker Compose On Debian 12 (Bookworm)

Technical guide covering **technical guide: docker engine & docker compose on debian 12 (bookworm)**

👤
Author
Cosmic Lounge AI Team
📅
Updated
6/1/2025
⏱️
Read Time
20 min
Topics
#ai #docker #server #setup #installation #configuration #code #debian #design

📖 Reading Mode

📖 Table of Contents

🌌 Technical Guide: Docker Engine & Docker Compose on Debian 12 (bookworm)

This document serves as a comprehensive technical reference for the installation, configuration, and utilization of Docker Engine and Docker Compose on the Debian 12 (bookworm) operating system. It is designed for developers, system administrators, and other technical professionals who require practical, command-oriented guidance for managing containerized applications.



🌟 Installation and Setup on Debian 12 (as of April 2025)

Before proceeding with the installation of Docker Engine and Docker Compose, it is crucial to remove any existing Docker packages that might conflict with the new installation. This ensures a clean and stable environment for the current versions. To install the latest stable versions of Docker Engine and Docker Compose, it is recommended to set up the official Docker apt repository. This process involves several steps to ensure the integrity and authenticity of the packages. With the GPG key added, the next step is to set up the Docker apt repository definition. This is achieved by adding a line to the system’s APT sources list. The command echo “deb [arch=$(dpkg —print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian $(.

To install Docker Engine, the command-line interface (CLI), the container runtime (containerd.io), the Docker Buildx plugin, and the Docker Compose plugin, execute the following command: sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin.1 This streamlined command installs all the necessary components for running and managing Docker containers and multi-container applications. It is also possible to install a specific version of Docker Engine if required. After the installation is complete, several post-installation steps are recommended. To allow the current user to run Docker commands without needing sudo each time, add the user to the docker group using the command sudo usermod -aG docker $USER.6 For these changes to take effect, it is necessary to either log out and log back in to the system or to apply the changes to the current session using the command newgrp docker.6 In some instances, particularly after previously using sudo with Docker commands, permission issues might arise with the ~/.docker/ directory. To verify that Docker Engine has been installed correctly, the hello-world image can be run using the command sudo docker run hello-world.1 This command downloads a test image from Docker Hub and runs it in a container. If the installation is successful, a confirmation message will be printed in the terminal.1 Additionally, the installed versions of the Docker client and server can be checked using the command docker version.1 This output confirms that the Docker command-line interface is correctly installed and can communicate with the Docker daemon.



🌟 Core Docker Engine Usage (CLI Examples)

Docker Engine provides a powerful set of command-line tools for managing images and containers. To download an image from a registry like Docker Hub, the docker pull command is used. The syntax is docker pull [IMAGE]:, where [IMAGE] is the name of the image and “ is a specific version. For example, to pull version 7 of the Redis image, the command is docker pull redis:7. To list the images that are currently stored locally on the system, the docker images command or its alias docker image ls is used.13 This command displays information such as the repository name, tag, image ID, creation date, and size of each image.13 Several options can be used with docker images to filter or format the output. The -a or —all option shows all images, including intermediate layers used during builds. The -q or —quiet option displays only the image IDs.

OptionDescription
-a, —allShow all images, including intermediate layers.
-q, —quietOnly display image IDs.
—filterFilter images based on criteria (e.g., dangling=true, before=).
—formatFormat output using Go templates.
—no-truncDo not truncate the output.
—digestsShow image digests.

To remove one or more local images, the docker rmi command or its alias docker image rm is used, followed by the image ID or name.13 For example, docker rmi <image_id> removes the image with the specified ID. Multiple images can be removed by listing their IDs or names separated by spaces. The -f or —force option can be used to forcefully remove an image even if it is currently in use by stopped containers.17 It is important to note that using the —force option should be done with caution as it might lead to unexpected issues if the image is still referenced. Containers are instances of Docker images. To create and start a container, the docker run command is used with the syntax docker run[IMAGE].20 The “ allow for various configurations, and [IMAGE] specifies the image to be used as the blueprint for the container.21 Some commonly used options include -d to run the container in detached mode (in the background), -it to allocate an interactive terminal, and -p HOST_PORT:CONTAINER_PORT to map a port on the host to a port inside the container.20 Volumes can be mounted using the -v option, either by specifying a host path and a container path for bind mounts (-v HOST_PATH:CONTAINER_PATH) or by using a named volume (-v VOLUME_NAME:CONTAINER_PATH).20 Containers can be given a specific name using the —name option, and the —rm option can be used to automatically remove the container once it exits.20 Environment variables can be set inside the container using the -e KEY=VALUE option.20 An example combining several options is: docker run -d —name myapp -p 8080:80 -v myapp_data:/data -e MODE=production myapp_image:1.2. To view a list of running containers, the docker ps command is used.16 By default, it only shows containers that are currently running. To see all containers, including those that have stopped, the -a or —all option can be used. The -q or —quiet option displays only the container IDs. The —format option allows for customizing the output using Go templates.16

OptionDescription
-a, —allShow all containers (running and stopped).
-q, —quietOnly display container IDs.
—filterFilter containers based on criteria (e.g., status=exited, name=).
—formatFormat output using Go templates (e.g., to show specific fields).
-n, —lastShow the n most recently created containers.
-s, —sizeDisplay the total file size of each container.

To stop one or more running containers, the docker stop command is used, followed by the container name or ID.26 This command sends a SIGTERM signal to the container, allowing it to shut down gracefully. The -t or —time option can be used to specify a timeout period before Docker forcefully stops the container with a SIGKILL signal.28 To start one or more stopped containers, the docker start command or its alias docker container start is used, followed by the container name or ID.21 The -a or —attach option can be used to attach to the container’s standard output and error streams.21 The docker restart command restarts a container by first stopping it and then starting it again.30 The —signal option allows sending a specific signal during the stop phase, and restart policies can be defined using the —restart option with docker run.30 To remove one or more stopped containers, the docker rm command or its alias docker container rm is used, followed by the container name or ID.32 The -f or —force option can be used to forcefully remove a running container, and the -v option removes any volumes associated with the container.32

To view the logs of a container, the docker logs command or its alias docker container logs is used, followed by the container name or ID.35 The -f or —follow option streams the logs in real-time, similar to tail -f. The —tail option displays the last n lines of the logs, and the -t or —timestamps option adds timestamps to each log entry.35 To execute a command inside a running container, the docker exec -it command or its alias docker container exec is used, followed by the container name or ID and the command to be executed.39 The -it options provide an interactive terminal within the container. Other useful options include -d for detached mode, -u to specify a user, -e to set environment variables, and -w to set the working directory.39 To view detailed, low-level information about a container or image, the docker inspect command is used, followed by the container or image name or ID.42 This command outputs a JSON-formatted response containing various configuration details. Docker volumes are used to persist data beyond the lifecycle of a container. To create a named volume, the docker volume create command is used, followed by the desired volume name.45 Driver-specific options can be provided using the -d or —driver and -o or —opt options.45 To list the existing volumes on the system, the docker volume ls command or its alias docker volume list is used.46 The output can be filtered using the —filter option, for example, to show only volumes that are not currently in use (dangling=true).46 To view detailed information about a specific volume, the docker volume inspect command is used, followed by the volume name.46 The output can be formatted using the -f or —format option.46 To remove one or more volumes, the docker volume rm command or its alias docker volume remove is used, followed by the volume name(s).46 The -f or —force option can be used to force removal, but this should be done with caution as volumes in use cannot be removed.52

Docker provides networking capabilities to allow containers to communicate with each other and the outside world. By default, containers are connected to a bridge network.



🌟 Dockerfile Basics & Example

A Dockerfile is a text document that contains all the commands a user could call on the command line to assemble an image.68 It specifies the base image, instructions to install software, copy files, set environment variables, and define the command to run when a container is started. A basic Dockerfile for a Python application might look like this:

Dockerfile

🌌 Use an official Python runtime as a parent image

FROM python:3.9-slim-buster

🌌 Set the working directory in the container

WORKDIR /app

🌌 Copy the requirements file into the container at /app

COPY requirements.txt.

🌌 Install Python dependencies

RUN pip install —no-cache-dir -r requirements.txt

🌌 Copy the current directory contents into the container at /app

COPY..

🌌 Make port 80 available to the world outside this container

EXPOSE 80

🌌 Define environment variable

ENV FLASK_APP=app.py

🌌 Run app.py when the container launches

CMD [“python”, “app.py”]

🌌 Specify the user to run the application as

USER nonroot

The FROM instruction specifies the base image to start from.68 WORKDIR sets the working directory for any subsequent instructions.68 COPY transfers files and directories from the host to the container.68 RUN executes commands inside the image, often used for installing software.68 EXPOSE informs Docker about the network port the application listens on.68 CMD defines the default command to be executed when the container starts.68 USER sets the user to run subsequent commands as.68

Multi-stage builds are a powerful feature that helps reduce the final image size by separating the build environment from the runtime environment.68 This involves using multiple FROM instructions in a single Dockerfile. For example, a multi-stage build for a Node.js application could look like this:

Dockerfile

🌌 Stage 1: Build stage

FROM node:18 AS builder WORKDIR /app COPY package*.json. RUN npm install COPY.. RUN npm run build

🌌 Stage 2: Production stage

FROM node:18-slim WORKDIR /app COPY —from=builder /app/dist. EXPOSE 3000 CMD [“node”, “server.js”] USER node

In this example, the first stage (builder) compiles the application, and the second stage copies only the necessary artifacts (/app/dist) into a smaller runtime image (node:18-slim), resulting in a more efficient final image.69

The .dockerignore file specifies files and directories that should be excluded when building a Docker image.69 This helps reduce the image size, speeds up build times, and avoids accidentally including sensitive data or build artifacts. Common exclusions include version control directories like .git, dependency directories like node_modules or __pycache__, and temporary files.71

To build an image from a Dockerfile, the docker build command is used with the syntax docker build PATH | URL.13 The -t or —tag option is used to name and tag the image, and the .

typically refers to the current directory as the build context, where the Dockerfile and other necessary files are located. For example, docker build -t my_web_app:1.0.



🌟 Docker Compose Usage (CLI Examples & YAML)

Docker Compose is a tool for defining and running multi-container Docker applications using a single YAML file named docker-compose.yml.75 This file declaratively defines all the services, networks, and volumes needed for the application stack. The version key at the top of the file specifies the Docker Compose file format version, and for modern Docker releases, it should be set to ‘3.8’ or higher.75

A well-commented example docker-compose.yml for a web application (e.g., Python Flask) connecting to a database (PostgreSQL) using a user-defined network and named volumes might look like this:

YAML

version: ‘3.8’ services: web: build:./web ports:

  • “5000:5000” environment:

  • DATABASE_URL=postgresql://user:password@db:5432/mydb depends_on:

  • db volumes:

  • web_data:/app/data networks:

  • my_app_network db: image: postgres:15 environment: POSTGRES_USER: user POSTGRES_PASSWORD: password POSTGRES_DB: mydb volumes:

  • db_data:/var/lib/postgresql/data networks:

  • my_app_network volumes: web_data: db_data: networks: my_app_network: driver: bridge

In this example, the services section defines two services: web and db. The web service is built from a Dockerfile located in the ./web directory, exposes port 5000, and depends on the db service. It also mounts a named volume web_data and is part of the my_app_network. The db service uses the postgres:15 image, sets environment variables for the database, mounts a named volume db_data for persistent storage, and is also part of the my_app_network.

SectionDescription
versionSpecifies the Docker Compose file format version.
servicesDefines the containers (services) that make up the application.
volumesDefines named volumes for persistent data storage.
networksDefines user-defined networks for inter-container communication.
buildSpecifies the build context and Dockerfile for building an image.
imageSpecifies a pre-built Docker image to use for the service.
portsMaps ports between the host and the container.
environmentSets environment variables within the container.
depends_onDefines service dependencies and startup order.

Docker Compose provides several core CLI commands for managing the application stack defined in the docker-compose.yml file. The docker compose up command builds, (re)creates, starts, and attaches to the containers defined in the file.78 The -d option runs the containers in detached mode, and the —build option forces the rebuilding of images. Specific services can be started by specifying their names at the end of the command. The docker compose down command stops and removes the containers, networks, and volumes that were created by up.80 The -v option removes named volumes as well, and —rmi removes images used by the services. Similarly, specific services can be targeted by name. The docker compose ps command lists the status of the services defined in the docker-compose.yml file, showing their names, commands, state, and ports.78 The docker compose logs command views the logs of the services.38 The -f or —follow option streams the logs, —tail shows the last n lines, and service names can be specified to view logs for particular services. The docker compose exec[COMMAND] command executes a command in a running container of a specific service.85 For an interactive terminal, the -it options are commonly used, for example, docker compose exec web bash. The docker compose build command builds or rebuilds the images for the services defined in the docker-compose.yml file.



🌟 Best Practices (Concise List)

Adhering to best practices ensures that Docker images and containers are efficient, secure, and maintainable. Some key best practices include: using official base images from trusted sources; specifying image versions or tags instead of relying on latest; minimizing the number of image layers by combining related commands in a single RUN instruction and utilizing multi-stage builds; leveraging the .dockerignore file to exclude unnecessary files from the image; running containers as non-root users for enhanced security; preferring named volumes over bind mounts for persistent data where feasible; defining the entire application stack declaratively using Docker Compose; parameterizing configurations using environment variables for flexibility; and ensuring applications log to stdout and stderr for Docker’s log collection mechanisms.20



🌟 System Maintenance & Cleanup (Commands)

Over time, Docker can accumulate unused resources that consume disk space. Docker provides several commands to clean up these resources. The docker system prune command removes stopped containers, unused networks, dangling images (images not associated with a tagged image), and the build cache.92 It is important to note that this command might lead to data loss if volumes are not properly managed. The docker system prune -a command extends this cleanup to include all unused images, not just dangling ones.92 However, this might remove images that are still intended for use by non-running containers. For more targeted cleanup, specific commands can be used. To remove all stopped containers, execute docker rm $(docker ps -aq —filter status=exited).51 Dangling images can be removed using docker rmi $(docker images -qf dangling=true).17 Specific images, containers, or volumes can be removed by their respective IDs or names using docker rmi <image_id>, docker rm <container_id>, and docker volume rm <volume_name>.



🌟 Conclusion

This guide provides a comprehensive overview of installing, configuring, and using Docker Engine and Docker Compose on Debian 12 (bookworm). By following the outlined steps and utilizing the provided commands and examples, users can effectively manage containerized applications on their Debian systems. Adherence to the discussed best practices and regular system maintenance will contribute to a stable, efficient, and secure Docker environment.

🔧 Works cited

1. Debian | Docker Docs, accessed on April 7, 2025, https://docs.docker.com/engine/install/debian/ 2. Uninstalling Docker - Stack Overflow, accessed on April 7, 2025, https://stackoverflow.com/questions/66338203/uninstalling-docker 3. How to Install Docker and Docker Compose on Debian 12 ‘Bookworm’ - xTom, accessed on April 7, 2025, https://xtom.com/blog/how-to-install-docker-and-docker-compose-on-debian-12-bookworm/ 4. Docker installation on Debian 12 - Thomas-Krenn-Wiki-en, accessed on April 7, 2025, https://www.thomas-krenn.com/en/wiki/Docker_installation_on_Debian_12 5. Installing Docker on Debian 12 - Medium, accessed on April 7, 2025, https://medium.com/@kiena/installing-docker-on-debian-12-3e89836639ec 6. Linux post-installation steps for Docker Engine, accessed on April 7, 2025, https://docs.docker.com/engine/install/linux-postinstall/ 7. Can’t add user to docker group - Stack Overflow, accessed on April 7, 2025, https://stackoverflow.com/questions/56305613/cant-add-user-to-docker-group 8. How to Install Docker in Debian 12 Server Using Docker Apt Repository - Web Shanks, accessed on April 7, 2025, https://webshanks.com/how-to-install-docker-in-debian-12-server-using-docker-apt-repository/ 9. How to Install Docker on Debian 12 - Vultr Docs, accessed on April 7, 2025, https://docs.vultr.com/how-to-install-docker-on-debian-12 10. How to Install Docker on Debian 12: All Possible Methods - Greenwebpage.com, accessed on April 7, 2025, https://greenwebpage.com/community/how-to-install-docker-on-debian-12/ 11. Docker Pull - Ducat Tutorials, accessed on April 7, 2025, https://tutorials.ducatindia.com/docker/docker-pull 12. docker image pull, accessed on April 7, 2025, https://docs.docker.com/reference/cli/docker/image/pull/ 13. Docker Image Commands [with Examples & Use Cases] - KnowledgeHut, accessed on April 7, 2025, https://www.knowledgehut.com/blog/devops/docker-images-command 14. docker image - Docker Docs, accessed on April 7, 2025, https://docs.docker.com/reference/cli/docker/image/ 15. List Of Docker Images Command: All You Need To Know - The Knowledge Academy, accessed on April 7, 2025, https://www.theknowledgeacademy.com/blog/docker-images-command/ 16. How to customize Docker ps output - LabEx, accessed on April 7, 2025, https://labex.io/tutorials/docker-how-to-customize-docker-ps-output-418058 17. Docker commands Guide - docker rmi with examples - DevOpsSchool.com, accessed on April 7, 2025, https://www.devopsschool.com/blog/docker-rmi/ 18. docker image rm, accessed on April 7, 2025, https://docs.docker.com/reference/cli/docker/image/rm/ 19. How to remove a Docker image locally and on a Docker registry. - Warp Terminal, accessed on April 7, 2025, https://www.warp.dev/terminus/remove-docker-image 20. Simplifying Containerization With Docker Run Command - BuildPiper, accessed on April 7, 2025, https://www.buildpiper.io/blogs/simplifying-containerization-with-docker-run-command/ 21. How to Start Docker Containers - phoenixNAP, accessed on April 7, 2025, https://phoenixnap.com/kb/docker-start-container 22. Simplifying Containerization with Docker Run Command | by BuildPiper - Medium, accessed on April 7, 2025, https://medium.com/buildpiper/simplifying-containerization-with-docker-run-command-2f74e114f42a 23. Running containers - Docker Docs, accessed on April 7, 2025, https://docs.docker.com/engine/containers/run/ 24. docker run Command: Syntax, Options, Examples - phoenixNAP, accessed on April 7, 2025, https://phoenixnap.com/kb/docker-run-command-with-examples 25. Docker ps: Basic and Advanced Usage Guide - IOFLOOD.com, accessed on April 7, 2025, https://ioflood.com/blog/docker-ps-basic-and-advanced-usage-guide/ 26. How to Stop Running and Unresponsive Docker Containers - Warp Terminal, accessed on April 7, 2025, https://www.warp.dev/terminus/docker-stop-all-containers 27. How to Stop Docker Containers - phoenixNAP, accessed on April 7, 2025, https://phoenixnap.com/kb/stop-docker-containers 28. How to use the docker stop command effectively? | LabEx, accessed on April 7, 2025, https://labex.io/questions/how-to-use-the-docker-stop-command-effectively-271501 29. docker container start, accessed on April 7, 2025, https://docs.docker.com/reference/cli/docker/container/start/ 30. How To Manually And Automatically Restart Docker Containers - Warp Terminal, accessed on April 7, 2025, https://www.warp.dev/terminus/docker-restart-container 31. Start containers automatically - Docker Docs, accessed on April 7, 2025, https://docs.docker.com/engine/containers/start-containers-automatically/ 32. docker container rm - Docker Docs, accessed on April 7, 2025, https://docs.docker.com/reference/cli/docker/container/rm/ 33. docker compose rm - Docker Docs, accessed on April 7, 2025, https://docs.docker.com/reference/cli/docker/compose/rm/ 34. How to stop and remove Docker containers? - LabEx, accessed on April 7, 2025, https://labex.io/questions/how-to-stop-and-remove-docker-containers-16232 35. How to View Docker Container Logs - A Step-by-Step Guide | SigNoz, accessed on April 7, 2025, https://signoz.io/guides/docker-view-logs/ 36. Docker Logs: Guide to Managing Docker Container Logs - phoenixNAP, accessed on April 7, 2025, https://phoenixnap.com/kb/docker-container-logs 37. docker container logs, accessed on April 7, 2025, https://docs.docker.com/reference/cli/docker/container/logs/ 38. Docker Compose Logs: An In-Depth Guide for Developers - Last9, accessed on April 7, 2025, https://last9.io/blog/docker-compose-logs/ 39. Docker Exec Command - How to Use It, Tips & Examples - Spacelift, accessed on April 7, 2025, https://spacelift.io/blog/docker-exec 40. How to use Docker exec | Cherry Servers, accessed on April 7, 2025, https://www.cherryservers.com/blog/how-to-use-docker-exec 41. docker container exec - Docker Docs, accessed on April 7, 2025, https://docs.docker.com/reference/cli/docker/container/exec/ 42. How to use the Docker inspect command effectively? - LabEx, accessed on April 7, 2025, https://labex.io/questions/how-to-use-the-docker-inspect-command-effectively-271467 43. Docker Inspect Explained: A Step-by-Step Guide - Kosli, accessed on April 7, 2025, https://www.kosli.com/blog/docker-inspect-explained-the-essential-guide/ 44. docker inspect - Docker Docs, accessed on April 7, 2025, https://docs.docker.com/reference/cli/docker/inspect/ 45. docker volume create - Docker Docs, accessed on April 7, 2025, https://docs.docker.com/reference/cli/docker/volume/create/ 46. How to list all Docker volumes - LabEx, accessed on April 7, 2025, https://labex.io/tutorials/docker-how-to-list-all-docker-volumes-416186 47. docker volume ls - Docker Docs, accessed on April 7, 2025, https://docs.docker.com/reference/cli/docker/volume/ls/ 48. How to inspect the contents of a Docker volume - LabEx, accessed on April 7, 2025, https://labex.io/tutorials/docker-how-to-inspect-the-contents-of-a-docker-volume-416185 49. docker volume inspect - Docker Docs, accessed on April 7, 2025, https://docs.docker.com/reference/cli/docker/volume/inspect/ 50. Volumes | Docker Docs, accessed on April 7, 2025, https://docs.docker.com/engine/storage/volumes/ 51. How To Remove Docker Volumes, Images and Containers | Blog - Contabo, accessed on April 7, 2025, https://contabo.com/blog/how-to-remove-docker-volumes-images-and-containers/ 52. docker volume rm - Docker Docs, accessed on April 7, 2025, https://docs.docker.com/reference/cli/docker/volume/rm/ 53. How to create a network of containers that can communicate with each other interchangably? - Docker Desktop, accessed on April 7, 2025, https://forums.docker.com/t/how-to-create-a-network-of-containers-that-can-communicate-with-each-other-interchangably/134292 54. Networking | Docker Docs, accessed on April 7, 2025, https://docs.docker.com/engine/network/ 55. docker network create - Docker Docs, accessed on April 7, 2025, https://docs.docker.com/reference/cli/docker/network/create/ 56. How to create a custom Docker bridge network - LabEx, accessed on April 7, 2025, https://labex.io/tutorials/docker-how-to-create-a-custom-docker-bridge-network-411523 57. How to list Docker networks on a host - LabEx, accessed on April 7, 2025, https://labex.io/tutorials/docker-how-to-list-docker-networks-on-a-host-411563 58. How to fix ‘docker network ls’ command not found error - LabEx, accessed on April 7, 2025, https://labex.io/tutorials/docker-how-to-fix-docker-network-ls-command-not-found-error-417656 59. docker network ls | Docker Docs, accessed on April 7, 2025, https://docs.docker.com/reference/cli/docker/network/ls/ 60. docker-network-inspect - Display detailed information on one or more networks - Ubuntu Manpage, accessed on April 7, 2025, https://manpages.ubuntu.com/manpages/xenial/man1/docker-network-inspect.1.html 61. docker network inspect - Docker Docs, accessed on April 7, 2025, https://docs.docker.com/reference/cli/docker/network/inspect/ 62. Docker : How to find the network my container is in? - Stack Overflow, accessed on April 7, 2025, https://stackoverflow.com/questions/43904562/docker-how-to-find-the-network-my-container-is-in 63. docker network rm - Docker Docs, accessed on April 7, 2025, https://docs.docker.com/reference/cli/docker/network/rm/ 64. docker network rm, accessed on April 7, 2025, https://docker-docs.uclv.cu/engine/reference/commandline/network_rm/ 65. docker-network-rm - Remove one or more networks - Ubuntu Manpage, accessed on April 7, 2025, https://manpages.ubuntu.com/manpages/xenial/en/man1/docker-network-rm.1.html 66. docker network connect, accessed on April 7, 2025, https://docs.docker.com/reference/cli/docker/network/connect/ 67. Networking using the host network - Docker Docs, accessed on April 7, 2025, https://docs.docker.com/engine/network/tutorials/host/ 68. Docker - Dockerfile - Tutorialspoint, accessed on April 7, 2025, https://www.tutorialspoint.com/docker/docker_file.htm 69. Building best practices - Docker Docs, accessed on April 7, 2025, https://docs.docker.com/build/building/best-practices/ 70. Deep Dive into Multistage Dockerfile with a Golang App ⚙️ - DEV Community, accessed on April 7, 2025, https://dev.to/sre_panchanan/deep-dive-into-multistage-dockerfile-with-a-golang-app-6e1 71. How to use .dockerignore and its importance | Shisho Cloud, accessed on April 7, 2025, https://shisho.dev/blog/posts/how-to-use-dockerignore/ 72. DOCKER TUTORIALS. Do not ignore .dockerignore (it’s… | by Codefresh | Container Hub, accessed on April 7, 2025, https://medium.com/containers-101/docker-tutorials-2e31a513de61 73. How to Build a Docker Image from Dockerfile - Cherry Servers, accessed on April 7, 2025, https://www.cherryservers.com/blog/docker-build-command 74. docker buildx build, accessed on April 7, 2025, https://docs.docker.com/reference/cli/docker/buildx/build/ 75. Docker Compose - Developer Experience Knowledge Base, accessed on April 7, 2025, https://developerexperience.io/articles/docker-compose 76. The Meaning of Version in docker-compose.yml | Baeldung on Ops, accessed on April 7, 2025, https://www.baeldung.com/ops/docker-compose-yml-version 77. How to Verify and Troubleshoot Your Docker Compose Configuration - LabEx, accessed on April 7, 2025, https://labex.io/tutorials/docker-how-to-verify-and-troubleshoot-your-docker-compose-configuration-398334 78. Docker Compose - What is It, Example & Tutorial - Spacelift, accessed on April 7, 2025, https://spacelift.io/blog/docker-compose 79. docker compose up - Docker Docs, accessed on April 7, 2025, https://docs.docker.com/reference/cli/docker/compose/up/ 80. How To Shutdown Services In Docker Compose - Warp Terminal, accessed on April 7, 2025, https://www.warp.dev/terminus/docker-compose-down 81. docker compose down - Docker Docs, accessed on April 7, 2025, https://docs.docker.com/reference/cli/docker/compose/down/ 82. Docker-Compose - Ps/Pause/Unpause - Learning-Ocean, accessed on April 7, 2025, https://learning-ocean.com/tutorials/docker-compose/docker-compose-pspauseunpause/ 83. docker compose - Docker Docs, accessed on April 7, 2025, https://docs.docker.com/reference/cli/docker/compose/ 84. Docker Compose Logs - Guide to Monitoring & Debugging - Spacelift, accessed on April 7, 2025, https://spacelift.io/blog/docker-compose-logs 85. docker compose exec - Docker Docs, accessed on April 7, 2025, https://docs.docker.com/reference/cli/docker/compose/exec/ 86. docker-compose exec issue #4290 - GitHub, accessed on April 7, 2025, https://github.com/docker/compose/issues/4290 87. docker compose pull - Docker Docs, accessed on April 7, 2025, https://docs.docker.com/reference/cli/docker/compose/pull/ 88. docker-compose pull, accessed on April 7, 2025, https://docker-docs.uclv.cu/compose/reference/pull/ 89. docker compose config - Docker Docs, accessed on April 7, 2025, https://docs.docker.com/reference/cli/docker/compose/config/ 90. Pulling Images Using the Docker CLI - Oracle Help Center, accessed on April 7, 2025, https://docs.oracle.com/en-us/iaas/Content/Registry/Tasks/registrypullingimagesusingthedockercli.htm 91. 21 Docker Security Best Practices: Daemon, Image, Containers - Spacelift, accessed on April 7, 2025, https://spacelift.io/blog/docker-security 92. Docker Prune: A Complete Guide with Hands-On Examples - DataCamp, accessed on April 7, 2025, https://www.datacamp.com/tutorial/docker-prune 93. guide/english/docker/docker-system-prune · fa7043e135e8ac2a98e0a918602d3350b3573f14 · digll-freecodecamp-public / digll-freecodecamp-hsrm - GitLab, accessed on April 7, 2025, https://gitlab.studiumdigitale.uni-frankfurt.de/digll-freecodecamp-public/digll-freecodecamp-hsrm/-/tree/fa7043e135e8ac2a98e0a918602d3350b3573f14/guide/english/docker/docker-system-prune 94. How to Use Docker Prune - Beam Cloud, accessed on April 7, 2025, https://www.beam.cloud/blog/docker-prune 95. Tidy up with docker system prune - Depot.dev, accessed on April 7, 2025, https://depot.dev/blog/docker-system-prune 96. docs.docker.com, accessed on April 7, 2025, https://docs.docker.com/engine/manage-resources/pruning/#:~:text=The%20docker%20system%20prune%20command,system%20prune%20to%20prune%20volumes.&text=y%2FN%5D%20y-,By%20default%2C%20you’re%20prompted%20to%20continue.,f%20or%20%2D%2Dforce%20flag. 97. Prune unused Docker objects - Docker Docs, accessed on April 7, 2025, https://docs.docker.com/engine/manage-resources/pruning/ 98. How To Remove All Stopped Containers In Docker - Warp Terminal, accessed on April 7, 2025, https://www.warp.dev/terminus/docker-remove-stopped-containers 99. How To Remove Docker Images, Containers, and Volumes - DigitalOcean, accessed on April 7, 2025, https://www.digitalocean.com/community/tutorials/how-to-remove-docker-images-containers-and-volumes 100. docker network prune, accessed on April 7, 2025, https://docs.docker.com/reference/cli/docker/network/prune/ 101. Why do I have to periodically use docker network prune to reenable docker mapping ip connections inside a container? - Stack Overflow, accessed on April 7, 2025, https://stackoverflow.com/questions/55819578/why-do-i-have-to-periodically-use-docker-network-prune-to-reenable-docker-mapp