Skip to content
Snippets Groups Projects
Commit a1b8bff5 authored by Armin Co's avatar Armin Co
Browse files

Initial contaienr and docker description.

parent 8516d8e9
No related branches found
No related tags found
No related merge requests found
File added
% docker-container.tex - Small introduction into docker
% Copyright (C) 2020 Armin Co
%
% This document is free software: you can redistribute it and/or
% modify it either under the terms of the Creative Commons
% Attribution-ShareAlike 3.0 License, or under the terms of the
% GNU General Public License as published by the Free Software
% Foundation, either version 3 of the License, or (at your option)
% any later version.
%
% This document is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
% GNU General Public License for more details.
%
% You should have received a copy of the GNU General Public License
% along with this document. If not, see <http://www.gnu.org/licenses/>.
%
% You should have received a copy of the Creative Commons
% Attribution-ShareAlike 3.0 Unported License along with this
% document. If not, see <http://creativecommons.org/licenses/>.
\documentclass[12pt, a4paper]{article}
\usepackage{pgscript}
\setcounter{secnumdepth}{0}
\newcommand{\mylicense}{CC-by-sa (Verision 3.0) oder GNU GPL (Version 3 oder höher)}
\newenvironment{bibcomment}{% found at: https://tex.stackexchange.com/questions/133475/how-to-add-running-text-between-bibliography-items
\item[]\begingroup\par\parshape0\em
}{%
\par\endgroup
}
\begin{document}
\makebox(0,0.005)[tl]{\includegraphics[scale=0.72]{logo-hochschule-bochum-cvh-text-v2.pdf}}\hfill
\makebox(0,0)[tr]{ \includegraphics[scale=0.5]{logo-hochschule-bochum.pdf}}
\par\bigskip\bigskip
\begin{center}
\Large
Einführung
\par\smallskip
\Huge\textbf{Docker \& Container}
\par\medskip
\Large
für Online-Werkzeuge und Entwicklungsumgebungen
\end{center}
Die Begriffe Docker und Container werden häufig verwendet.
Docker ist hierbei wohl der geläufigere Begriff.
Sie werden durchaus auch zusammen oder synonym als Docker-Container verwendet.
Weshalb dies jedoch nicht richtig ist, soll im Folgenden erläutert werden.
Um erklären zu können was Docker ist, muss zunächst ein Verständnis dafür geschaffen werden, was ein Container ist.
\section{Container}
\emph{\glqq A container is a standard unit of software delivery that allows engineering teams to ship software reliably and automatically.\grqq}
\cite{padok: what is a container}
Aus diesem Satz lassen sich mehrere Eigenschaften eines Containers ableiten: \\
Ein Container \dots
\begin{itemize}
\item wird dazu verwendet Software auszuliefern.
\item unterliegt gewissen Standards.
\item erhöht Zuverlässigkeit.
\item ermöglicht Automatisierung.
\end{itemize}
Die einzelnen Punkte lassen sich noch besser verstehen,
wenn man einen Blick auf die technischen Details wirft, die einen Container ausmachen.
Ein Container setzt sich aus drei ihm zugrundeliegenden Technologien zusammen,
den Namespaces\cite{man-pages: namespaces}, Control Groups\cite{kernel: cgroups} und Union-File-Systems\cite{Unionfs: website}. \cite{docker-docs: underlying-technology}
Zusammen ergeben sie einen Container, dessen Format von der OCI\footnote{
\emph{\glqq Die Open-Container-Initiative ist ein Projekt der Linux-Foundation,
um offene Standards für Container zu definieren.\grqq} \cite{wiki: oci}}
definiert wird.
Dies dient dazu, dass verschiedene Werkzeuge und die Container zu einander kompatibel sind.
Namespaces und Control Groups sind beide Feature des Linux-Kernels, wurden jedoch unabhängig voneinander entwickelt und sind nicht nur für Container verwendbar.
\begin{description}
\item[Namespaces] \cite{wiki: namespaces}
Namespaces sind ein Feature des Linux-Kernels, welches die Ressourcen des Kernels aufteilt,
sodass eine Gruppe von Prozessen ein Set von Ressourcen sieht,
während eine andere Gruppe von Prozessen ein anderes Set an Ressourcen sieht.
Dies funktioniert, indem die Ressourcen und Prozesse in einem Namespace zusammengefasst werden,
die Namespaces beziehen sich dabei eigenständige Ressourcen.
Folgende Arten von Systemressourcen können von Namespaces abstrahiert werden:
\begin{itemize}
\item Cgroup - Cgroup root directory
\item IPC - System V IPC, POSIX message queues
\item Network - Network devices, stacks, ports, etc.
\item Mount - Mount points
\item PID - Process IDs
\item Time - Boot and monotonic clocks
\item User - User and group IDs
\item UTS - Hostname and NIS, domain name
\end{itemize}
\emph{\glqq A namespace wraps a global system resource in an abstraction that
makes it appear to the processes within the namespace that they have
their own isolated instance of the global resource. Changes to the
global resource are visible to other processes that are members of
the namespace, but are invisible to other processes. One use of
namespaces is to implement containers.\grqq} \cite{man-pages: namespaces}
\item[Cgroups]
Control Groups (cgroups) sind ebenfalls ein Kernel-Feature. Es dient dazu die Nutzung von Ressourcen (CPU, RAM, disk I/O, etc.) für eine Gruppe von Prozessen zu limitieren und isolieren. \cite{wiki: cgroups}
Darüber hinaus kännen mit Cgroups Prozesse hierarchisch organisiert werden, sodass eine Baumstruktur an Prozessen ensteht, wobei jeder Prozess nur einer Cgroup angehört. Somit gehören auch alle Threads eines Prozesses zu einer Cgroup. \cite{kernel: cgroups}
Weiterführender Artikel auf LWN.net zu \glqq Process containers\grqq \cite{lwn.net: process containers}
\item[Union-File-Systems]
Ein Union-File-System stellt ein Dateisystem dar, indem es Verzeichnisse und Dateien in Branches gruppiert.
Diese Branches können übereinander gestapelt werden, sodass mehrere Layer entstehen.
Auf diese Art werden Images für Container erstellt.
Teilen Images für Container die selbe Basis (die selben Layer), müssen diese nicht neu angelegt werden,
sondern existieren als Referenz.
Für den Einsatz mit Containern wird dabei das Copy-on-Write Prinzip verwendet.
Das bedeutet, dass beim Start eines Containers keine Dateine geladen oder kopiert werden müssen.
Soll eine Datei geändert werden, dann wird diese Datei kopiert und die Änderung in der Kopie vorgenommen.
Hierzu werden leere read-write Layer für jeden Layer des Images angelegt, die Änderungen finden in diesen Layern statt.
Die Kopie verdeckt anschlißend die Referenz in dem Image. \cite{gtibooks: docker}
Die Images für Container können sehr klein sein, da sich mehrere Images das selbe Base-Image (z.B. mit einem Debian Betriebsystem) teilen. Nur die Änderungen und Ergenzungen für das neuen Image benötigen zusätzlichen Speicher.\cite{wiki: unionfs}
\end{description}
\section{Docker}
Wie bereits einleitend erwähnt baut Docker auf diesen Technologien auf.
Docker ist ein Werkzeug mit dem diese verwendet und verwaltet werden können,
sodass sie zusammen als Container verwendet werden können.
\emph{\dots Fortsetzung folgt}
\begin{thebibliography}{}
\begin{bibcomment}
Die Online Quellen beziehen sich auf den Stand im Mai 2020.
\end{bibcomment}
\bibitem{padok: what is a container}
From Docker to OCI: What is a container?
\emph{Padok - Busser Arthur} \\
\url{https://www.padok.fr/en/blog/container-docker-oci}
\bibitem{wiki: oci}
Wikipedia:
\emph{Open Container Initiative (OCI)}\\
\url{https://en.wikipedia.org/wiki/Open_Container_Initiative}
\bibitem{docker-docs: underlying-technology}
Docker Docs:
\emph{The underlying technology}\\
\url{https://docs.docker.com/get-started/overview/#the-underlying-technology}
\bibitem{man-pages: namespaces}
Linux Programmers's Manual:
\emph{namespaces - overview of Linux namespaces}\\
\url{http://man7.org/linux/man-pages/man7/namespaces.7.html}
\bibitem{kernel: cgroups}
Kernel:
\emph{Control Group v2}\\
\url{https://www.kernel.org/doc/Documentation/cgroup-v2.txt}
\bibitem{Unionfs: website}
Unionfs:
\emph{A Stackable Unification File System}\\
\url{https://unionfs.filesystems.org/}
\bibitem{wiki: namespaces}
Wikipedia:
\emph{Linux namespaces}\\
\url{https://en.wikipedia.org/wiki/Linux_namespaces}
\bibitem{wiki: cgroups}
Wikipedia:
\emph{cgroups}\\
\url{https://en.wikipedia.org/wiki/Cgroups}
\bibitem{lwn.net: process containers}
LWN.net:
\emph{Process containers}\\
\url{https://lwn.net/Articles/236038/}
\bibitem{gtibooks: docker}
washraf:
\emph{Union File Systems}\\
\url{https://washraf.gitbooks.io/the-docker-ecosystem/content/Chapter%201/Section%203/union_file_system.html}
\bibitem{wiki: unionfs}
Wikipedia:
\emph{UnionFS}\\
\url{https://en.wikipedia.org/wiki/UnionFS}
\end{thebibliography}
\end{document}}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment