mirror of
https://github.com/erkules/container-bauen.git
synced 2025-11-08 23:14:01 +01:00
init
This commit is contained in:
commit
e0412a0ceb
177
README.md
Normal file
177
README.md
Normal file
@ -0,0 +1,177 @@
|
||||
# Ich
|
||||
|
||||
erkan@linsenraum.de
|
||||
@erkuleswastaken
|
||||
xing/linkedin
|
||||
https://devops-training.de/
|
||||
https://devops-kubernetes-camp.de/
|
||||
|
||||
Und ja: Freiberufler
|
||||
|
||||
|
||||
# Ziel
|
||||
|
||||
* Docker/LXC/systemd-nspawn/Rkt
|
||||
* Alles nur Linux
|
||||
* Jeder gute Admin sollte eh alles kennen was jetzt kommt.
|
||||
|
||||
# Container vs. VM
|
||||
|
||||
* VMs eumulieren Hardware
|
||||
* Ein Container ist nur ein Prozess auf dem Host
|
||||
* Was immer das auch heißt
|
||||
|
||||
|
||||
# Docker
|
||||
|
||||
Was haben wir?
|
||||
|
||||
Ist doch wie eine VM
|
||||
|
||||
~~~
|
||||
docker container run --rm -ti --name vorlage ubuntu
|
||||
~~~
|
||||
|
||||
* Prozessraum
|
||||
* Prozesse
|
||||
* Filesystem
|
||||
|
||||
# Filesystem? chroot!
|
||||
|
||||
~~~
|
||||
mkdir /tmp/container
|
||||
docker container export vorlage | tar xf - -C /tmp/container
|
||||
~~~
|
||||
|
||||
Warum wollte ich?:
|
||||
|
||||
~~~
|
||||
chroot /tmp/container zsh
|
||||
~~~
|
||||
|
||||
Problem mit chroot?
|
||||
|
||||
Wir haben quasi keine Isolierung `¯\_(ツ)_/¯`
|
||||
|
||||
# Namspaces
|
||||
|
||||
Genereeller Überblick:
|
||||
|
||||
~~~
|
||||
readlink /proc/self/ns/*
|
||||
~~~
|
||||
|
||||
Schauen wir uns das erst mal ohne
|
||||
chroot an.
|
||||
Aber am Ende:
|
||||
|
||||
Imho noch ein `pstree` mitlaufen lassen:
|
||||
|
||||
~~~
|
||||
unshare -p -f -m -u -n -i
|
||||
chroot /tmp/container
|
||||
ps ax .. und ein Hups
|
||||
~~~
|
||||
|
||||
Genau das machen was da steht.
|
||||
|
||||
Und schauen ob andere Prozess was in /tmp/container/proc sehen :)
|
||||
|
||||
# Mount
|
||||
|
||||
Wo wir schon bei Mount sind.
|
||||
|
||||
~~~
|
||||
docker container run --volume /var/tmp:/srv --rm -ti ubuntu
|
||||
~~~
|
||||
|
||||
* Oben beim /proc haben wir ja schon einen mount gesehen.
|
||||
* Hier ist es genau so nur *vor* dem chroot
|
||||
* Und ja nach dem unshare damit sonst niemand den mount mitbekommt \o/
|
||||
|
||||
# Cgroups
|
||||
|
||||
Am Beispiel pids (limit)
|
||||
|
||||
~~~
|
||||
docker container run --rm -ti --pids-limit 5 ubuntu
|
||||
~~~
|
||||
|
||||
Achso: wieder ein `pstree` mitlaufen lassen :)
|
||||
|
||||
~~~
|
||||
mkdir /sys/fs/cgroup/pids/lala
|
||||
echo 5 >/sys/fs/cgroup/pids/lala/pids.max
|
||||
echo $$ >/sys/fs/cgroup/pids/lala/tasks
|
||||
besser?
|
||||
echo ContainerPid >/sys/fs/cgroup/pids/lala/tasks
|
||||
~~~
|
||||
|
||||
|
||||
# Artefakt
|
||||
|
||||
Aber jeder Container schreibt doch ein einen eigenen Layer
|
||||
|
||||
~~~
|
||||
docker container run --rm -d --name www erkules/nginxhostname
|
||||
docker container ps -s -f name=www
|
||||
~~~
|
||||
|
||||
Gleich 2x
|
||||
|
||||
~~~
|
||||
mkdir /tmp/upper1 /tmp/work1 /tmp/runningcontainer1
|
||||
|
||||
mount -t overlay overlay -o lowerdir=/tmp/container,upperdir=/tmp/upper1,workdir=/tmp/work1 /tmp/runningcontainer1
|
||||
~~~
|
||||
~~~
|
||||
mkdir /tmp/upper2 /tmp/work2 /tmp/runningcontainer2
|
||||
mount -t overlay overlay -o lowerdir=/tmp/container,upperdir=/tmp/upper2,workdir=/tmp/work2 /tmp/runningcontainer2
|
||||
~~~
|
||||
|
||||
|
||||
dd
|
||||
|
||||
:
|
||||
|
||||
# Netzwerk?
|
||||
|
||||
FYI: Das ist jetzt total abgedreht!
|
||||
|
||||
FYI: `ip netns` macht auch nur `unshare` `¯\_(ツ)_/¯`
|
||||
|
||||
Vielleicht statt <<ContainerPID>> irgend ein `unshare -n`?
|
||||
|
||||
Oder wir haben pstree noch am Laufen ...
|
||||
|
||||
|
||||
|
||||
~~~
|
||||
mkdir /var/run/netns <- Falls nicht vorhanden. Braucht iproute2
|
||||
ln -s /proc/<<ContainerPID>>/ns/net /var/run/netns/hallo
|
||||
ip netns exec hallo ip a s
|
||||
ip link add hostende type veth peer name containerende
|
||||
ip link set containerende netns hallo
|
||||
ip netns exec hallo ip a s
|
||||
ip netns exec jax ip link set containerende up
|
||||
ip netns exec jax ip a add 172.40.1.1/26 dev containerende
|
||||
ip link set hostende up
|
||||
ip a add 172.40.1.2/26 dev hostende
|
||||
~~~
|
||||
|
||||
Pingt ...
|
||||
|
||||
aber noch lange nicht fertig ... ;)
|
||||
|
||||
|
||||
# nsenter
|
||||
|
||||
Haben wir noch Zeit?
|
||||
|
||||
Und wenn schon!
|
||||
|
||||
|
||||
# Conclusio
|
||||
|
||||
* Wir haben die ganz Zeit *einen* Prozess geändert
|
||||
* Von wegen VM :)
|
||||
Loading…
x
Reference in New Issue
Block a user