Geen resultaten gevonden

Uw zoekopdracht heeft geen resultaten opgeleverd.

We raden u aan het volgende te proberen om te vinden wat u zoekt:

  • Controleer de spelling van het trefwoord in uw zoekopdracht.
  • Gebruik synoniemen voor het trefwoord dat u hebt getypt. Probeer bijvoorbeeld “applicatie” in plaats van “software”.
  • Probeer een van de onderstaande populaire zoekopdrachten.
  • Start een nieuwe zoekopdracht.
Populaire vragen

Docker-containers en Container Cloud Services

Een container is een verpakkingsformaat waarin alle codes en afhankelijkheden van een applicatie worden verpakt in een standaardformaat waardoor die container snel en betrouwbaar in verschillende computeromgevingen kan worden uitgevoerd. Een Docker-container is een populaire lichtgewicht, stand-alone, uitvoerbare container die alles bevat wat nodig is om een applicatie uit te voeren, inclusief libraries, systeemtools, code en runtime. Docker is ook een softwareplatform waarmee ontwikkelaars snel containerapplicaties kunnen bouwen, testen en implementeren.

Containers as a Service (CaaS) of Container Services zijn beheerde cloudservices die de levenscyclus van containers beheren. Containerservices helpen bij het orkestreren (starten, stoppen, schalen) van de runtime van containers. Met containerservices kunt u de levenscyclus van uw applicatieontwikkeling en implementatie vereenvoudigen, automatiseren en versnellen.

Docker en Container Services zijn snel omarmd en zijn de afgelopen jaren een klinkend succes geweest. Docker is van een bijna onbekende en nogal technische open source-technologie in 2013 uitgegroeid tot een gestandaardiseerde runtime-omgeving die nu officieel wordt ondersteund voor veel Oracle Enterprise-producten.

Wie gebruikt Docker?

Docker is een open framework voor het ontwikkelen van applicaties dat is ontworpen ten behoeve van DevOps en ontwikkelaars. Met Docker kunnen ontwikkelaars eenvoudig applicaties bouwen, verpakken, verzenden en uitvoeren als lichtgewicht, overdraagbare, zelfvoorzienende containers die vrijwel overal kunnen worden uitgevoerd. Ontwikkelaars kunnen met containers een applicatie met al de afhankelijkheden van die applicatie verpakken en als een enkele eenheid implementeren. Door vooraf gebouwde en zichzelf onderhoudende applicatiecontainers te bieden, kunnen ontwikkelaars zich concentreren op de applicatiecode en het gebruik ervan zonder zich zorgen te hoeven maken over het onderliggende besturingssysteem of implementatiesysteem.

Bovendien kunnen ontwikkelaars profiteren van duizenden open source-containerapplicaties die al zijn ontworpen om in een Docker-container te worden uitgevoerd. Voor DevOps-teams leent Docker zich voor continue integratie en toolchains voor ontwikkelingen en vermindert de beperkingen en complexiteit die nodig zijn binnen hun systeemarchitectuur, om de applicaties te implementeren en te beheren. Met de introductie van cloudservices voor containerorganisatie kan elke ontwikkelaar lokaal in zijn of haar ontwikkelomgeving containerapplicaties ontwikkelen en deze containerapplicaties vervolgens verplaatsen en uitvoeren in een productie op cloudservices, zoals beheerde Kubernetes-services.

Docker versus Kubernetes

Linux-containers zijn er al sinds 2008, maar kregen pas bekendheid door de opkomst van Docker-containers in 2013 waardoor er ineens een enorme belangstelling ontstond voor het ontwikkelen en implementeren van containerapplicaties. Naarmate het aantal containerapplicaties groeide tot honderden containers die op meerdere servers werden geïmplementeerd, werd het gebruik ervan complexer. Hoe coördineert, schaalt, beheert en plant u honderden containers? Hier kan Kubernetes van pas komen. Kubernetes is een open source-orkestratiesysteem waarmee u uw Docker-containers en workloads kunt uitvoeren. Het helpt u bij het beheren van de operationele complexiteit bij het schalen van meerdere containers die op meerdere servers zijn geïmplementeerd. De Kubernetes-engine orkestreert automatisch de levenscyclus van de container en verdeelt de applicatiecontainers over de hostinginfrastructuur. Met Kubernetes kunnen afhankelijk van de vraag bronnen snel worden op- en afgeschaald. De status van de containers kan zo doorlopend worden aangegeven, gepland, verwijderd en gemonitord.

