Webinarreeks: Aan de Slag met Containers

Dit artikel sluit aan bij een webinarreeks over het implementeren en beheren van containergebaseerde workloads in de cloud. De reeks dekt de basisprincipes van containers, inclusief het beheer van de containerlevenstijl, het implementeren van multi-containerapplicaties, het schalen van workloads en het begrijpen van Kubernetes, naast het benadrukken van beste praktijken voor het uitvoeren van stateful applicaties.

Deze handleiding bevat de concepten en opdrachten die in de eerste sessie van de reeks worden behandeld, Getting Started with Containers.

Inleiding

Docker is een platform voor het implementeren en beheren van containergebaseerde applicaties. Containers zijn populair onder ontwikkelaars, beheerders en DevOps-engineers vanwege de flexibiliteit die ze bieden.

Docker heeft drie essentiële componenten:

  • Docker Engine
  • Docker Tools
  • Docker Registry

De Docker Engine biedt de kerncapaciteiten voor het beheer van containers. Het maakt verbinding met de onderliggende Linux-besturingssysteem om eenvoudige API’s te onthullen om te gaan met de levenscyclus van containers.

Docker Tools zijn een set van command-line tools die communiceren met de API die wordt blootgegeven door de Docker Engine. Ze worden gebruikt om containers uit te voeren, nieuwe images te maken, opslag en netwerken te configureren en veel meer bewerkingen uit te voeren die van invloed zijn op de levenscyclus van een container.

Docker Registry is de plaats waar container-images worden opgeslagen. Elke image kan meerdere versies krijgen door middel van unieke taggen. Gebruikers halen bestaande images uit de registratie en pushnen nieuwe images naar het.Docker Hub is een gehoste registratie die wordt beheerd door Docker, Inc.. Het is ook mogelijk om een registratie te runnen binnen je eigen omgevingen om de images dichter bij de motor te houden.

Na deze tutorial zullen je Docker installeren op een DigitalOcean Droplets, containers manageren, werken met images, toegankelijke versies toevoegen, persistentie instellen, en een privéregistratie instellen.

Voorbereidingsvraagstukken

Om deze tutorial te volgen, heb je nodig:

Standaard vereist de docker-opdracht root-rechten. Echter, je kunt de opdracht uitvoeren zonder het sudo-voorvoegsel door docker als gebruiker in de docker-groep uit te voeren.

Om je Droplet op deze manier te configureren, voer het volgende commando uit: sudo usermod -aG docker ${USER}. Dit voegt de huidige gebruiker toe aan de docker-groep. Voer vervolgens het commando su - ${USER} uit om de nieuwe groepslidmaatschap toe te passen.

Deze handleiding gaat ervan uit dat je server is geconfigureerd om de docker-opdracht zonder het sudo-voorvoegsel uit te voeren.

Stap 1 — Docker installeren

Nadat je via SSH bent ingelogd op de Droplet, voer de volgende commando’s uit om eventuele bestaande docker-gerelateerde pakketten te verwijderen en vervolgens Docker vanuit de officiële repository te installeren:

  1. sudo apt-get remove docker docker-engine docker.io
  2. sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
  3. curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
  4. sudo apt-key fingerprint 0EBFCD88
  5. sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
  6. sudo apt-get update
  7. sudo apt-get install -y docker-ce

Nadat Docker is geïnstalleerd, verifieer de installatie met de volgende commando’s:

  1. docker info

Deze opdracht geeft de details van de Docker Engine die geïnstalleerd is in de omgeving. De volgende opdracht verifieert dat de Docker Tools correct geinstalleerd en geconfigureerd zijn. Het zou moeten printen wat de versies zijn van zowel Docker Engine als Tools.

  1. docker version

### Stap 2 — Starten van Containers

Docker containers worden gestart van bestaande images die in de registry worden geïsoleerd. Images in Docker kunnen in privé- of publieke repository’s worden gehouden. Privé repository’s vereisen gebruikers authentificaliteit voordat ze afbeeldingen kunnen halen. Publieke images zijn door iedereen te gebruiken.

Om een image te zoeken met de naam hello-world, voer de volgende commando uit:

  1. docker search hello-world

Er kan meerdere images zijn met de naam hello-world. Kies deze met de hoogste sterren, wat het populairste afbeelding aanduidt.

