{"id":11932,"date":"2020-05-28T09:11:09","date_gmt":"2020-05-28T07:11:09","guid":{"rendered":"https:\/\/www.credativ.de\/blog\/credativ-inside\/what-exactly-are-containers\/"},"modified":"2020-05-28T09:11:09","modified_gmt":"2020-05-28T07:11:09","slug":"what-exactly-are-containers","status":"publish","type":"post","link":"https:\/\/www.credativ.de\/en\/blog\/howtos-en\/what-exactly-are-containers\/","title":{"rendered":"What exactly are containers?"},"content":{"rendered":"<p>For some time now, a large part of the IT landscape has been talking only about &#8220;containers&#8221;, &#8220;microservices&#8221; and &#8220;Kubernetes.&#8221;<\/p>\n<p>But what exactly are containers and what technical basis are they based on?<\/p>\n<h2 id=\"allgemein\">General<\/h2>\n<p>Simply put, a container is an isolated runtime environment for processes. There are various areas that can be separated &#8211; the most important being processes (pid), network (net), volumes \/ hard disks (mnt) and user \/ group IDs (user). <\/p>\n<p>The technology behind this is called &#8220;namespaces&#8221; and was first implemented in the Linux Kernel since version 2.4.19 (2002) and later expanded, but only since version 3.8 (2013) in userspace, i.e. meaningfully usable for users. In addition, the cgroups technology plays a major role here. This makes it possible to provide the separate areas with resources such as CPU and RAM, or to define them.  <\/p>\n<p>A well-known and early implementation of these features is lxc (linux containers), which is still being developed today and implements these features close to the system.<\/p>\n<h2 id=\"linuxnamespaces\">Linux Namespaces<\/h2>\n<p>A namespace is a way to divide resources and objects into logical groups. You could also describe it as a system context in which a process is started. It is not a problem to create your own namespaces within a namespace for newly started processes.  <\/p>\n<p>An example from daily practice:<\/p>\n<p>When a Linux host starts, an instance is created for each namespace type. The init process with PID 1 (usually systemd today) is then assigned to the instances accordingly. This is transparent and only of limited relevance for most users. This is because all system resources are available to these namespaces and new resources are initially assigned to them.   <\/p>\n<p>To view a list of the namespaces currently running on the system, there is the tool <code>lsns<\/code>.<\/p>\n<p>In the following example, we see the initially created namespaces and the assignment of the init process.<\/p>\n<pre><code class=\"bash language-bash\">[root@buildah ~]# lsns -p1\n        NS TYPE   NPROCS PID USER COMMAND\n4026531835 cgroup     96   1 root \/usr\/lib\/systemd\/systemd --switched-root --system --deserialize 18\n4026531836 pid        96   1 root \/usr\/lib\/systemd\/systemd --switched-root --system --deserialize 18\n4026531837 user       95   1 root \/usr\/lib\/systemd\/systemd --switched-root --system --deserialize 18\n4026531838 uts        96   1 root \/usr\/lib\/systemd\/systemd --switched-root --system --deserialize 18\n4026531839 ipc        96   1 root \/usr\/lib\/systemd\/systemd --switched-root --system --deserialize 18\n4026531840 mnt        90   1 root \/usr\/lib\/systemd\/systemd --switched-root --system --deserialize 18\n4026531992 net        96   1 root \/usr\/lib\/systemd\/systemd --switched-root --system --deserialize 18\n<\/code><\/pre>\n<p>A process can only ever be assigned to one namespace per type. For example, the process with PID 1 from the example above cannot be assigned an additional pid namespace. <\/p>\n<p>The different types have no interactions or dependencies with each other. For example, you can assign a new process (e.g. a shell) only its own net-namespace. <\/p>\n<p>To create a new namespace as a user, there is the tool <code>unshare<\/code>. Using parameters, it is possible to specify which namespace types should be created for the process. <\/p>\n<p>The following is an example of how a container-like environment (in which all possible areas are separated from the host system) can be created manually.<\/p>\n<p>To do this, we start a bash shell with the parameters shown as a normal user without root permissions.<\/p>\n<pre><code class=\"bash language-bash\">[podmanager@buildah ~]$ unshare --mount --uts --ipc --net --pid --fork --user --map-root-user \/bin\/bash\n\n[root@buildah ~]# id\nuid=0(root) gid=0(root) Gruppen=0(root) Kontext=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023\n\n[root@buildah ~]# ip a\n1: lo: &lt;LOOPBACK&gt; mtu 65536 qdisc noop state DOWN group default qlen 1000\n    link\/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00\n\n[root@buildah ~]# lsns\n        NS TYPE   NPROCS   PID USER COMMAND\n4026531835 cgroup      3   952 root unshare --mount --uts --ipc --net --pid --fork --user --map-root-user \/bin\/bash\n4026531836 pid         1   952 root unshare --mount --uts --ipc --net --pid --fork --user --map-root-user \/bin\/bash\n4026532192 user        3   952 root unshare --mount --uts --ipc --net --pid --fork --user --map-root-user \/bin\/bash\n4026532193 mnt         3   952 root unshare --mount --uts --ipc --net --pid --fork --user --map-root-user \/bin\/bash\n4026532194 uts         3   952 root unshare --mount --uts --ipc --net --pid --fork --user --map-root-user \/bin\/bash\n4026532196 ipc         3   952 root unshare --mount --uts --ipc --net --pid --fork --user --map-root-user \/bin\/bash\n4026532198 pid         2   953 root \/bin\/bash\n4026532200 net         3   952 root unshare --mount --uts --ipc --net --pid --fork --user --map-root-user \/bin\/bash\n<\/code><\/pre>\n<p>As you can see, the process is now in an encapsulated area with its own IDs and network area. However, the entire hard disk configuration was also transferred to the new area, including the <code>\/proc<\/code> folder, in which the processes of the host system are listed. <\/p>\n<pre><code class=\"bash language-bash\">[root@buildah ~]# ps -ef f  | head\nUID        PID  PPID  C STIME TTY      STAT   TIME CMD\nnobody       2     0  0 14:22 ?        S      0:00 [kthreadd]\nnobody       3     2  0 14:22 ?        I&lt;     0:00  \\_ [rcu_gp]\nnobody       4     2  0 14:22 ?        I&lt;     0:00  \\_ [rcu_par_gp]\nnobody       6     2  0 14:22 ?        I&lt;     0:00  \\_ [kworker\/0:0H-kblockd]\nnobody       8     2  0 14:22 ?        I&lt;     0:00  \\_ [mm_percpu_wq]\nnobody       9     2  0 14:22 ?        S      0:00  \\_ [ksoftirqd\/0]\nnobody      10     2  0 14:22 ?        I      0:00  \\_ [rcu_sched]\nnobody      11     2  0 14:22 ?        S      0:00  \\_ [migration\/0]\nnobody      12     2  0 14:22 ?        S      0:00  \\_ [watchdog\/0]\n<\/code><\/pre>\n<p>To correct this, a <code>mount -t proc proc \/proc<\/code> is required. This overlays the <code>\/proc<\/code> of the host system, meaning that only the processes of the new environment are visible. <\/p>\n<pre><code class=\"bash language-bash\">[root@buildah ~]# mount -t proc proc \/proc\n[root@buildah ~]# ps -ef f \nUID        PID  PPID  C STIME TTY      STAT   TIME CMD\nroot         1     0  0 15:05 pts\/1    S      0:00 \/bin\/bash\nroot        27     1  0 15:11 pts\/1    R+     0:00 ps -ef f\n<\/code><\/pre>\n<p>To leave the environment, simply type <code>exit<\/code>, or the key combination <code>STRG+D<\/code>.<\/p>\n<pre><code class=\"bash language-bash\">[root@buildah ~]# exit\nexit\n[podmanager@buildah ~]$\n<\/code><\/pre>\n<h3 id=\"cgroups\">cgroups<\/h3>\n<p>Control Groups (cgroups for short) are not a direct namespace, but allow processes to be grouped in a type of namespace and the available resources such as CPU and \/ or RAM to be limited or prioritized.<\/p>\n<p>There is now an updated version of cgroups (cgroupsV2) in the kernel. However, this is probably only used productively by Fedora &gt;= 31, as there are some incompatibilities with Docker here, but not with Podman. <\/p>\n<p>However, the setup is somewhat more complex and will therefore not be explained here, but will be the subject of a separate article.<\/p>\n<p>Further information can be found for those interested <a href=\"https:\/\/www.kernel.org\/doc\/Documentation\/cgroup-v1\/cgroups.txt\" target=\"_blank\" rel=\"noopener noreferrer\">here<\/a> (cgroupsv1) and <a href=\"https:\/\/www.kernel.org\/doc\/Documentation\/cgroup-v2.txt\" target=\"_blank\" rel=\"noopener noreferrer\">here<\/a> (cgroupsv2)<\/p>\n<h2 id=\"dasdateisystemeinescontainers\">The file system of a container<\/h2>\n<p>Each container contains all the components necessary for the operation of the binaries, such as libraries and binaries.<br \/>\nThe only dependency on the host system is generally that the applications must be able to run on the kernel of the host system.<\/p>\n<p>However, the file system is not a separate hard disk or similar, but merely an archive that contains a directory tree.<\/p>\n<p>This archive is then unpacked into a folder at the latest when a container is started and used as a new file system on this folder by means of an mnt namespace and <code>chroot<\/code>. The <code>chroot<\/code> changes the entry point for the file system to which the user has access. For example, <code>\/var\/lib\/docker\/container1\/dateisystem<\/code> on the host becomes the new <code>\/<\/code> within the container.  <\/p>\n<p>Here is an example with the separated environment from the previous section.<\/p>\n<p>First, we export the file system of the Postgres container as a tar archive and then unpack it into a subfolder.<\/p>\n<pre><code class=\"bash language-bash\">[podmanager@buildah ~]$ podman export 3b62694339c6 -o postgres_container.tar\n[podmanager@buildah ~]$ ls -l postgres_container.tar \n-rw-r--r--. 1 podmanager podmanager 313597440 31. M\u00e4r 15:31 postgres_container.tar\n[podmanager@buildah ~]$ mkdir postgres_root\n[podmanager@buildah ~]$ tar -xf postgres_container.tar -C postgres_root\/\n[podmanager@buildah ~]$ ls -l postgres_root\/\ninsgesamt 12\ndrwxr-xr-x.  2 podmanager podmanager 4096  3. M\u00e4r 01:27 bin\ndrwxr-xr-x.  2 podmanager podmanager    6  1. Feb 18:09 boot\ndrwxr-xr-x.  2 podmanager podmanager    6 24. Feb 01:00 dev\ndrwxr-xr-x.  2 podmanager podmanager    6  3. M\u00e4r 01:27 docker-entrypoint-initdb.d\nlrwxrwxrwx.  1 podmanager podmanager   34  4. M\u00e4r 18:35 docker-entrypoint.sh -&gt; usr\/local\/bin\/docker-entrypoint.sh\ndrwxr-xr-x. 37 podmanager podmanager 4096 31. M\u00e4r 14:24 etc\ndrwxr-xr-x.  2 podmanager podmanager    6  1. Feb 18:09 home\ndrwxr-xr-x.  8 podmanager podmanager   96 26. Feb 01:54 lib\ndrwxr-xr-x.  2 podmanager podmanager   34 24. Feb 01:00 lib64\ndrwxr-xr-x.  2 podmanager podmanager    6 24. Feb 01:00 media\ndrwxr-xr-x.  2 podmanager podmanager    6 24. Feb 01:00 mnt\ndrwxr-xr-x.  2 podmanager podmanager    6 24. Feb 01:00 opt\ndrwxr-xr-x.  2 podmanager podmanager    6  1. Feb 18:09 proc\ndrwx------.  2 podmanager podmanager   76 31. M\u00e4r 14:44 root\ndrwxr-xr-x.  5 podmanager podmanager   84 31. M\u00e4r 14:24 run\ndrwxr-xr-x.  2 podmanager podmanager 4096  3. M\u00e4r 01:27 sbin\ndrwxr-xr-x.  2 podmanager podmanager    6 24. Feb 01:00 srv\ndrwxr-xr-x.  2 podmanager podmanager    6  1. Feb 18:09 sys\ndrwxrwxr-x.  2 podmanager podmanager    6  3. M\u00e4r 01:27 tmp\ndrwxr-xr-x. 10 podmanager podmanager  105 24. Feb 01:00 usr\ndrwxr-xr-x. 11 podmanager podmanager  139 24. Feb 01:00 var\n<\/code><\/pre>\n<p>Now we create a shell with its own namespaces again and execute the <code>chroot<\/code>.<\/p>\n<pre><code class=\"bash language-bash\">[podmanager@buildah ~]$ unshare --mount --uts --ipc --net --pid --fork --user --map-root-user \/bin\/bash\n\n[root@buildah ~]# cat \/etc\/redhat-release \nCentOS Linux release 8.1.1911 (Core)\n\n[root@buildah ~]# chroot postgres_root\n\nroot@buildah:\/var\/lib\/postgresql\/data# \/bin\/cat \/etc\/issue\nDebian GNU\/Linux 10 \\n \\l\n<\/code><\/pre>\n<p>Finally, the <code>\/proc<\/code> file system must be corrected, as mentioned.<br \/>\nOnce this is done, we have the same working environment that we would have in a container.<\/p>\n<pre><code class=\"bash language-bash\">root@buildah:\/var\/lib\/postgresql\/data# \/bin\/mount -t proc proc \/proc\n\nroot@buildah:\/var\/lib\/postgresql\/data# \/bin\/ps -ef f \nUID        PID  PPID  C STIME TTY      STAT   TIME CMD\nroot         1     0  0 13:34 ?        S      0:00 \/bin\/bash\nroot        27     1  0 13:35 ?        S      0:00 \/bin\/bash -i\nroot        54    27  0 13:43 ?        R+     0:00  \\_ \/bin\/ps -ef f\n<\/code><\/pre>\n<h2 id=\"fazit\">Conclusion<\/h2>\n<p>This is of course only a quick overview of the technical framework of container technology, which is based on known features of the Linux kernel.<br \/>\nDocker and also <a href=\"https:\/\/www.credativ.de\/en\/blog\/howtos-en\/podman-run-container-with-user-permissions\/\">Podman<\/a> use these features, but offer many more functions and, above all, convenience functions for handling them.<\/p>\n<p>At the latest when using container orchestration tools such as Kubernetes or okd, several layers of complexity are also added.<\/p>\n<p>If you have any questions about the use of containers, please do not hesitate to contact us. <a href=\"https:\/\/www.credativ.de\/en\/contact\/\">Contact us!<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>For some time now, a large part of the IT landscape has been talking only about &#8220;containers&#8221;, &#8220;microservices&#8221; and &#8220;Kubernetes.&#8221; But what exactly are containers and what technical basis are they based on? General Simply put, a container is an isolated runtime environment for processes. There are various areas that can be separated &#8211; the [&hellip;]<\/p>\n","protected":false},"author":21,"featured_media":5110,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_improvement_type_select":"improve_an_existing","_thumb_yes_seoaic":false,"_frame_yes_seoaic":false,"seoaic_generate_description":"","seoaic_improve_instructions_prompt":"","seoaic_rollback_content_improvement":"","seoaic_idea_thumbnail_generator":"","thumbnail_generated":false,"thumbnail_generate_prompt":"","seoaic_article_description":"","seoaic_article_subtitles":[],"footnotes":""},"categories":[1885],"tags":[1722,1778,1838],"class_list":["post-11932","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-howtos-en","tag-container-en","tag-docker-en","tag-kubernetes-en"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.6 (Yoast SEO v27.6) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>What exactly are containers? - credativ\u00ae<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.credativ.de\/en\/blog\/howtos-en\/what-exactly-are-containers\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"What exactly are containers?\" \/>\n<meta property=\"og:description\" content=\"For some time now, a large part of the IT landscape has been talking only about &#8220;containers&#8221;, &#8220;microservices&#8221; and &#8220;Kubernetes.&#8221; But what exactly are containers and what technical basis are they based on? General Simply put, a container is an isolated runtime environment for processes. There are various areas that can be separated &#8211; the [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.credativ.de\/en\/blog\/howtos-en\/what-exactly-are-containers\/\" \/>\n<meta property=\"og:site_name\" content=\"credativ\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/credativDE\/\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-28T07:11:09+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.credativ.de\/wp-content\/uploads\/2020\/05\/Was-sind-eigentlich-Container-Header.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"2500\" \/>\n\t<meta property=\"og:image:height\" content=\"300\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Danilo Endesfelder\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@credativde\" \/>\n<meta name=\"twitter:site\" content=\"@credativde\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Danilo Endesfelder\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/howtos-en\\\/what-exactly-are-containers\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/howtos-en\\\/what-exactly-are-containers\\\/\"},\"author\":{\"name\":\"Danilo Endesfelder\",\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/#\\\/schema\\\/person\\\/d9c2f6fe13bb2c8573516cda677594fe\"},\"headline\":\"What exactly are containers?\",\"datePublished\":\"2020-05-28T07:11:09+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/howtos-en\\\/what-exactly-are-containers\\\/\"},\"wordCount\":905,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/howtos-en\\\/what-exactly-are-containers\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.credativ.de\\\/wp-content\\\/uploads\\\/2020\\\/05\\\/Was-sind-eigentlich-Container-Header.jpg\",\"keywords\":[\"Container\",\"Docker\",\"Kubernetes\"],\"articleSection\":[\"HowTos\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/howtos-en\\\/what-exactly-are-containers\\\/#respond\"]}],\"copyrightYear\":\"2020\",\"copyrightHolder\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/howtos-en\\\/what-exactly-are-containers\\\/\",\"url\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/howtos-en\\\/what-exactly-are-containers\\\/\",\"name\":\"What exactly are containers? - credativ\u00ae\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/howtos-en\\\/what-exactly-are-containers\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/howtos-en\\\/what-exactly-are-containers\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.credativ.de\\\/wp-content\\\/uploads\\\/2020\\\/05\\\/Was-sind-eigentlich-Container-Header.jpg\",\"datePublished\":\"2020-05-28T07:11:09+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/howtos-en\\\/what-exactly-are-containers\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/howtos-en\\\/what-exactly-are-containers\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/howtos-en\\\/what-exactly-are-containers\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.credativ.de\\\/wp-content\\\/uploads\\\/2020\\\/05\\\/Was-sind-eigentlich-Container-Header.jpg\",\"contentUrl\":\"https:\\\/\\\/www.credativ.de\\\/wp-content\\\/uploads\\\/2020\\\/05\\\/Was-sind-eigentlich-Container-Header.jpg\",\"width\":2500,\"height\":300,\"caption\":\"Was sind eigentlich Container Header\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/howtos-en\\\/what-exactly-are-containers\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"What exactly are containers?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/#website\",\"url\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/\",\"name\":\"credativ GmbH\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Organization\",\"Place\"],\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/#organization\",\"name\":\"credativ\u00ae\",\"url\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/\",\"logo\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/howtos-en\\\/what-exactly-are-containers\\\/#local-main-organization-logo\"},\"image\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/howtos-en\\\/what-exactly-are-containers\\\/#local-main-organization-logo\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/credativDE\\\/\",\"https:\\\/\\\/x.com\\\/credativde\",\"https:\\\/\\\/mastodon.social\\\/@credativde\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/credativ-gmbh\",\"https:\\\/\\\/www.instagram.com\\\/credativ\\\/\"],\"description\":\"Die credativ GmbH ist ein f\u00fchrendes, auf Open Source Software spezialisiertes IT-Dienstleistungs- und Beratungsunternehmen. Wir bieten umfassende und professionelle Services, von Beratung und Infrastruktur-Betrieb \u00fcber 24\\\/7 Support bis hin zu individuellen L\u00f6sungen und Schulungen. Unser Fokus liegt auf dem ganzheitlichen Management von gesch\u00e4ftskritischen Open-Source-Systemen, darunter Betriebssysteme (z.B. Linux), Datenbanken (z.B. PostgreSQL), Konfigurationsmanagement (z.B. Ansible, Puppet) und Virtualisierung. Als engagierter Teil der Open-Source-Community unterst\u00fctzen wir unsere Kunden dabei, die Vorteile freier Software sicher, stabil und effizient in ihrer IT-Umgebung zu nutzen.\",\"legalName\":\"credativ GmbH\",\"foundingDate\":\"2025-03-01\",\"duns\":\"316387060\",\"numberOfEmployees\":{\"@type\":\"QuantitativeValue\",\"minValue\":\"11\",\"maxValue\":\"50\"},\"address\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/howtos-en\\\/what-exactly-are-containers\\\/#local-main-place-address\"},\"geo\":{\"@type\":\"GeoCoordinates\",\"latitude\":\"51.1732374\",\"longitude\":\"6.392010099999999\"},\"telephone\":[\"+4921619174200\",\"08002733284\"],\"contactPoint\":{\"@type\":\"ContactPoint\",\"telephone\":\"08002733284\",\"email\":\"vertrieb@credativ.de\"},\"openingHoursSpecification\":[{\"@type\":\"OpeningHoursSpecification\",\"dayOfWeek\":[\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\"],\"opens\":\"09:00\",\"closes\":\"17:00\"},{\"@type\":\"OpeningHoursSpecification\",\"dayOfWeek\":[\"Saturday\",\"Sunday\"],\"opens\":\"00:00\",\"closes\":\"00:00\"}],\"email\":\"info@credativ.de\",\"areaServed\":\"D-A-CH\",\"vatID\":\"DE452151696\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/#\\\/schema\\\/person\\\/d9c2f6fe13bb2c8573516cda677594fe\",\"name\":\"Danilo Endesfelder\",\"description\":\"Danilo ist seit 2016 Berater bei der credativ GmbH. Sein fachlicher Fokus liegt bei Containertechnologien wie Kubernetes, Podman, Docker und deren \u00d6kosystem. Au\u00dferdem hat er Erfahrung mit Projekten und Schulungen im Bereich RDBMS (MySQL\\\/Mariadb und PostgreSQL\u00ae). Seit 2015 ist er ebenfalls im Organisationsteam der deutschen PostgreSQL\u00ae Konferenz PGConf.DE.\"},{\"@type\":\"PostalAddress\",\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/howtos-en\\\/what-exactly-are-containers\\\/#local-main-place-address\",\"streetAddress\":\"Hennes-Weisweiler-Allee 23\",\"addressLocality\":\"M\u00f6nchengladbach\",\"postalCode\":\"41179\",\"addressRegion\":\"Deutschland\",\"addressCountry\":\"DE\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/howtos-en\\\/what-exactly-are-containers\\\/#local-main-organization-logo\",\"url\":\"https:\\\/\\\/www.credativ.de\\\/wp-content\\\/uploads\\\/2025\\\/04\\\/credativ-logo-right.svg\",\"contentUrl\":\"https:\\\/\\\/www.credativ.de\\\/wp-content\\\/uploads\\\/2025\\\/04\\\/credativ-logo-right.svg\",\"caption\":\"credativ\u00ae\"}]}<\/script>\n<meta name=\"geo.placename\" content=\"M\u00f6nchengladbach\" \/>\n<meta name=\"geo.position\" content=\"51.1732374;6.392010099999999\" \/>\n<meta name=\"geo.region\" content=\"Germany\" \/>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"What exactly are containers? - credativ\u00ae","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.credativ.de\/en\/blog\/howtos-en\/what-exactly-are-containers\/","og_locale":"en_US","og_type":"article","og_title":"What exactly are containers?","og_description":"For some time now, a large part of the IT landscape has been talking only about &#8220;containers&#8221;, &#8220;microservices&#8221; and &#8220;Kubernetes.&#8221; But what exactly are containers and what technical basis are they based on? General Simply put, a container is an isolated runtime environment for processes. There are various areas that can be separated &#8211; the [&hellip;]","og_url":"https:\/\/www.credativ.de\/en\/blog\/howtos-en\/what-exactly-are-containers\/","og_site_name":"credativ\u00ae","article_publisher":"https:\/\/www.facebook.com\/credativDE\/","article_published_time":"2020-05-28T07:11:09+00:00","og_image":[{"width":2500,"height":300,"url":"https:\/\/www.credativ.de\/wp-content\/uploads\/2020\/05\/Was-sind-eigentlich-Container-Header.jpg","type":"image\/jpeg"}],"author":"Danilo Endesfelder","twitter_card":"summary_large_image","twitter_creator":"@credativde","twitter_site":"@credativde","twitter_misc":{"Written by":"Danilo Endesfelder","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.credativ.de\/en\/blog\/howtos-en\/what-exactly-are-containers\/#article","isPartOf":{"@id":"https:\/\/www.credativ.de\/en\/blog\/howtos-en\/what-exactly-are-containers\/"},"author":{"name":"Danilo Endesfelder","@id":"https:\/\/www.credativ.de\/en\/#\/schema\/person\/d9c2f6fe13bb2c8573516cda677594fe"},"headline":"What exactly are containers?","datePublished":"2020-05-28T07:11:09+00:00","mainEntityOfPage":{"@id":"https:\/\/www.credativ.de\/en\/blog\/howtos-en\/what-exactly-are-containers\/"},"wordCount":905,"commentCount":0,"publisher":{"@id":"https:\/\/www.credativ.de\/en\/#organization"},"image":{"@id":"https:\/\/www.credativ.de\/en\/blog\/howtos-en\/what-exactly-are-containers\/#primaryimage"},"thumbnailUrl":"https:\/\/www.credativ.de\/wp-content\/uploads\/2020\/05\/Was-sind-eigentlich-Container-Header.jpg","keywords":["Container","Docker","Kubernetes"],"articleSection":["HowTos"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.credativ.de\/en\/blog\/howtos-en\/what-exactly-are-containers\/#respond"]}],"copyrightYear":"2020","copyrightHolder":{"@id":"https:\/\/www.credativ.de\/#organization"}},{"@type":"WebPage","@id":"https:\/\/www.credativ.de\/en\/blog\/howtos-en\/what-exactly-are-containers\/","url":"https:\/\/www.credativ.de\/en\/blog\/howtos-en\/what-exactly-are-containers\/","name":"What exactly are containers? - credativ\u00ae","isPartOf":{"@id":"https:\/\/www.credativ.de\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.credativ.de\/en\/blog\/howtos-en\/what-exactly-are-containers\/#primaryimage"},"image":{"@id":"https:\/\/www.credativ.de\/en\/blog\/howtos-en\/what-exactly-are-containers\/#primaryimage"},"thumbnailUrl":"https:\/\/www.credativ.de\/wp-content\/uploads\/2020\/05\/Was-sind-eigentlich-Container-Header.jpg","datePublished":"2020-05-28T07:11:09+00:00","breadcrumb":{"@id":"https:\/\/www.credativ.de\/en\/blog\/howtos-en\/what-exactly-are-containers\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.credativ.de\/en\/blog\/howtos-en\/what-exactly-are-containers\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.credativ.de\/en\/blog\/howtos-en\/what-exactly-are-containers\/#primaryimage","url":"https:\/\/www.credativ.de\/wp-content\/uploads\/2020\/05\/Was-sind-eigentlich-Container-Header.jpg","contentUrl":"https:\/\/www.credativ.de\/wp-content\/uploads\/2020\/05\/Was-sind-eigentlich-Container-Header.jpg","width":2500,"height":300,"caption":"Was sind eigentlich Container Header"},{"@type":"BreadcrumbList","@id":"https:\/\/www.credativ.de\/en\/blog\/howtos-en\/what-exactly-are-containers\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.credativ.de\/en\/"},{"@type":"ListItem","position":2,"name":"What exactly are containers?"}]},{"@type":"WebSite","@id":"https:\/\/www.credativ.de\/en\/#website","url":"https:\/\/www.credativ.de\/en\/","name":"credativ GmbH","description":"","publisher":{"@id":"https:\/\/www.credativ.de\/en\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.credativ.de\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Organization","Place"],"@id":"https:\/\/www.credativ.de\/en\/#organization","name":"credativ\u00ae","url":"https:\/\/www.credativ.de\/en\/","logo":{"@id":"https:\/\/www.credativ.de\/en\/blog\/howtos-en\/what-exactly-are-containers\/#local-main-organization-logo"},"image":{"@id":"https:\/\/www.credativ.de\/en\/blog\/howtos-en\/what-exactly-are-containers\/#local-main-organization-logo"},"sameAs":["https:\/\/www.facebook.com\/credativDE\/","https:\/\/x.com\/credativde","https:\/\/mastodon.social\/@credativde","https:\/\/www.linkedin.com\/company\/credativ-gmbh","https:\/\/www.instagram.com\/credativ\/"],"description":"Die credativ GmbH ist ein f\u00fchrendes, auf Open Source Software spezialisiertes IT-Dienstleistungs- und Beratungsunternehmen. Wir bieten umfassende und professionelle Services, von Beratung und Infrastruktur-Betrieb \u00fcber 24\/7 Support bis hin zu individuellen L\u00f6sungen und Schulungen. Unser Fokus liegt auf dem ganzheitlichen Management von gesch\u00e4ftskritischen Open-Source-Systemen, darunter Betriebssysteme (z.B. Linux), Datenbanken (z.B. PostgreSQL), Konfigurationsmanagement (z.B. Ansible, Puppet) und Virtualisierung. Als engagierter Teil der Open-Source-Community unterst\u00fctzen wir unsere Kunden dabei, die Vorteile freier Software sicher, stabil und effizient in ihrer IT-Umgebung zu nutzen.","legalName":"credativ GmbH","foundingDate":"2025-03-01","duns":"316387060","numberOfEmployees":{"@type":"QuantitativeValue","minValue":"11","maxValue":"50"},"address":{"@id":"https:\/\/www.credativ.de\/en\/blog\/howtos-en\/what-exactly-are-containers\/#local-main-place-address"},"geo":{"@type":"GeoCoordinates","latitude":"51.1732374","longitude":"6.392010099999999"},"telephone":["+4921619174200","08002733284"],"contactPoint":{"@type":"ContactPoint","telephone":"08002733284","email":"vertrieb@credativ.de"},"openingHoursSpecification":[{"@type":"OpeningHoursSpecification","dayOfWeek":["Monday","Tuesday","Wednesday","Thursday","Friday"],"opens":"09:00","closes":"17:00"},{"@type":"OpeningHoursSpecification","dayOfWeek":["Saturday","Sunday"],"opens":"00:00","closes":"00:00"}],"email":"info@credativ.de","areaServed":"D-A-CH","vatID":"DE452151696"},{"@type":"Person","@id":"https:\/\/www.credativ.de\/en\/#\/schema\/person\/d9c2f6fe13bb2c8573516cda677594fe","name":"Danilo Endesfelder","description":"Danilo ist seit 2016 Berater bei der credativ GmbH. Sein fachlicher Fokus liegt bei Containertechnologien wie Kubernetes, Podman, Docker und deren \u00d6kosystem. Au\u00dferdem hat er Erfahrung mit Projekten und Schulungen im Bereich RDBMS (MySQL\/Mariadb und PostgreSQL\u00ae). Seit 2015 ist er ebenfalls im Organisationsteam der deutschen PostgreSQL\u00ae Konferenz PGConf.DE."},{"@type":"PostalAddress","@id":"https:\/\/www.credativ.de\/en\/blog\/howtos-en\/what-exactly-are-containers\/#local-main-place-address","streetAddress":"Hennes-Weisweiler-Allee 23","addressLocality":"M\u00f6nchengladbach","postalCode":"41179","addressRegion":"Deutschland","addressCountry":"DE"},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.credativ.de\/en\/blog\/howtos-en\/what-exactly-are-containers\/#local-main-organization-logo","url":"https:\/\/www.credativ.de\/wp-content\/uploads\/2025\/04\/credativ-logo-right.svg","contentUrl":"https:\/\/www.credativ.de\/wp-content\/uploads\/2025\/04\/credativ-logo-right.svg","caption":"credativ\u00ae"}]},"geo.placename":"M\u00f6nchengladbach","geo.position":{"lat":"51.1732374","long":"6.392010099999999"},"geo.region":"Germany"},"_links":{"self":[{"href":"https:\/\/www.credativ.de\/en\/wp-json\/wp\/v2\/posts\/11932","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.credativ.de\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.credativ.de\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.credativ.de\/en\/wp-json\/wp\/v2\/users\/21"}],"replies":[{"embeddable":true,"href":"https:\/\/www.credativ.de\/en\/wp-json\/wp\/v2\/comments?post=11932"}],"version-history":[{"count":0,"href":"https:\/\/www.credativ.de\/en\/wp-json\/wp\/v2\/posts\/11932\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.credativ.de\/en\/wp-json\/wp\/v2\/media\/5110"}],"wp:attachment":[{"href":"https:\/\/www.credativ.de\/en\/wp-json\/wp\/v2\/media?parent=11932"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.credativ.de\/en\/wp-json\/wp\/v2\/categories?post=11932"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.credativ.de\/en\/wp-json\/wp\/v2\/tags?post=11932"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}