Basisbeginselen van Docker

De kernconcepten van Docker zijn images en containers. Een Docker-image bevat alles wat nodig is om uw software uit te voeren, namelijk de code, een runtime (bijvoorbeeld Java Virtual Machine (JVM)), stuurprogramma's, tools, scripts, libraries, implementaties en meer.

Een Docker-container is een actieve instance van een Docker-image. In tegenstelling tot traditionele virtualisatie met een type 1- of type 2-hypervisor draait een Docker-container echter op de kernel van het hostbesturingssysteem. Binnen een Docker-image is er geen afzonderlijk besturingssysteem, zoals aangegeven in afbeelding 1.

Basisprincipes van Docker-image
Afbeelding 1

Isolatie versus virtualisatie

Elke Docker-container heeft zijn eigen bestandssysteem, zijn eigen netwerkstack (en dus zijn eigen IP-adres), zijn eigen procesruimte en gedefinieerde bronbeperkingen voor CPU en geheugen. Omdat bij een Docker-container geen besturingssysteem hoeft te worden opgestart, start deze container direct op. Bij Docker gaat het om isolatie, d.w.z. het scheiden van de bronnen van een hostbesturingssysteem, in tegenstelling tot virtualisatie, d.w.z. het aanbieden van een gastbesturingssysteem boven op het hostbesturingssysteem.

VM versus Kubernetes - Infrastructuur voor implementatie
Image van het incrementele bestandssysteem
Afbeelding 2

Incrementeel bestandssysteem

Het bestandssysteem van een Docker-image is gelaagd, met semantiek voor kopiëren bij schrijven. Dit maakt overname en hergebruik mogelijk, bespaart bronnen op schijf en maakt incrementeel downloaden van images mogelijk.

Zoals in afbeelding 2 zou een Docker-image met een WebLogic-implementatie kunnen zijn gebaseerd op een image met een Oracle WebLogic Server-domein, die zou kunnen zijn gebaseerd op een WebLogic-image, die weer is gebaseerd op een JDK-image (Java Development Kit), die op zijn beurt is gebaseerd op een Oracle Linux-basisimage.

Docker Registry

Hoewel Docker-images eenvoudig te bouwen zijn en ontwikkelaars gecharmeerd zijn van de eenvoud en overdraagbaarheid van Docker-images, ontdekten ze al snel dat het beheren van duizenden Docker-images lastig is. Docker Registry lost dit op. Docker Registry is een standaardmanier voor het opslaan en distribueren van Docker-images. Het Registry is een op open source gebaseerde opslagplaats onder de toegestane Apache-licentie.

Docker Registry helpt ook de toegangscontrole en beveiliging van de Docker-images die op de opslagplaats ervan worden opgeslagen, te verbeteren. Het beheert de distributie van images en kan ook worden geïntegreerd met workflows voor applicatieontwikkeling. Ontwikkelaars kunnen hun eigen Docker Registry opzetten of een gehoste Docker Registry-service gebruiken, zoals Docker Hub, Oracle Container Registry, Azure Container Registry, enzovoort.

Docker Hub is een gehoste Docker Registry die wordt beheerd door Docker. Docker Hub heeft meer dan 100.000 containerimages van softwareleveranciers, open source-projecten en de community. Docker Hub bevat software en applicaties uit officiële opslagplaatsen, zoals NGINX, Logstash, Apache HTTP, Grafana, MySQL, Ubuntu en Oracle Linux.

Bij het starten van een container wordt door Docker standaard automatisch de bijbehorende image uit de openbare Docker Hub opgehaald als die lokaal niet beschikbaar is. Tevens kunt u ook uw eigen images maken en deze naar Docker Hub in een openbare opslagplaats of in een privéopslagplaats pushen.

Afbeelding 3: een screenshot van Docker Registry
Afbeelding 3

Docker als een microservices-runtime

