Wat is Docker?
Voordat we aan de slag gaan met docker-containers, gaan we eens kijken hoe ons team toepassingen ontwikkelt en implementeert. We beschrijven ook een aantal van de uitdagingen waarmee onze teams te maken hebben.
Bij het proces voor de ontwikkeling en het beheer van toepassingen in uw bedrijf zijn doorgaans een of meer teams betrokken. Er is een ontwikkelteam dat de software en een operations-team maakt dat verantwoordelijk is voor het implementeren van deze toepassingen. Het operations-team is ook verantwoordelijk voor het beheren van de infrastructuur voor het hosten van toepassingen.
Stel dat we een portal voor het bijhouden van bestellingen ontwikkelen voor de verschillende verkoopkanalen van ons bedrijf. Verschillende omgevingen hosten onze toepassingen tijdens het ontwikkeling- en publicatieproces van de app. Eerst ontwikkelt en test het team van ontwikkelaars de software in een ontwikkelomgeving. Vanuit die omgeving wordt de software vervolgens geïmplementeerd naar een kwaliteitscontroleomgeving en dan achtereenvolgens naar een preproductie- een definitieve productieomgeving.
Er zijn verschillende uitdagingen die we in het voorgaande scenario moeten overwegen:
Hostingomgevingen beheren
Voor alle uiteenlopende omgevingen moet zowel software als hardware worden beheerd. We moeten ervoor zorgen dat de geïnstalleerde software en de geconfigureerde hardware in elk van de omgevingen hetzelfde is. We moeten voor elke omgeving ook andere aspecten configureren, zoals netwerktoegang, gegevensopslag en beveiliging, en dat alles op een consistente en makkelijk te reproduceren manier.
Continuïteit in het leveren van software
Het implementeren van toepassingen in onze omgevingen moet consistent plaatsvinden. Elk implementatiepakket moet alle systeempakketten, binaire bestanden, bibliotheken, configuratiebestanden en andere items bevatten die zorgen voor een volledig functionele toepassing. We moeten er ook op toezien dat al deze afhankelijkheden zijn afgestemd op de juiste softwareversies en architectuur.
Efficiënt hardwaregebruik
Elke geïmplementeerde toepassing moet zo worden uitgevoerd dat dit geïsoleerd plaatsvindt van andere toepassingen die op dezelfde hardware worden uitgevoerd. We willen meer dan één toepassing per server uitvoeren, omdat we optimaal gebruik willen maken van de beschikbare resources zonder dat ze hinder van elkaar ondervinden.
Portabiliteit van toepassingen
Er zijn diverse redenen waarom portabiliteit van toepassingen zo enorm belangrijk is. Een hostingomgeving kan mislukken of we moeten onze toepassing mogelijk uitschalen. In beide gevallen is het potentiële resultaat het opnieuw implementeren van onze software in een nieuwe omgeving. We willen software van de ene host naar de andere verplaatsen, zelfs als de onderliggende infrastructuur verschilt. Dat moet zo snel mogelijk gebeuren om downtime voor onze klanten te beperken.
Voordat we ons gaan bezighouden met de Docker-functies die ons kunnen helpen deze problemen op te lossen, gaan we eerst een aantal concepten bespreken en een beknopt overzicht van de Docker-architectuur bekijken.
Wat is een container?
Een container is een losjes geïsoleerde omgeving die ons in staat stelt softwarepakketten te bouwen en uit te voeren. Deze softwarepakketten bevatten zowel de code als alle afhankelijkheden die nodig zijn om toepassingen snel en stabiel in elke computeromgeving uit te voeren. Deze pakketten worden containerinstallatiekopieën genoemd.
De containerinstallatiekopie wordt de eenheid die we gebruiken om onze toepassingen te distribueren.
Wat is softwarecontainerisatie?
Softwarecontainerisatie is een besturingssysteemvirtualisatiemethode die wordt gebruikt om containers te implementeren en uit te voeren zonder een virtuele machine (VM) te gebruiken. Containers kunnen worden uitgevoerd op fysieke hardware, in de cloud, op VM's en op meerdere besturingssystemen.
Wat is Docker?
Docker is een containerisatieplatform dat wordt gebruikt om containers te ontwikkelen, verzenden en uit te voeren. Bij Docker wordt geen gebruik gemaakt van een hypervisor en u kunt Docker lokaal op uw desktopcomputer of laptop uitvoeren als u toepassingen ontwikkelt en test. De desktopversie van Docker biedt ondersteuning voor Linux, Windows en macOS. Docker is voor productiesystemen beschikbaar voor serveromgevingen, waaronder veel varianten van Linux en Microsoft Windows Server 2016 en hoger. Veel clouds, waaronder Azure, ondersteunen Docker.
Architectuur van Docker
Het Docker-platform bestaat uit diverse onderdelen die worden gebruikt om onze toepassingen in containers te bouwen, uit te voeren en te beheren.
Docker-engine
De Docker-engine bestaat uit diverse onderdelen die zijn geconfigureerd als een client-serverimplementatie waarbij de client en de server gelijktijdig op dezelfde host worden uitgevoerd. De client communiceert met de server met behulp van een REST API, waardoor de client ook kan communiceren met een extern serverexemplaren.
Met enkele pijlen wordt de communicatie tussen de Docker-server, de actieve containers en de opgeslagen containerinstallatiekopieën weergegeven. Deze pijlen geven aan hoe met de Docker-server opgeslagen containerinstallatiekopieën worden geladen en actieve containers worden beheerd.
De Docker-client
Er zijn twee alternatieven voor Docker-client: een opdrachtregeltoepassing met de naam docker
, of een grafische gebruikersinterface (GUI) toepassing met de naam Docker Desktop. De CLI en Docker Desktop communiceren met een Docker-server. De docker
opdrachten van de CLI of Docker Desktop gebruiken de Docker REST API om instructies te verzenden naar een lokale of externe server en werken als de primaire interface die we gebruiken om onze containers te beheren.
De Docker-server
De Docker server is een daemon met de naam dockerd
. De dockerd
daemon reageert op clientaanvragen via de Docker REST API en kan communiceren met andere daemons. De Docker-server is ook verantwoordelijk voor het bijhouden van de levenscyclus van de containers.
Docker-objecten
U gaat verschillende objecten maken en configureren om uw containerimplementaties te ondersteunen. Dit zijn onder andere netwerken, opslagvolumes, invoegtoepassingen en andere serviceobjecten. We bespreken hier niet al deze objecten, maar het is goed om in gedachte te houden dat het bij deze objecten gaat om items die we naar behoefte kunnen maken en implementeren.
Docker Hub
Docker Hub is een Docker-containerregister van Software as a Service (SaaS). Docker-registers zijn opslagplaatsen die worden gebruikt om de containerinstallatiekopie die we maken, op te slaan en te distribueren. Docker Hub is het standaard openbaar register dat in Docker wordt gebruik voor het beheer van installatiekopieën.
Houd in gedachte dat u een privé-Docker-register kunt maken en gebruiken of dat u een van de vele cloudprovideropties kunt gebruiken die er beschikbaar zijn. U kunt bijvoorbeeld Azure Container Registry gebruiken om containerinstallatiekopieën op te slaan voor gebruik in verschillende Azure-services met containers.