container technologie Save the whales. Collect the whole set! Oscar Buse 11 April 2017 Linux User Group Nijmegen

Vergelijkbare documenten
kubernetes It compiles, ship it! Oscar Buse 13 februari 2018 Linux User Group Nijmegen

CONTAINERIZATION OF APPLICATIONS WITH MICROSOFT AZURE PAAS SERVICES

Virtualisatie. en KVM. Oscar Buse 14 februari 2017 NLUG

noun a person employed in a port to load and unload ships.

Ubuntu Release Party XTG 11/23/12 1

Keynote. Innovatiedag. November Opleidingen Consultancy Detachering Remote Services

Workshop Git. multiplayer notepad. Anthony Clays 21 november /30

Een infra DevOps CI/CD straat

1 Installatie van de server... 2

Elastic Search wat heb je aan data als je er niets mee doet.. Oscar Buse 11 juli 2017 Linux User Group Nijmegen

ISW Presents Debian Homeserver Workshop

De kracht van de blueprint Het middelpunt van het Software Defined Data Center

Virtualizatie bij SIN

Serverless Java met Fn

Inhoud Inleiding en terminologie Lastig? Configuratie Werkwijze en tooling Referenties. SELinux. Oscar Buse 9 juni 2015 NLUG.

Droom of werkelijkheid? Integratie VMware NSX en F5 zorgt voor effectieve uitrol van applicaties.

Adding value to test tooling

Adding value to test tooling

Van Hanzestad naar wereldhaven. Lunchlezing Thalia Topicus ~ Kenneth Veenstra

Elastic Search wat heb je aan data als je er niets mee doet.. Oscar Buse 17 maart 2018 Nederlandse Linux Gebruikers Groep

How To: Setup MGE Network Shutdown Module V3 op het service console binnen VMware ESX 3.0.2

Installatie Handleiding - Multispectraal V.W1.0

Chapter 4. eenvoudige webserver opzetten

Document. Name: Systemhound 2007 Getting started guide. Created: Roel van Baaren Raxco Software 7 April Revisions:

een nieuwe manier voor het bouwen, inpakken en uitrollen van applicaties

vra + NSX and it all comes together

Upgrade van Oracle 10g naar 11g

Studietaak 5 Hoe installeer ik software? ProFTPD FTP-Server

Aandachtspunten voor installatie suse in vmware server

API...1 Identificatie...1 Opties...2 Acties...3 Webserver...6 Heartbeat...6 Buffer groottes...8

Weblogic 10.3 vs IAS

Continuous testing in DevOps met Test Automation

Software Defined Datacenter Visie van Cisco. Erwin uit de Bos Datacenter Strategie Specialist NL Versie: 5 februari 2015

IT Galaxy 2018 ON THE RIGHT TRACK ON THE RIGHT TRACK #PQRITG18 #PQRITG18

Standard Parts Installatie Solid Edge ST3

MySQL Server Installatie Handleiding RETSOFT ARCHIEF EXPERT VERSIE Versie: v

WFS 3.0 De geo-api van de toekomst. Linda van den Brink, Geonovum 13 februari #DataToBuildOn

Cloud werkplek anno Cloud werkplek anno 2014

Linux Quickstart Cygwin via HTTP

Connect.Me. meten = weten!.eu

Basis UNIX commando's - overzicht

Stappen om EduVPN te activeren:

Unix Console Gebruik

Agenda. Over KPN en de relatie tot Docker Contains paradigma De uitdagingen De benefits Vragen. 2 The good, the bad and the containers

Automagisch installeren van OES en SLES. Frank Korpershoek Jeroen Bannink

Technische architectuur Beschrijving

Praktijk en practices

XAMPP Web Development omgeving opzetten onder Windows.

Handleiding NodeMCU. Handleiding NodeMCU l Pagina 1

VMware View 4.5 een overview. Eline Klooster Technical Trainer

Linux Quickstart Cygwin

Raspberry Pi Plex server installeren

Cloud Computing. Bart van Dijk

Handleiding integratie CF iviewer CT-iViewer

