Containerisatie heeft fundamenteel veranderd hoe bedrijven bouwen, schip, en run toepassingen. Docker stelde de standaard voor verpakkingssoftware in lichtgewicht, draagbare containers, terwijl OpenShift, Red Hat's onderneming Kubernetes platform, biedt de orkestratie, beveiliging, en ontwikkelaar tooling nodig om die containers op schaal te draaien. Samen, Docker en OpenShift vormen een robuuste basis voor enterprise container orkestratie, waardoor teams te automatiseren implementatie, hybride omgevingen te beheren en software levering te versnellen. Dit artikel biedt een complete gids voor het gebruik van Docker met OpenShift, die integratie, implementatie stappen, voordelen, en de beste praktijken voor productie-omgevingen.

Begrijpen van Docker en Containerisatie

Docker is meer dan alleen een tool . Het is een platform voor het ontwikkelen, verschepen en draaien van toepassingen binnen containers. Containers bundelen een toepassing met zijn afhankelijkheden (bibraries, configuratiebestanden, binaire bestanden) in een enkele gestandaardiseerde eenheid. Dit zorgt ervoor dat de toepassing zich consistent gedraagt over ontwikkeling, enscenering, en productie-omgevingen, waardoor het elimineren van de klassieke "het werkt op mijn machine" probleem.

In de kern van Docker is de Docker Engine, een runtime die containers beheert op een host besturingssysteem. Docker maakt gebruik van een client-server architectuur waar de Docker client communiceert met de Docker daemon om containers te bouwen, uitvoeren en beheren. Afbeeldingen, gedefinieerd door Dockerfiles, dienen als alleen-lezen sjablonen die gelaagd zijn voor efficiëntie. Wanneer een container wordt gestart, wordt een beschrijfbare laag toegevoegd aan de bovenkant van de afbeelding. Deze gelaagdheid maakt snelle implementatie, versiebeheer en eenvoudige rollbacks mogelijk.

Voor bedrijven biedt Docker verschillende kritische mogelijkheden:

  • Isolatie: Elke container draait in zijn eigen geïsoleerde gebruikersruimte, waardoor de beveiliging en de controle van de hulpbronnen worden verbeterd.
  • Portabiliteit: Containers draaien op elk besturingssysteem dat Docker ondersteunt, inclusief Linux, Windows en macOS, en in elke omgeving (on-premises, cloud, hybride).
  • Efficiency: Containers delen de kernel van het hostbesturingssysteem, wat resulteert in een aanzienlijk lagere overhead dan virtuele machines.
  • Snelle iteratie: Ontwikkelaars kunnen snel containertoepassingen bouwen, testen en implementeren, die continue integratie en continue levering (CI/CD) workflows ondersteunen.

Docker alleen is echter niet voldoende voor het beheer van honderden of duizenden containers over een cluster van machines. Dat is waar orkestratie komt, en OpenShift biedt een enterprise-grade oplossing gebouwd op Kubernetes.

OpenShift: Enterprise Kubernetes Platform

OpenShift is de distributie van Red Hat van Kubernetes, verbeterd met extra functies die de behoeften van IT-operaties, ontwikkelaars en beveiligingsteams tegemoet komen. Terwijl Kubernetes de basis orkestratielaag .scheduling containers, schaalopzet, het beheer van netwerken en opslag .OpenShift wraps het met ontwikkelaar-vriendelijke tools, een webconsole, ingebouwde CI / cd-functies, en geharde beveiligingsstandaarden.