Bekijk de beschikbare images in je lokale omgeving met de volgende commando:

  1. docker images

Omdat we nog geen containers hebben gelanceerd, zal er geen image aanwezig zijn. We kunnen nu de image downloaden en lokaal运行:

  1. docker pull hello-world
  2. docker run hello-world

Als we de docker run commando uitvoeren zonder de image te halen, dan zal Docker Engine eerst de image halen en daarna deze lokaal runnen. Als we de docker images commando uitvoeren opnieuw, zien we dat we de hello-world image lokaal beschikbaar hebben.

Laten we nu een meer betekenisvolle container starten: een Apache webserver.

  1. docker run -p 80:80 --name web -d httpd

U zou erbij mogen merken dat er aan de docker run commando extra opties zijn gegeven. Hier is een uitleg over deze opties:

  • -p — Dit vertelt de Docker Engine om de container’s poort 80 op de host poort 80 te exposeren. Omdat Apache op poort 80 luistert, moeten we hem exposeren op de host poort.
  • --name — Deze optie geeft aan Docker Engine een naam aan de draaiende container. Als we deze optie omissen, zal Docker Engine de container een willekeurige naam toekennen.
  • -d — Deze optie instructeert Docker Engine om de container in afgesloten modus te draaien. Zonder deze optie wordt de container in de voorgrond geleid, blokkend toegang tot de shell. Door de container in de achtergrond te schakelen, kunnen we de shell gebruiken terwijl de container nog steeds draait.

Om te verifiëren of onze container daadwerkelijk in de achtergrond draait, probeer de volgende commando:

  1. docker ps

De uitvoer toont dat de container met de naam web actief is en poort 80 van de host poort 80 gemappeerd is.

Nu toegang verlenen aan de webserver:

  1. curl localhost

Probeer de webserver te openen met de volgende commando’s:

  1. docker stop web
  2. docker rm web

Na het stoppen en verwijderen van de draaiende container gebruik je de volgende commando’s:

Stap 3 — Toevoegen van storage aan containers

Container zijn efemerale, wat betekent dat alles wat binnen een container wordt opgeslagen verloren gaat als de container wordt beëindigd. Om data door te brengen naast de levensduur van een container, moeten we een volume aan de container koppelen. Volumes zijn mappen vanuit het besturingssysteem van de host.

Begin met het maken van een nieuwe map op de host:

  1. mkdir htdocs

Nu starten we de container met een nieuwe schakeloptie om de map htdocs te monteren, en verwijzen we hem naar de documentroot van de Apache webserver:

  1. docker run -p 80:80 --name web -d -v $PWD/htdocs:/usr/local/apache2/htdocs httpd

De schakeloptie -v wijst de map htdocs binnen de container naar het besturingssysteem van de host. Alle wijzigingen die aan deze map worden aangebracht zijn zichtbaar op beide locaties.

Bereik de map vanuit de container door de opdracht uit te voeren:

  1. docker exec -it web /bin/bash

Deze opdracht koppelt onze terminal aan de shell van de container in een interactieve modus. U zult zien dat u nu binnen de container wordt gegooid.

Ga naar de map htdocs en maak een eenvoudige HTML-bestand. Sluit uiteindelijk de shell af om terug te keren naar de host:

  1. cd /usr/local/apache2/htdocs
  2. echo '<h1>Hello World from Container</h1>' > index.html
  3. exit

het uitvoeren van de opdracht curl localhost laat zien dat de webserver de pagina die we hebben gemaakt teruggeeft.

We kunnen dit bestand niet alleen vanuit de host bereiken, maar we kunnen het ook wijzigen:

  1. cd htdocs
  2. cat index.html
  3. echo '<h1>Hello World from Host</h1>' | sudo tee index.html >/dev/null

Het uitvoeren van curl localhost opnieuw bevestigt dat de web server de laatst gemaakte pagina vanuit de host aanbiedt.

Beëindig de container met de volgende opdracht. (De optie -f dwingt Docker om te beëindigen zonder eerst te stoppen.)

  1. docker rm -f web

Stap 4 — Afbeeldingen bouwen

Naast het uitvoeren van bestaande afbeeldingen vanuit de registry, kunnen we onze eigen afbeeldingen maken en deze opslaan in de registry.