Opmerkingen kan je mailen naar: A. Kouters: A. Steijlen: Versie Datum Opmerkingen

Viktor van den Berg. Xpert Training Group VMware Authorized Training Center Citrix Authorized Learning Center Microsoft CPLS Eigen datacenter

Raspberry Pi VPN-server. Auteur: Ger Stok

Windows Basics. yvan vander sanden. 22 februari 2015

HOW TO RESTORE A SYSTEM IMAGE IN WINDOWS SERVER 2012

Huiswerk Linux: installatie mod_auth_pam

INSTALLATIE EXCHANGE CONNECTOR

OpenX Hosting. Opties en Alternatieven

Network Automation en Orchestration

Onder de motorkap van Microsoft Azure Web Sites. Eelco Koster Software architect ORDINA

Avaya IP Office release 8.0 update

Docker in de praktijk

Integratie in de praktijk

NL VMUG UserCon March

Installeer Apache2: Landstede februari 2009 versie 3 1 Bertil Hoentjen

Les 4 Installeren Apache2 Php MySQL

Multi user Setup. Firebird database op een windows (server)

DEVOPS kickstarter. van idee naar productie in Azure! 1 / 21

Pijlers van Beheer. Bram van der Vos

DOCKER & CONFIGURATIEMANAGEMENT. Docker Meetup

Van Big Data tot waardevolle informatie op maat van de (interne)gebruiker en de burger

Hoge beschikbaarheid bij Lips Textielservices Johan Westerduin, Transfer Solutions

Technische Specificaties nieuwe Unix Applikaties

Onderzoeksnetwerk via Linux

Configureren van een VPN L2TP/IPSEC verbinding

CI CD met containers. Waar zitten de benefits. Leo Root Programmamanager SSC-I Stavorenweg PT Gouda

HiveIO Fabric Technical Overview

Wat is een unattended install?

Secure Application Roles

Developers vs... (Dev, biz & tech) Harmen de Ruiter. Stichting An Meaisín Dénártha

Korte uitleg: Mounten van filesystemen

Werkplekbeheer en kantoorautomatisering Examennummer: Datum: 24 maart 2012 Tijd: 13:00 uur - 14:30 uur

Connect.Me. meten = weten!.eu

Data Protectie in een gevirtualiseerde omgeving.

Op de Virtual Appliance is MySQL voorgeïnstalleerd. MySQL is momenteel de meest gebruikte database op het internet.

Insecurities within automatic update systems

Technote. EnGenius Senao EOM Mesh Layer 2 configuratie Transparant netwerk

Singularity. Uit de wereld van de rekenclusters. Handleiding van Helpmij.nl. Auteur: Erik98

Kosten factoren in Azure

SURFcumulus. Informatiebijeenkomst 16 maart 2017

INFITT01 - Internettechnologie WEEK 8

Computer vanop afstand overnemen via Extern Bureaublad.

Configureren van een VPN L2TP/IPSEC verbinding. In combinatie met:

Open Enterprise Server 2 en vsphere Best Practises. Michael Wilmsen

DB architectuur.

Transcriptie:

container technologie Save the whales. Collect the whole set! Oscar Buse 11 April 2017 Linux User Group Nijmegen

Inleiding Dit praatje gaat over docker: een Linux container technologie. De onderwerpen die aan bod komen: Waarom docker? Wat is docker? Installatie. De docker omgeving. Images, layers en containers.. Enkele praktijk voorbeelden I. Enkele veel gebruikte commando s. cgroups en namespaces. Praktijk voorbeeld 4. Linking containers Troubleshooting. Uploaden van je container/image naar een repository. De voor- en nadelen van docker. Best practices slide 1 van 20

Waarom docker? Op mijn development omgeving werkt alles prima! Docker: build once, run anywhere Kleine footprint en mede daardoor: goed schaalbaar. snelle startup. In een zeer versimpelde weergave: slide 2 van 20