De belangrijkste componenten van OpenShift zijn:

  • Bron-naar-beeld (S2I): Een hulpmiddel dat automatisch containerbeelden van broncode bouwt zonder een Dockerbestand te vereisen, hoewel het ook aangepaste Dockerbestanden volledig ondersteunt.
  • Geïntegreerd register: OpenShift bevat een intern container image register voor het opslaan en beheren van afbeeldingen, waardoor het vertrouwen op externe registers wordt verminderd.
  • Routing en netwerking: OpenShift beheert het instroomverkeer met een ingebouwde HAProxy router en levert interne DNS en service ontdekking.
  • Beveiligingscontextbeperkingen (SCC's): Deze vervangen Kubernetes Pod Security Policies, die korrelige controle bieden over wat containers kunnen doen (bijvoorbeeld als root, toegang tot host resources).
  • Ontwikkelaarsconsole: Een web-UI die de implementatie, monitoring en beheer van toepassingen vereenvoudigt.
  • OperatorHub: Een catalogus van operators voor het automatiseren van complexe toepassing levenscyclusbeheer.

OpenShift is ontworpen voor bedrijven die multi-tenancy, compliance en hoge beschikbaarheid vereisen. Het integreert met LDAP, Active Directory en andere identiteitsproviders. Het biedt ook ingebouwde monitoring en logging via Prometheus, Grafana, en Elasticsearch/Fluentd/Kibana stacks.

Integratie van Docker met OpenShift

Het gebruik van Docker met OpenShift is eenvoudig omdat OpenShift is gebouwd op Kubernetes en native begrijpt containerbeelden. De integratie gebeurt op verschillende niveaus: het bouwen van afbeeldingen, het opslaan van afbeeldingen, en het implementeren van werklast.

Afbeeldingen bouwen

Ontwikkelaars hebben twee primaire manieren om containerbeelden te maken voor OpenShift:

  • Dockerfile builds: Schrijf een Dockerfile, gebruik dan het OpenShift build systeem of de Docker CLI om een afbeelding te bouwen. OpenShift kan Docker builds uitvoeren in het cluster met behulp van een build configuratie die verwijst naar een Dockerfile. Deze methode geeft volledige controle over de afbeeldingslagen.
  • Bron-naar-beeld (S2I): S2I is een kader dat de broncode van de toepassing inbrengt en in een basisafbeelding injecteert die de runtime bevat. Bijvoorbeeld, een Node.js-app kan worden gebouwd door OpenShift naar een Git-repository te wijzen; OpenShift zal de juiste S2I-builderafbeelding trekken, de code compileren en automatisch een containerafbeelding aanmaken. Er is geen Dockerbestand nodig, hoewel het eindresultaat een standaard Docker-afbeelding is.

Beide benaderingen produceren beelden die zijn opgeslagen in een intern of extern containerregister. OpenShift's ingebouwde register is gebaseerd op het Docker Registry v2 protocol, dus het is volledig compatibel met Docker clients.

Afbeeldingen opslaan

Na het bouwen worden beelden naar een register geduwd dat toegankelijk is door de OpenShift cluster. Het interne register is de eenvoudigste optie voor strak geïntegreerde implementaties. Als alternatief kunnen teams externe registers gebruiken zoals Docker Hub, Quay.io, Amazon ECR of Google Container Register. OpenShift kan afbeeldingen uit elk register halen die het standaard container image protocol ondersteunt. Voor gevoelige omgevingen kan het interne register geconfigureerd worden met persistente opslag, TLS en authenticatie.

Werkbelasting in werking stellen

Zodra een afbeelding beschikbaar is, is het implementeren van het op OpenShift een kwestie van het creëren van een Kubernetes resource zoals een implementatie, implementatieconfig (OpenShift-specifiek), of Pod. De OpenShift web console of CLI () vereenvoudigt dit proces. Ontwikkelaars kunnen de "Deploy Image" wizard gebruiken om een afbeelding te selecteren uit het register, omgevingsvariabelen, resourcelimieten te specificeren en de toepassing via een route bloot te stellen.

Stap-voor-stap: Een Docker Container inzetten op OpenShift

Laten we een complete implementatie cyclus doorlopen, van het schrijven van een Dockerfile tot het blootleggen van de applicatie extern.

Stap 1: Een Docker-afbeelding maken

Schrijf een Dockerfile voor uw toepassing. Voorbeeld voor een eenvoudige Python webapp:

FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY app.py .
EXPOSE 8080
CMD ["python", "app.py"]

De afbeelding lokaal bouwen met

Stap 2: Druk op een register

Tag en duw de afbeelding naar het interne register van OpenShift. Eerst log je in op het register van je Docker-client:

docker login -u $(oc whoami) -p $(oc whoami -t) default-route-openshift-image-registry.<cluster-domain>

Tag en push:

docker tag my-python-app:1.0 default-route-openshift-image-registry.<cluster-domain>/<project-name>/my-python-app:1.0
docker push default-route-openshift-image-registry.<cluster-domain>/<project-name>/my-python-app:1.0

Stap 3: Inzetten op OpenShift

Gebruik van de CLI:

oc new-app my-python-app:1.0 --name=my-app --as-deployment-config

Of maak handmatig een implementatie via YAML:

apiVersion: apps/v1
kind: Deployment
metadata:
 name: my-app
spec:
 replicas: 3
 selector:
 matchLabels:
 app: my-app
 template:
 metadata:
 labels:
 app: my-app
 spec:
 containers:
 - image: default-route-openshift-image-registry.<cluster-domain>/<project>/my-python-app:1.0
 name: my-app
 ports:
 - containerPort: 8080

Aanbrengen met .

Stap 4: De toepassing tonen

Maak een service en een route om de app extern toegankelijk te maken:

oc expose deployment my-app --port=8080
oc expose service my-app

De route biedt een publieke URL. OpenShift's router behandelt TLS-afgifte en load balancing.

Stap 5: Scalebeheer

Schaal het aantal replica's dynamisch:

oc scale deployment my-app --replicas=5

Of stel automatisch scales in met behulp van HorizontalPodAutoscaler.

Voordelen van het gebruik van Docker met OpenShift

Portabiliteit en consistentie

Docker-afbeeldingen zijn onveranderlijke artefacten die de runtime-omgeving inkapselen. Wanneer deze op OpenShift worden ingezet, draaien die beelden identiek, of het nu op de laptop van een ontwikkelaar, een testcluster of een productiedatacenter is. Deze consistentie elimineert omgevingsdrift en vereenvoudigt het oplossen van problemen.

Geautomatiseerd beheer van de levenscyclus

OpenShift automatiseert veel operationele taken die belastend zijn met rauwe Docker. Rolling updates, kanarie-implementaties, gezondheidscontroles en zelfgenezing zijn ingebouwd. Bijvoorbeeld, als een container crasht, OpenShift automatisch herstart. Als een knooppunt mislukt, herdistribueert de scheduler containers naar gezonde knooppunten.

Enterprise Security

Beveiliging is van het grootste belang in bedrijfsomgevingen. OpenShift verplicht containers standaard onder beperkte beveiligingscontextbeperkingen te draaien. Dit betekent dat containers niet als root kunnen draaien, host namespaces kunnen gebruiken of gevoelige hostmappen kunnen mounten tenzij uitdrukkelijk toegestaan. OpenShift integreert ook met kwetsbaarheidsscanners om afbeeldingen te controleren voor bekende CVE's voordat ze worden ingezet. Role-based access control (RBAC) zorgt ervoor dat ontwikkelaars, operators en auditors alleen de nodige machtigingen hebben.

Schaalbaarheid

OpenShift maakt gebruik van de horizontale pod auto-schaling en cluster auto-schaling. U kunt CPU of geheugen drempels die automatische schaal-out of schaal-in. In combinatie met Docker's lichtgewicht containers, schalen gebeurt in een paar seconden in plaats van minuten zoals met VMs.

Productiviteit van de ontwikkelaar

OpenShift's Source-to-Image-functie versnelt de ontwikkeling door ontwikkelaars in staat te stellen om code rechtstreeks naar het cluster te pushen zonder Dockerfiles te schrijven. Het geïntegreerde bouwsysteem kan geautomatiseerde image builds en implementaties van Git commits veroorzaken, waardoor een strakke feedback loop mogelijk is. Daarnaast biedt de ontwikkelaarconsole topologie weergaven, logs en ingebouwde terminals.

Beste praktijken voor de invoering van ondernemingen

Afbeeldingsversie en tagging

Gebruik altijd specifieke, versioned tags voor uw Docker-afbeeldingen. Vermijd de -tag in productie omdat deze reproduceerbaarheid breekt. Gebruik semantische versiering of commit hashes. OpenShift's imagestream resources kunnen wijzigingen van de tag volgen en geautomatiseerde implementaties activeren.

Veiligheidsbeleid

Definieer beveiligingscontext-constraints (SCC's) die overeenkomen met uw beveiligingshouding. Begin met de beperkte SCC en escaleer alleen privileges indien nodig. Integreer met containerbeeldscanners zoals Clair of Red Hat Advanced Cluster Security om beelden te scannen voordat u deze inzet. Schakel ook het netwerkbeleid in om het verkeer tussen de capsules te scannen.

CI/CD integratie

Automatiseer bouwt, test en implementaties met behulp van OpenShift Pijpleidingen (gebouwd op Tekton) of Jenkins. Een typische pijpleiding: (1) ontwikkelaar duwt code naar Git, (2) OpenShift activeert een S2I of Docker build, (3) de nieuwe afbeelding wordt automatisch naar het interne register geduwd, (4) een implementatie wordt bijgewerkt, en (5) gezondheidscontroles valideren de uitrol. Rol automatisch terug als de nieuwe versie niet in staat is gezondheidscontroles.

Voorbeeld van een Tekton pijpleiding resource die bouwt vanuit een Dockerfile:

apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
 name: build-docker-image
spec:
 workspaces:
 - name: source
 steps:
 - name: build
 image: gcr.io/kaniko-project/executor:latest
 args:
 - --context=$(workspaces.source.path)
 - --destination=image-registry.openshift-image-registry.svc:5000/<project>/my-app:$(params.tag)

Monitoring en loggen

Schakel de ingebouwde monitoring stack van OpenShift (Prometheus en Grafana) in om statistieken te verzamelen over CPU, geheugen, schijf I/O en netwerkgebruik. Stel waarschuwingen in voor abnormaal gebruik van hulpbronnen. Voor logs, gebruik de OpenShift Elasticsearch operator of stuur logs door naar een externe SIEM. Corrigeer logs met metrics voor snellere analyse van de oorzaak van de oorzaak.

Middelenbeheer

Stel resourceverzoeken en limieten in voor elke container. OpenShift gebruikt deze om de pods intelligent in te plannen en te voorkomen dat hulpbronnen verhongeren. Zonder beperkingen kan één container alle nodebronnen gebruiken, wat andere werklast beïnvloedt. Voorbeeld YAML knipsel:

resources:
 requests:
 memory: "256Mi"
 cpu: "250m"
 limits:
 memory: "512Mi"
 cpu: "500m"

Netwerken en permanente opslag

Voor toepassingen die een statevolle opslag vereisen, gebruik de PersistentVolumeClaims (PVC's) van OpenShift, ondersteund door een opslagklasse (bijv. NFS, Ceph, AWS EBS). Configureer StorageClasses op de juiste manier. Voor het netwerken, leverage OpenShift Routes voor extern HTTP/S verkeer en Services voor interne load balancering. Gebruik netwerkbeleid om pod-to-pod communicatie te beperken op basis van namespaces en labels.

Back-up en herstel van rampen

Regelmatig een back-up maken van OpenShift configuraties (etcd snapshots), PVC gegevens en inhoud van het image register. Implementeer een Infrastructuur als Code benadering met behulp van GitOps tools zoals ArgoCD om omgevingen snel te herstellen.

Real-World Use Cases

Microservices Decompositie

Bedrijven moderniseren monolithische toepassingen vaak breken ze in microservices. Docker containers gastheer elke dienst onafhankelijk, en OpenShift orkestreert het hele systeem, het beheren van service ontdekking, load balancing, en inter-service communicatie.

Hybride cloud-implementaties

OpenShift draait op grote cloudproviders (AWS, Azure, GCP) en on-premises. Docker-afbeeldingen kunnen overal worden ingezet OpenShift draait, waardoor een consistente ervaring in hybride omgevingen mogelijk is. Dit is van cruciaal belang voor organisaties met datasoevereiniteitsvereisten of multi-cloud-strategieën.

CI/CD voor machine learning

Data science teams kunnen ML modellen met behulp van Docker container en implementeren op OpenShift als serverloze functies (via OpenShift Serverless/Knative). Dit maakt model gevolgtrekking op schaal met automatische schaalverdeling tot nul wanneer niet in gebruik.

Conclusie

Docker en OpenShift bieden samen een krachtig, productie-klaar container orkestratie platform dat voldoet aan de eisen van onderneming IT. Docker levert lichtgewicht, draagbare beelden die gemakkelijk te bouwen en versie, terwijl OpenShift voegt de orkestratie, beveiliging, en ontwikkelaar ervaring nodig om die beelden op schaal met vertrouwen. Door het volgen van de integratie stappen en beste praktijken beschreven in dit artikel, organisaties kunnen versnellen software levering, verbeteren van de hulpbronnengebruik, en het handhaven van een sterke beveiligingshouding. Of het nu migreren van bestaande werkbelasting of het bouwen van Greenfield cloud-native applicaties, Docker op OpenShift is een bewezen combinatie voor enterprise container orkestratie.

Voor meer diepgaande informatie, zie de officiële documentatie: Docker Docs[, OpenShift Docs, en Red Hat OpenShift Product Page[.