Je kunt nieuwe afbeeldingen maken van bestaande containers. De wijzigingen die zijn aangebracht in de container worden eerst ingediend en vervolgens worden de afbeeldingen getagd en naar de registry gepusht.

Laten we de httpd-container opnieuw starten en het standaarddocument wijzigen:

  1. docker run -p 80:80 --name web -d httpd
  2. docker exec -it web /bin/bash
  3. cd htdocs
  4. echo '<h1>Welcome to my Web Application</h1>' > index.html
  5. exit

De container draait nu met een aangepaste index.html. Je kunt dit controleren met curl localhost.

Voordat we de gewijzigde container indienen, is het een goed idee om deze te stoppen. Zodra deze is gestopt voeren we het indieningscommando uit:

  1. docker stop web
  2. docker commit web doweb

Bevestig het maken van de afbeelding met het commando docker images. Het toont de doweb-afbeelding die we zojuist hebben gemaakt.

Om deze afbeelding te taggen en op te slaan in Docker Hub, voer de volgende commando’s uit om je afbeelding naar de openbare registry te pushen:

  1. docker login
  2. docker tag your_docker_hub_username/doweb
  3. docker push your_docker_hub_username/doweb

Je kunt de nieuwe afbeelding controleren door te zoeken in Docker Hub via de browser of de opdrachtprompt.

Stap 5 — Een Privé Registry Starten

Het is mogelijk om de registratie in privé-omgevingen te draaien om de afbeeldingen meer veilig te houden en de latentie tussen de Docker Engine en de afbeeldingsrepository te verminderen.

De Docker Registry is beschikbaar als een container die kan worden gelanceerd zoals elke andere container. Omdat de registratie meerdere afbeeldingen bevat, is het goed idee om er een opslagvolume aan te attenueren.

  1. docker run -d -p 5000:5000 --restart=always --name registry -v $PWD/registry:/var/lib/registry registry

Bekijk dat de container in de achtergrond wordt uitgevoerd met de poort 5000 exposeerd en de registry map naar het host bestandssysteem gepaard. U kunt verifiëren dat de container is gestart door de docker ps opdracht uit te voeren.

We kunnen nu een lokale afbeelding labelen en pushen naar de privé-registratie. Laat ons eerst de busybox container van Docker Hub pullen en taggen.

  1. docker pull busybox
  2. docker tag busybox localhost:5000/busybox
  3. docker images

De vorige commando bevestigt dat de busybox container nu is getagged met localhost:5000, dus push de afbeelding naar de privé-registratie.

  1. docker push localhost:5000/busybox

Na de afbeelding push naar de lokale registratie, probeer ze nu te removeren en haal ze weer uit de registratie.

  1. docker rmi -f localhost:5000/busybox
  2. docker images
  3. docker pull localhost:5000/busybox
  4. docker images

We hebben de volle cirkel gevolgd van het pullen van de afbeelding, taggen, pushen naar de lokale registratie, en, uiteindelijk, haal hem terug uit de omgeving.

Er kunnen momenten zijn waarin je de privé-registratie op een aparte host wilt draaien. De Docker Engine op verschillende machines zal met de remote registry communiceren om afbeeldingen te halen en te pushnen.

Omdat het register niet beveiligd is, moeten we de configuratie van Docker Engine aanpassen om toegang tot een onveilig register mogelijk te maken. Doe dit door het bestand daemon.json te wijzigen dat zich bevindt in /etc/docker/daemon.json. Maak het bestand aan als het niet bestaat.

Voeg de volgende ingang toe:

Editing /etc/docker/daemon.json
{
  "insecure-registries" : ["REMOTE_REGISTRY_HOST:5000"]
}

Vervang REMOTE_REGISTRY_HOST door de hostnaam of het IP-adres van het externe register. Herstart Docker Engine om ervoor te zorgen dat de configuratiewijzigingen worden toegepast.

##Conclusie
Deze handleiding heeft je geholpen om aan de slag te gaan met Docker. Het besprak de essentiële concepten, inclusief installatie, containerbeheer, imagebeheer, opslag en privéregister. De komende sessies en artikelen in deze reeks zullen je helpen om verder te gaan dan de basis van Docker.

Source:
https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-docker