Wat is docker? 1/2 Zomaar wat eigenschappen van docker containers: Vrij nieuw: 15/03/2013. Flink groeiende user-base. Container technologie (denk aan OpenVZ, LXC, Solaris zones,...) Denk meer aan een single proces dan aan een VM. Verspreidbare (software) eenheid voor elke omgeving (als er maar een docker daemon runt). Handig voor software workflows (OTAP). Build once, run anywhere. Vluchtig: meer geschikt voor een kortdurend bestaan (maar hoeft niet). Bv. volstrekt normaal om docker eenmalig een extern reguest te laten doen (later meer). Meer geschikt voor stateless applicaties. slide 3 van 20

Wat is docker? 2/2 Goed voor microservices (grote applicatie opgedeeld in kleinere delen (microservices)). Zuinig met diskruimte: images worden geshared. Snelle startup (voor bv. bijschakelen resources (denk bv. aan extra webservers)). Een image voor iedere toepassing (in de repositories). slide 4 van 20

Installatie Docker heeft zijn eigen repository voor het package docker-engine. Voor bv. CentOS: # yum install -y yum-utils # yum-config-manager --add-repo \ https://docs.docker.com/engine/installation/linux/repo_files/centos/docker.repo Daarna: install, update (downgrade) docker vanuit de repositorie: # yum install docker-engine (alternatief: curl -ssl httpd://get.docker.com sh) Test bv. met docker run hello-world slide 5 van 20

De docker omgeving Een overzicht: dockerd - de docker daemon docker - de cli remote API repositories met docker images (hub.docker.com) compose, machine (voor docker hosts), swarm, k8s (orchestration, volgende keer). slide 6 van 20

Images, layers en containers.. 1/2 Voordat we een praktijkvoorbeeld zien eerst wat meer over images, layers en containers..: image layers container Filesysteem als read-only basis voor een container. Bestaat uit meerdere (ook read-only) layers. Distributable unit. Filesysteem verandering in een image. De docker storage engine combineert meerdere layers tot 1 view (filesysteem) met union mounting. Docker image met een dunne schrijfbare laag toegevoegd. slide 7 van 20

Images, layers en containers.. 2/2 Sharen van image layers: zuinig mbt diskusage, performance winst. Copy-on-Write (CoW) toegepast. Vóór versie 1.10: layers en images opgeslagen met random UUID. Nadelen hiervan: - slechte data integriteit (geen checksums). Vanaf v1.10 sha256 voor layers en images. - kans op dubbele ID s. slide 8 van 20

cgroups en namespaces Docker maakt gebruik van cgroups en namespaces: cgroups namespaces Limit resources. iedere container eigen cgroup (onder /sys filesystem). Gelijke namen mogelijk door isolatie van de namespace. Enkele voorbeelden: mount namespace (bv. / in container!= / in host!= / in andere container) PID namespace Netwerk namespace - (bv. port 80 in container!= port 80 on host) User namespace - root heeft bv. wel eigen namespace maar ja.. slide 9 van 20