Het concept om monolithische applicaties op te splitsen in kleinere brokken microservices is tegenwoordig zeer interessant voor softwareontwikkelaars.

Microservices worden onafhankelijk ingezet als een proces, gebruiken lichtgewicht protocollen om met elkaar te communiceren en elke service bezit de eigen data [7]. Omdat microservices een gedecentraliseerde governance-aanpak volgen, zijn daarvoor een vrij hoge mate van infrastructuurautomatisering, geautomatiseerd testen, volledig geautomatiseerde CD-pijplijnen en bekwame, flexibele DevOps-teams nodig.

Er is nog veel discussie over deze architecturale stijl, maar het zou naïef zijn om te denken dat een applicatie die is opgesplitst in microservices, eenvoudig kan worden beheerd als een reeks processen. Om maar een paar vereisten te noemen: een microservice moet hostonafhankelijk zijn en worden geïsoleerd op besturingssysteemniveau. De service moet binnen de ingestelde bronlimieten worden uitgevoerd, op en af worden geschaald, opnieuw worden opgestart als dit niet is gelukt, en via een softwaregedefinieerde netwerklaag worden verkend en verbonden met andere microservices.

Daarom is het uitvoeren van een microservice in een Docker-container een uitstekend begin om het merendeel van deze doelen te bereiken.

Docker—Twee belangrijke aspecten

Docker verandert op twee verschillende vlakken de manier waarop we software bouwen, leveren en uitvoeren:

  • Het verbetert het proces om applicaties van ontwikkeling tot productie betrouwbaar te krijgen.
  • Docker biedt een standaard imageformaat om van on-premises naar de cloud te gaan.

Beide aspecten worden in de volgende paragrafen verder uitgelegd.

Docker-image—Van ontwikkeling tot productie

Het maken van een Docker-image met alle afhankelijkheden lost het probleem "maar het werkte voor mij op mijn ontwikkelmachine" op. Het belangrijkste idee is dat een Docker-image automatisch wordt gemaakt door een build-pijplijn uit een opslagplaats met een broncode zoals Git, en in eerste instantie wordt getest in een ontwikkelomgeving. Deze onveranderlijke image wordt vervolgens opgeslagen in een Docker-register.

Zoals weergegeven in afbeelding 4, wordt dezelfde image gebruikt voor verdere belastingstests, integratietests, acceptatietests en meer. Dezelfde image wordt in elke omgeving gebruikt. Kleine maar noodzakelijke omgevingsspecifieke verschillen, zoals een JDBC-URL voor een productiedatabase, kunnen als omgevingsvariabelen of bestanden in de container worden ingevoerd.

Screenshot van Docker-image
Afbeelding 4

Uit de statistieken blijkt dat 65% van alle huidige Docker-gebruiksscenario's wordt gebruikt door ontwikkelaars en dat 48% Docker gebruikt voor continue integratie [5].

Van on-premises naar de cloud

Docker heeft het vooroordeel tegen public clouds weggenomen. Enerzijds is er met een Docker-image voor het eerst in de geschiedenis een algemeen pakketformaat dat zowel on-premises als bij elke grote cloudprovider kan worden uitgevoerd. Docker-containers worden op dezelfde manier uitgevoerd op mijn laptop als in Oracle Cloud.

Anderzijds worden Docker-containers in elke grote public cloud uitgevoerd en leveren zo een belangrijke bijdrage aan het overwinnen van een langdurig vooroordeel tegen public clouds: lock-in van provider. Elke grote cloudprovider biedt Docker nu aan als een PaaS.

Docker-versies—Looptijd van onderliggende technologie

Het tempo van Docker-releases is veel sneller dan de releasecyclus van de traditionele zakelijke software. Soms roept het enorme tempo van Docker-releases, samen met het nieuwe van het Docker-project, vragen op over de beveiliging en stabiliteit van Docker.

Hoewel Docker en de opdrachtregel ervan, de Docker-daemon, de API ervan en tools, zoals Docker Swarm, Docker Machine en Docker Compose, pas de afgelopen drie jaar verder zijn ontwikkeld, zijn de onderliggende kernelfuncties al bijna tien jaar in elke Linux-kernel beschikbaar.

