Kontenery w Linux Jakub Pieńkowski jakski@sealcode.org 10 maja, 2016 Jakub Pieńkowski jakski@sealcode.org Kontenery w Linux 10 maja, 2016 1 / 26
Czym są kontenery? Definicja Czym są kontenery? Jakub Pieńkowski jakski@sealcode.org Kontenery w Linux 10 maja, 2016 2 / 26
Czym są kontenery? Definicja Kernel space & user space By Shmuel Csaba Otto Traian, CC BY-SA 3.0, https://commons.wikimedia.org/w/index.php?curid=31368855 Jakub Pieńkowski jakski@sealcode.org Kontenery w Linux 10 maja, 2016 3 / 26
Czym są kontenery? Definicja Struktura systemu Programy użytkowe Mozilla Firefox, LibreOffice, Nautilus, Bash... Niskopoziomowe komponenty daemony systemowe, menedżery okien, biblioteki systemowe Biblioteka standardowa C dostarcza środowisko do działania aplikacji użytkowych oraz bibliotek. Służy jako interfejs pomiędzy aplikacjami a zawołaniami systemowymi Kernel jądro systemu odpowiedzialne za bezpośrednie interakcje z hardwarem. Obsługuje m.in. zawołania systemowe, sterowniki, zarządzanie pamięcią... Jakub Pieńkowski jakski@sealcode.org Kontenery w Linux 10 maja, 2016 4 / 26
Czym są kontenery? Porównanie Jakub Pieńkowski jakski@sealcode.org Kontenery w Linux 10 maja, 2016 5 / 26
Czym są kontenery? Porównanie Bezpieczeństwo Jakub Pieńkowski jakski@sealcode.org Kontenery w Linux 10 maja, 2016 6 / 26
Namespaces Definicja i typy namespaces Implementacja kontenerów w Linux Jakub Pieńkowski jakski@sealcode.org Kontenery w Linux 10 maja, 2016 7 / 26
Namespaces Definicja i typy namespaces Dostępne namespaces IPC komunikacja między procesami Network urządzenia sieciowe, porty etc. Mount system plików PID identyfikatory procesów User identyfikatory użytkowników i ich grup UTS nazwa hosta Jakub Pieńkowski jakski@sealcode.org Kontenery w Linux 10 maja, 2016 8 / 26
Namespaces Zarządzanie namespaces Zawołania systemowe umożliwiające kontrolę nad namespaces unshare przenosi proces do nowo utworzonych namespaces clone tworzy nowy proces i przenosi go do nowych namespaces setns dołącza proces do już istniejącej namespace Jakub Pieńkowski jakski@sealcode.org Kontenery w Linux 10 maja, 2016 9 / 26
Zastosowania Firejail https://github.com/netblue30/firejail Jakub Pieńkowski jakski@sealcode.org Kontenery w Linux 10 maja, 2016 10 / 26
Zastosowania Firejail https://github.com/netblue30/firejail LXC https://linuxcontainers.org/ Jakub Pieńkowski jakski@sealcode.org Kontenery w Linux 10 maja, 2016 11 / 26
Zastosowania Firejail https://github.com/netblue30/firejail LXC https://linuxcontainers.org/ Docker https://www.docker.com/ Jakub Pieńkowski jakski@sealcode.org Kontenery w Linux 10 maja, 2016 12 / 26
Zastosowania Składanie aplikacji z mikroserwisów https://hub.docker.com/ Jakub Pieńkowski jakski@sealcode.org Kontenery w Linux 10 maja, 2016 13 / 26
Docker Architektura Docker Jakub Pieńkowski jakski@sealcode.org Kontenery w Linux 10 maja, 2016 14 / 26
Docker Obrazy Czym w Docker jest obraz? Jakub Pieńkowski jakski@sealcode.org Kontenery w Linux 10 maja, 2016 15 / 26
Docker Obrazy System plików Meta dane obrazu Konfiguracja wolumenów pamięci masowej Konfiguracja portów Instrukcje budujące Użytkownik używany do uruchamiania kontenera Jakub Pieńkowski jakski@sealcode.org Kontenery w Linux 10 maja, 2016 16 / 26
Docker Obrazy Dockerfiles $> docker build -t sealious. FROM node:latest MAINTAINER Sealcode <development@sealcode.org> # Sealious installation directory ENV SEALIOUS_PREFIX /var/sealious-build # index.js and app files. Remember to adjust run script after modifying this ENV DOC_ROOT /var/sealious # Sealious development stage to install ENV SEALIOUS_STAGE alpha WORKDIR $SEALIOUS_PREFIX # install Sealious RUN wget -qo- https://raw.githubusercontent.com/sealious/sealious/alpha/dev-setup.sh sh -s $SEALIOUS_STAGE # setup Runit RUN apt-get update && apt-get install --yes runit COPY runsvdir-start /usr/local/sbin/runsvdir-start COPY sealious /etc/service/sealious # set permissions on init script and service files RUN chown -R root:root /usr/local/sbin/runsvdir-start /etc/service/sealious/ && chmod -R 755 /usr/local/sbin/runsvdir-start /etc/service/sealious/ VOLUME $DOC_ROOT ENTRYPOINT ["/usr/local/sbin/runsvdir-start"] Jakub Pieńkowski jakski@sealcode.org Kontenery w Linux 10 maja, 2016 17 / 26
Docker Obrazy Obrazy i warstwy Jakub Pieńkowski jakski@sealcode.org Kontenery w Linux 10 maja, 2016 18 / 26
Docker Obrazy Jakub Pieńkowski jakski@sealcode.org Kontenery w Linux 10 maja, 2016 19 / 26
Docker Przechowywanie danych aplikacji Wolumeny danych Jakub Pieńkowski jakski@sealcode.org Kontenery w Linux 10 maja, 2016 20 / 26
Docker Przechowywanie danych aplikacji Kontenery do grupowania wolumenów $> docker create -v /var/www -v /var/data/db -v /home/oracle debian $> docker run -d volumes-from <id_kontenera> debian Jakub Pieńkowski jakski@sealcode.org Kontenery w Linux 10 maja, 2016 21 / 26
Docker Łączenie kontenerów Sposoby na łączenie ze sobą kontenerów bridge lokalny interfejs tworzony na potrzeby kontenerów overlay wirtualna sieć złożona z wielu hostów gniazda odsłanianie gniazd przy pomocy zapory lub wolumenów Jakub Pieńkowski jakski@sealcode.org Kontenery w Linux 10 maja, 2016 22 / 26
Docker Łączenie kontenerów Łączenie gniazdami UNIX-owymi Jakub Pieńkowski jakski@sealcode.org Kontenery w Linux 10 maja, 2016 23 / 26
Narzędzia Docker Swarm https://docs.docker.com/swarm/ Docker Compose https://docs.docker.com/compose/ CoreOS https://coreos.com/ Jakub Pieńkowski jakski@sealcode.org Kontenery w Linux 10 maja, 2016 24 / 26
Koniec https://forum.sealcode.org/ Jakub Pieńkowski jakski@sealcode.org Kontenery w Linux 10 maja, 2016 25 / 26
Koniec Dziękuję za uwagę! :) Jakub Pieńkowski jakski@sealcode.org Kontenery w Linux 10 maja, 2016 26 / 26