Enkele praktijk voorbeelden I Algemene werkwijze met docker containers: build (maak een image mbv een Dockerfile) docker build -t voorbeeld/mijn_image. run (= create + start container van image) docker run voorbeeld/mijn_image Voorbeeld 1: Hello world Voorbeeld 2: Een random quote Voorbeeld 3: Nog een random quote (https://github.com/oscarbuse/quote-web) slide 10 van 20

Enkele veel gebruikte commando s Maken/Verkrijgen van een image: Custom mbv Dockerfile : # docker build Downloaden met: # docker pull Enkele commando s: docker version (tegenwoordig in YY.MM format (monthly release cycle)) docker info less docker build -t example/quote-web. docker pull <image van reposotory> docker run -d -m 500m --rm --read-only --name quote-web \ -p 8081:8080 example/quote-web docker images docker ps docker stop <CONTAINER\_ID/NAME> (stop container) docker stop $(docker ps -a -q) (stop alle containers) docker rm <CONTAINER\_ID/NAME> (remove container) docker rmi <IMAGE\_ID> (remove image) docker exec -it quote-web /bin/bash (krijg een shell in de container quote-web ) slide 11 van 20

Praktijk voorbeeld 4 Voorbeeld 4: 2 containers in een apart subnet (https://github.com/oscarbuse/hours). Enkele commando s: docker network create --subnet=172.18.0.0/16 hours-net docker network ls (toont alle netwerken) docker run -d --net hours-net --ip 172.18.0.3 -p 8010:8080\ --name web oscarbuse/hours-web docker run -d --net hours-net --ip 172.18.0.2 --name db\ -v /var/lib/mysql:/var/lib/mysql example/hours-db slide 12 van 20

Linking containers Containers zijn eenvoudig te linken door naar de naam te verwijzen. Je hoeft dan geen eigen subnet te creëeren. Een voorbeeld van een Wordpress container gelinkt met een MySQL database container: docker pull wordpress:latest docker pull mysql:latest docker run --name mysqlwp -e MYSQL_ROOT_PASSWORD=changeme -d mysql docker run --name wordpress --link mysqlwp:mysql -p 8080:80 -d wordpress docker ps Met joomla: docker pull joomla:latest docker run --name joomla --link mysqlwp:mysql -p 8081:80 -d joomla docker ps slide 13 van 20

Troubleshooting docker logs <CONTAINER\_ID/NAME> docker exec -it <CONTAINER\_ID/NAME> bash docker inspect <CONTAINER\_ID/NAME> docker stats (monitoring) docker events docker diff (handig voor read-only maken) docker volume prune (opruimen, bespaar diskruimte) Monitor je containers. Verschillende tools mogelijk: cadvisor (geen alerting) Prometheus (wel alerting) Scout, Datadog (hosted, wel alerting, kost geld)... Waarschijnlijk goed om de monitoring te integeren in een gemanagede container omgeving (volgende keer meer). slide 14 van 20

Up/downloaden van je container/image naar een repository. docker login docker push oscarbuse/hours-web docker pull oscarbuse/hours-web Bij een gewijzigde container eerst: docker commit <container_id/name> <image name> slide 15 van 20

Voordelen + Geen dependency issues ("but it worked on my development environment..??"). + Geen conflicten, isolatie van software. + Makkelijk OTAP mogelijk. + Lichtgewicht, lage overhead. + CLI (docker) en web API. + Meer richting een immutable omgeving. CM (Configuration Management) groeit in complexiteit. + Goed te gebruiken als virtualisatie op virtualisatie: bv. docker containers in een kvm guest. Of in een aws/google omgeving. + grote userbase, veel standaard tooling. + Goede integratie met andere tooling (voor CI/CD) slide 16 van 20

Nadelen - Security.. dockerd is (extra) root proces. root in container <-> root op host (..): alleen scheiding door gebruik van namespaces. Dit kun je opvangen door de docker daemon te starten met userns-remap=default: # cat << EOF >> /etc/systemd/system/docker.service.d/user [Service] ExecStart= ExecStart=/usr/bin/dockerd --userns-remap=default -H fd:// EOF # systemctl daemon-reload # systemctl restart docker.service Creert wel nieuwe images! Zorg dat processen in de container niet als root runnen. Run dockerd in een dedicated VM. - Docker bepaald eigenschappen van de container tijdens het bouwen. Het monitort/managed niet. - Ongebruikte images/volumes kan veel zijn en dient opgeruimd te worden. - Docker daemon alleen voor Linux. - Minder geschikt voor stateful applicaties (bv. databases). - Default geen limiet op resources. - Té dominant? slide 17 van 20

Best practices pas op met latest. pas op met apt-get update (duurt lang). beperk container interactie (focus op container interactie onderling). denk aan patching/upgrading van de base images. pas read-only toe waar mogelijk. gebruik TLS voor remote connectie met de docker daemon. focus op stateless. hou het simpel (iedere container specifieke taak, containers combineren met linking). monitor. slide 18 van 20

Referenties https://www.google.com https://www.docker.com https://docs.docker.com https://www.digitalocean.com/community/ tutorials/ how-to-install-and-use-docker-on-ubuntu-16-04 https://hub.docker.com Voorbeeld 3: https://github.com/oscarbuse/quote-web Voorbeeld 4: https://github.com/oscarbuse/hours slide 19 van 20

Vragen? Bier? slide 20 van 20