From 33eeb0cf78e4e8de0a9ad8b15abca22b3621b88d Mon Sep 17 00:00:00 2001 From: valeria Date: Thu, 10 Feb 2022 10:24:56 +0100 Subject: [PATCH 1/3] Add docker_basics folder --- Docker_basics/.DS_Store | Bin 0 -> 6148 bytes Docker_basics/01-Terminology.md | 95 ++++++++++++++++++++++++++++++ Docker_basics/img/containers.jpg | Bin 0 -> 39216 bytes Docker_basics/img/differences.jpg | Bin 0 -> 72224 bytes 4 files changed, 95 insertions(+) create mode 100644 Docker_basics/.DS_Store create mode 100644 Docker_basics/01-Terminology.md create mode 100644 Docker_basics/img/containers.jpg create mode 100644 Docker_basics/img/differences.jpg diff --git a/Docker_basics/.DS_Store b/Docker_basics/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..940e942902c4c95c53cc11d73aa9ce43019c31f2 GIT binary patch literal 6148 zcmeH~J!%6%427R!7lt%jx}3%b$PET#pTHMLVK4#Pfk0Bv(ew1vWSu%J;R&QS(yZ9s zuh>}uu>I%x1(*PA=&sm#n3*wO;SD!jzD^(a>-+t}idTWBh?%i6VYXk}5)lvq5fA|p z5P<~|$Wt7f=LJ2J9z_I1U>OAb`_SmFy>z6;r-LCz0P33MFs@^kpf)d1d+A7Jg=RH9 zShZS=AzqJmYOCvd=}66XSPdUmcQ&75XqN4;#)M`)L_q{ZU`Ak-`Q+#Sk^bBKKWkAc z0wVCw2-x~?I_&vUb+$gdp4VTi>gz$L#^nq@egc^IQM{#xaliS3+Dk_&D>VHG1O^2W H_)`MkK;;pJ literal 0 HcmV?d00001 diff --git a/Docker_basics/01-Terminology.md b/Docker_basics/01-Terminology.md new file mode 100644 index 0000000..25a7175 --- /dev/null +++ b/Docker_basics/01-Terminology.md @@ -0,0 +1,95 @@ +# Terminology + +## Table of Contents +1. [Image](#image) +2. [Container](#container) +3. [Dockerfile](#docker-file) +4. [Docker Daemon](#docker-daemon) +5. [Docker Client](#docker-client) +6. [Docker Hub](#docker-hub) + +### Image +A Docker image is a read-only, inert template that comes with instructions for deploying containers. In Docker, everything basically revolves around images. +An image consists of a collection of files (or layers) that pack together all the necessities—such as dependencies, source code, and libraries—needed to set up a completely functional container environment. +Images are stored on a Docker registry, such as the Docker Hub, or on a local registry. + +#### Image download +When the image is deployed to a Docker environment, it can be executed as a Docker container. +In order to first download an image, we can use the `docker pull` command. For example, if I wanted to pull the `busybox` image, I would use `docker pull busybox`. +The `docker run` command creates a container from a specific image. We can download and run the image directly in one go using the `docker run` command; by using `docker run busybox`, this will first download the `busybox` image, and then run it. + +#### Image layers +A Docker image is made up of **multiple layers**. The image layers are stacked to one another. Although the layers may be different from each other, every one of them may depend on the one immediately below it. +These layers, also called intermediate images, are essentially read-only files that a container layer will be added on top of them after setting up a virtualized environment. Once a container is created, a writable layer is added on top of the unchangeable images, allowing a user to make changes. + +Docker images are a reusable asset - deployable on any host. Developers can take the static image layers from one project and use them in another. This saves the user time, because they do not have to recreate an image from scratch. + +#### Image attributes +We can use the `docker images` command to view an image’s details on our system. +An image has the following attributes: +* **Tag:** identifies the image by its tag, such as version number. +* **Image ID:** is a unique image identity. +* **Created:** the period of time since it was created. +* **Size:** the image’s virtual size. + +#### Image types +For simplicity, you can think of an image akin to a git repository - images can be committed with changes and have multiple versions. If you don't provide a specific version number, the client defaults to latest. For example, you can pull a specific version of ubuntu image + +To get a new Docker image you can either get it from a registry (such as the Docker Hub) or create your own. There are tens of thousands of images available on Docker Hub. You can also search for images directly from the command line using docker search. + +An important distinction to be aware of when it comes to images is the difference between base and child images. + +* **Base images** are images that have no parent image, usually images with an OS like ubuntu, busybox or debian. +* **Child images** are images that build on base images and add additional functionality. + +Then there are official and user images, which can be both base and child images. + +* **Official images** are images that are officially maintained and supported by the folks at Docker. These are typically one word long. In the list of images above, the python, ubuntu, busybox and hello-world images are official images. +* **User images** are images created and shared by users like you and me. They build on base images and add additional functionality. Typically, these are formatted as user/image-name. + +### Container +Containers are created from Docker images, and they run the actual application. A Docker container is a virtualized runtime environment that provides isolation capabilities for separating the execution of applications from the underpinning system. It is an instance of a Docker image. +Containers are the ultimate utility of the Docker technology: they provide a portable and lightweight environment for deploying applications. +Each container is autonomous and runs in its own isolated environment, ensuring it does not disrupt other running applications or its underlying system. This greatly improves the security of applications. + +We create a container using `docker run`, which we did by using the busybox image that we downloaded. A list of running containers can be seen using the `docker ps` command (`docker ps -a` outputs both running and stopped containers). +Docker defines several **container states**, such as `created`, `restarting`, `running`, `paused`, `exited`, and `dead`. Since several states are possible, and a container is just an instance of the image, a container does not need to be running. + +Every time Docker creates a container from an image, it places a thin read-write layer on top of the image. This writable layer allows for changes to be made to the container, as the lower layers in the image are unchangeable. It also stores any changes made to the container during its entire runtime. + +Docker containers + +If we want to keep the changes made to the initial image for future use, you can take a screenshot to save the current state of the container. This will add a container layer atop the image, eventually creating a new immutable image. +Furthermore, it’s possible to launch **multiple container instances** simultaneously from the **same image**. Every container layer will maintain its own individual state safely atop the underlying image. The containers will have different IDs, but arise from the same image. + +Creating multiple containers from the same image can be very beneficial. For example, it increases the availability of an application—in case one container fails, the others will ensure the application is still up and running. Duplicate containers also help in scaling up an application in case demand surges upwards. + +### Difference between Docker container and image +A Docker container is a virtualized runtime environment used in application development. It is used to create, run and deploy applications that are isolated from the underlying hardware. A Docker container can use one machine, share its kernel and virtualize the OS to run more isolated processes. As a result, Docker containers are lightweight. + +A Docker image is like a snapshot in other types of VM environments. It is a record of a Docker container at a specific point in time. Docker images are also immutable. While they can't be changed, they can be duplicated, shared or deleted. The feature is useful for testing new software or configurations because whatever happens, the image remains unchanged. + +Containers need a runnable image to exist. Containers are dependent on images, because they are used to construct runtime environments and are needed to run an application. + +A simple analogy that compares their differences is to think of a Docker image as a recipe and a container as the cake prepared from that recipe. +The recipe sets out the instructions for baking the cake. We cannot enjoy eating the cake if we do not put the instructions into action. +We need to follow the recipe to prepare the cake and eat it. Similarly, we should follow the instructions in the Docker image to create and start a container, and enjoy the benefits of Docker. + +We can bake as many cakes as possible from a single recipe—just like an image can create multiple containers. However, if we change the recipe, the taste of our existing cakes will not change. +Only newly baked cakes will use the modified recipe. Likewise, if we make changes to a container image, we will not affect the already running containers. + +The table below summarizes the differences between a Docker container and image. + +Difference between container and image + +### Dockerfile +When we run the `docker run` command and specify an image (e.g., `busybox`), Docker uses the Dockerfile to build the image itself. +A Dockerfile is a simple text file that contains a list of commands that the Docker client calls while creating an image. It's a simple way to automate the image creation process. The best part is that the commands we write in a Dockerfile are almost identical to their equivalent Linux commands. This means we don't really have to learn new syntax to create our own dockerfiles. + +The advantage of a Dockerfile over just storing the binary image (or a snapshot/template in other virtualization systems) is that the automatic builds will ensure we have the latest version available. This is a good thing from a security perspective, as we want to ensure that we are not installing any vulnerable software. + +### Docker Daemon + + +### Docker Client +### Docker Hub diff --git a/Docker_basics/img/containers.jpg b/Docker_basics/img/containers.jpg new file mode 100644 index 0000000000000000000000000000000000000000..33b7aa52f383a4a5b3cf44bfbadc9dd901c79931 GIT binary patch literal 39216 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 literal 0 HcmV?d00001 diff --git a/Docker_basics/img/differences.jpg b/Docker_basics/img/differences.jpg new file mode 100644 index 0000000000000000000000000000000000000000..558f9baacac9851cf039cdafedf6d7484a3dacd2 GIT binary patch literal 72224 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 SZvCNe{qyI4>=-Egp7~$ULud*B literal 0 HcmV?d00001 From 16af98272383bcc324eee545fb71895d873a3830 Mon Sep 17 00:00:00 2001 From: valeria Date: Thu, 10 Feb 2022 18:34:48 +0100 Subject: [PATCH 2/3] Update docker_basics folder --- Docker_basics/01-Terminology.md | 15 +- Docker_basics/img/.DS_Store | Bin 0 -> 6148 bytes Docker_basics/img/daemon.svg | 2597 +++++++++++++++++++++++++++++++ 3 files changed, 2610 insertions(+), 2 deletions(-) create mode 100644 Docker_basics/img/.DS_Store create mode 100644 Docker_basics/img/daemon.svg diff --git a/Docker_basics/01-Terminology.md b/Docker_basics/01-Terminology.md index 25a7175..b30d3a2 100644 --- a/Docker_basics/01-Terminology.md +++ b/Docker_basics/01-Terminology.md @@ -88,8 +88,19 @@ A Dockerfile is a simple text file that contains a list of commands that the Doc The advantage of a Dockerfile over just storing the binary image (or a snapshot/template in other virtualization systems) is that the automatic builds will ensure we have the latest version available. This is a good thing from a security perspective, as we want to ensure that we are not installing any vulnerable software. -### Docker Daemon +### Docker Daemon +The Docker daemon (`dockerd`) is a persistent background process that manages Docker images, containers, networks, and storage volumes. The Docker daemon constantly listens for Docker API requests and processes them. Is the process that runs in the operating system which clients talk to. +Docker Daemon + +When you use the `docker run` command to start up a container, your Docker client will translate that command into an HTTP API call, will send it to Docker daemon, Docker daemon will then evaluate the request, talk to the underlying operating system and provision your container. ### Docker Client -### Docker Hub +The Docker client (`docker`) is the command line tool that allows the user to interact with the daemon. More generally, there can be other forms of clients too - such as Kitematic which provide a GUI to the users. + +The Docker client is the primary way that many Docker users interact with Docker. When you use commands such as `docker run`, the client sends these commands to `dockerd`, which carries them out. The docker command uses the Docker API. The Docker client can communicate with more than one daemon. + +### Docker Registry +A Docker registry stores Docker images. Docker Hub is a public registry that anyone can use, and Docker is configured to look for images on Docker Hub by default. You can even run your own private registry. + +When you use the `docker pull` or `docker run` commands, the required images are pulled from your configured registry. When you use the `docker push` command, your image is pushed to your configured registry. diff --git a/Docker_basics/img/.DS_Store b/Docker_basics/img/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 GIT binary patch literal 6148 zcmeH~Jr2S!425mzP>H1@V-^m;4Wg<&0T*E43hX&L&p$$qDprKhvt+--jT7}7np#A3 zem<@ulZcFPQ@L2!n>{z**++&mCkOWA81W14cNZlEfg7;MkzE(HCqgga^y>{tEnwC%0;vJ&^%eQ zLs35+`xjp>T0 + + + + 2014-04-15 00:37Z + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 515873701a0f8c7ae09409176f981f042dea94af Mon Sep 17 00:00:00 2001 From: valeria Date: Fri, 11 Feb 2022 10:15:24 +0100 Subject: [PATCH 3/3] Update docker_basics folder --- Docker_basics/01-Terminology.md | 37 ++++++++++++++++++++------------- 1 file changed, 23 insertions(+), 14 deletions(-) diff --git a/Docker_basics/01-Terminology.md b/Docker_basics/01-Terminology.md index b30d3a2..9959905 100644 --- a/Docker_basics/01-Terminology.md +++ b/Docker_basics/01-Terminology.md @@ -6,7 +6,7 @@ 3. [Dockerfile](#docker-file) 4. [Docker Daemon](#docker-daemon) 5. [Docker Client](#docker-client) -6. [Docker Hub](#docker-hub) +6. [Docker Registry](#docker-registry) ### Image A Docker image is a read-only, inert template that comes with instructions for deploying containers. In Docker, everything basically revolves around images. @@ -15,8 +15,8 @@ Images are stored on a Docker registry, such as the Docker Hub, or on a local re #### Image download When the image is deployed to a Docker environment, it can be executed as a Docker container. -In order to first download an image, we can use the `docker pull` command. For example, if I wanted to pull the `busybox` image, I would use `docker pull busybox`. -The `docker run` command creates a container from a specific image. We can download and run the image directly in one go using the `docker run` command; by using `docker run busybox`, this will first download the `busybox` image, and then run it. +In order to first download an image, you can use the `docker pull` command. For example, if I wanted to pull the `busybox` image, I would use `docker pull busybox`. +The `docker run` command creates a container from a specific image. You can download and run the image directly in one go using the `docker run` command; by using `docker run busybox`, this will first download the `busybox` image, and then run it. #### Image layers A Docker image is made up of **multiple layers**. The image layers are stacked to one another. Although the layers may be different from each other, every one of them may depend on the one immediately below it. @@ -25,7 +25,7 @@ These layers, also called intermediate images, are essentially read-only files t Docker images are a reusable asset - deployable on any host. Developers can take the static image layers from one project and use them in another. This saves the user time, because they do not have to recreate an image from scratch. #### Image attributes -We can use the `docker images` command to view an image’s details on our system. +You can use the `docker images` command to view an image’s details on our system. An image has the following attributes: * **Tag:** identifies the image by its tag, such as version number. * **Image ID:** is a unique image identity. @@ -52,14 +52,14 @@ Containers are created from Docker images, and they run the actual application. Containers are the ultimate utility of the Docker technology: they provide a portable and lightweight environment for deploying applications. Each container is autonomous and runs in its own isolated environment, ensuring it does not disrupt other running applications or its underlying system. This greatly improves the security of applications. -We create a container using `docker run`, which we did by using the busybox image that we downloaded. A list of running containers can be seen using the `docker ps` command (`docker ps -a` outputs both running and stopped containers). +You create a container using `docker run`, which you did by using the busybox image that you downloaded. A list of running containers can be seen using the `docker ps` command (`docker ps -a` outputs both running and stopped containers). Docker defines several **container states**, such as `created`, `restarting`, `running`, `paused`, `exited`, and `dead`. Since several states are possible, and a container is just an instance of the image, a container does not need to be running. Every time Docker creates a container from an image, it places a thin read-write layer on top of the image. This writable layer allows for changes to be made to the container, as the lower layers in the image are unchangeable. It also stores any changes made to the container during its entire runtime. Docker containers -If we want to keep the changes made to the initial image for future use, you can take a screenshot to save the current state of the container. This will add a container layer atop the image, eventually creating a new immutable image. +If you want to keep the changes made to the initial image for future use, you can take a screenshot to save the current state of the container. This will add a container layer atop the image, eventually creating a new immutable image. Furthermore, it’s possible to launch **multiple container instances** simultaneously from the **same image**. Every container layer will maintain its own individual state safely atop the underlying image. The containers will have different IDs, but arise from the same image. Creating multiple containers from the same image can be very beneficial. For example, it increases the availability of an application—in case one container fails, the others will ensure the application is still up and running. Duplicate containers also help in scaling up an application in case demand surges upwards. @@ -72,21 +72,21 @@ A Docker image is like a snapshot in other types of VM environments. It is a rec Containers need a runnable image to exist. Containers are dependent on images, because they are used to construct runtime environments and are needed to run an application. A simple analogy that compares their differences is to think of a Docker image as a recipe and a container as the cake prepared from that recipe. -The recipe sets out the instructions for baking the cake. We cannot enjoy eating the cake if we do not put the instructions into action. -We need to follow the recipe to prepare the cake and eat it. Similarly, we should follow the instructions in the Docker image to create and start a container, and enjoy the benefits of Docker. +The recipe sets out the instructions for baking the cake. You cannot enjoy eating the cake if you do not put the instructions into action. +You need to follow the recipe to prepare the cake and eat it. Similarly, you should follow the instructions in the Docker image to create and start a container, and enjoy the benefits of Docker. -We can bake as many cakes as possible from a single recipe—just like an image can create multiple containers. However, if we change the recipe, the taste of our existing cakes will not change. -Only newly baked cakes will use the modified recipe. Likewise, if we make changes to a container image, we will not affect the already running containers. +You can bake as many cakes as possible from a single recipe—just like an image can create multiple containers. However, if you change the recipe, the taste of our existing cakes will not change. +Only newly baked cakes will use the modified recipe. Likewise, if you make changes to a container image, you will not affect the already running containers. The table below summarizes the differences between a Docker container and image. Difference between container and image ### Dockerfile -When we run the `docker run` command and specify an image (e.g., `busybox`), Docker uses the Dockerfile to build the image itself. -A Dockerfile is a simple text file that contains a list of commands that the Docker client calls while creating an image. It's a simple way to automate the image creation process. The best part is that the commands we write in a Dockerfile are almost identical to their equivalent Linux commands. This means we don't really have to learn new syntax to create our own dockerfiles. +When you run the `docker run` command and specify an image (e.g., `busybox`), Docker uses the Dockerfile to build the image itself. +A Dockerfile is a simple text file that contains a list of commands that the Docker client calls while creating an image. It's a simple way to automate the image creation process. The best part is that the commands you write in a Dockerfile are almost identical to their equivalent Linux commands. This means you don't really have to learn new syntax to create our own dockerfiles. -The advantage of a Dockerfile over just storing the binary image (or a snapshot/template in other virtualization systems) is that the automatic builds will ensure we have the latest version available. This is a good thing from a security perspective, as we want to ensure that we are not installing any vulnerable software. +The advantage of a Dockerfile over just storing the binary image (or a snapshot/template in other virtualization systems) is that the automatic builds will ensure you have the latest version available. This is a good thing from a security perspective, as you want to ensure that you are not installing any vulnerable software. ### Docker Daemon The Docker daemon (`dockerd`) is a persistent background process that manages Docker images, containers, networks, and storage volumes. The Docker daemon constantly listens for Docker API requests and processes them. Is the process that runs in the operating system which clients talk to. @@ -101,6 +101,15 @@ The Docker client (`docker`) is the command line tool that allows the user to in The Docker client is the primary way that many Docker users interact with Docker. When you use commands such as `docker run`, the client sends these commands to `dockerd`, which carries them out. The docker command uses the Docker API. The Docker client can communicate with more than one daemon. ### Docker Registry -A Docker registry stores Docker images. Docker Hub is a public registry that anyone can use, and Docker is configured to look for images on Docker Hub by default. You can even run your own private registry. +The Docker Registry is a stateless, highly scalable server side application that stores and lets you distribute Docker images. +The Registry is open-source, under the permissive Apache license. + +Docker Hub is a public registry that anyone can use, and Docker is configured to look for images on Docker Hub by default. You can even run your own private registry. When you use the `docker pull` or `docker run` commands, the required images are pulled from your configured registry. When you use the `docker push` command, your image is pushed to your configured registry. + +Running your own Registry is a great solution to integrate with and complement your CI/CD system. In a typical workflow, a commit to your source revision control system would trigger a build on your CI system, which would then push a new image to your Registry if the build is successful. A notification from the Registry would then trigger a deployment on a staging environment, or notify other systems that a new image is available. + +It’s also an essential component if you want to quickly deploy a new image over a large cluster of machines. + +Finally, it’s the best way to distribute images inside an isolated network.