Een bekend voorbeeld van een early adopter van containertechnologie is Google. Google gebruikte al Linux-containers voordat Docker er was. Bovendien kan Google alles uitvoeren in een container. Naar schatting start Google 2 miljard containers per week [3].

Geschiedenis van cgroups en naamruimten

De onderliggende Linux-kernelfuncties die door Docker worden gebruikt, zijn cgroups en naamruimten. In 2008 werd cgroups geïntroduceerd in de Linux-kernel op basis van werk dat eerder was gedaan door ontwikkelaars van Google [1]. Cgroups beperkt en houdt rekening met het bronnengebruik van een reeks processen van het besturingssysteem.

De Linux-kernel gebruikt een naamruimte voor het isoleren van de systeembronnen van de processen. De eerste naamruimte, dat wil zeggen de mount-naamruimte, werd al in 2002 geïntroduceerd.

Container Cloud Services

In het eerste gedeelte van dit artikel werden enkele belangrijke Docker-concepten uitgelegd. In een productieomgeving is het echter niet voldoende om een applicatie eenvoudigweg in een Docker-container uit te voeren.

Voor het instellen en exploiteren van een productieomgeving is hardware voor het uitvoeren van de containers nodig. Software zoals Docker, tezamen met opslagplaats- en clustermanagers, moet worden geïnstalleerd, geüpgraded en gepatcht. Als meerdere Docker-containers tussen hosts communiceren, moet er eerst een netwerk worden aangemaakt. Geclusterde containers moeten opnieuw worden gestart als ze niet konden worden gestart. Bovendien moet een set aan elkaar gekoppelde containers net zo gemakkelijk kunnen worden geïmplementeerd als een enkele logische applicatie-instance. Een voorbeeld hiervan zijn een load balancer, enkele webservers, enkele Oracle WebLogic Server-instanties met een beheerserver, een beheerde server en een database. Voor het op schaal beheren van containerapplicaties is een containerorkestratiesysteem zoals Kubernetes of Docker Swarm nodig. Het implementeren, beheren en gebruiken van orkestratiesystemen zoals Kubernetes kan lastig en tijdrovend zijn.

Om het voor ontwikkelaars gemakkelijker en efficiënter te maken om containerapplicaties te ontwikkelen, bieden cloudproviders Container Cloud Services of Containers as a Service (CaaS) aan. Met Container Cloud Services kunnen ontwikkelaars en operationele teams de levenscyclus van containers op geautomatiseerde wijze stroomlijnen en beheren. Deze orkestratieservices, doorgaans gebouwd met Kubernetes, maken het voor DevOps-teams gemakkelijker om containerapplicaties op schaal te beheren en te gebruiken. Oracle Container Engine for Kubernetes en Azure Kubernetes Service zijn twee voorbeelden van populaire, beheerde cloudservices met containerorkestratie.

Oracle Container Engine for Kubernetes is een volledig beheerde, schaalbare en zeer toegankelijke service waarmee u uw containerapplicaties in de cloud kunt implementeren. Gebruik Container Engine for Kubernetes (soms afgekort tot OKE) wanneer uw ontwikkelteam op betrouwbare wijze cloud-native applicaties wil bouwen, implementeren en beheren.

Docker-images van Oracle—Hieronder vindt u enkele bronnen voor het verkrijgen of bouwen van Docker-images voor Oracle-producten. De Oracle GitHub-opslagplaats voor Docker-images bevat Dockerfiles en voorbeelden om Docker-images te bouwen voor commerciële producten van Oracle en door Oracle gesponsorde open source-projecten.

Docker-praktijktraining—Ontwikkeling in containers met Docker

Referenties

  1. Cgroups (Wikipedia)
  2. Linux-naamruimten (Wikipedia)
  3. ALLES bij Google draait in een container, door Jack Clark
  4. Docker Hub bereikt 5 miljard pulls
  5. Evolutie van de moderne softwarematige supply chain, Docker-enquête 2016
  6. MOS-document-ID 2216342.1: Docker-ondersteuning voor Oracle DB
  7. Microservices, door Martin Fowler
  8. Oracle Container Engine en registerdemo (3:13)
  9. Documentatie over Container Engine for Kubernetes