Deze blog is een onderdeel van een drieluik serie. Lees hieronder de volgende blogpost.
Docker
Docker is vernoemd naar de containers die je ziet op schepen. Het zorgt voor standaardisatie zoals in de transport sector door te kiezen voor één transport-vorm. Docker is een open-source raamwerk waarmee het mogelijk wordt een applicatie en/of database in een lichtgewicht, verplaatsbare container te verpakken. Zo wordt het installeren van een applicatie op een server even eenvoudig als het installeren van een mobiele app op je tablet of smartphone.
In een container zijn alle benodigde componenten ingebouwd. Door containers te gebruiken, kunnen resources geïsoleerd worden, de toegang tot services beperkt en processen toegewezen, zodat je van een container precies kan aangeven hoeveel bijvoorbeeld CPU, geheugen of I/O-load gebruikt mogen worden.
In deze blog leg ik uit hoe je in 7 stappen een PostgreSQL-Docker-container aanmaakt.
Hoe te beginnen?
Goed. Je wil iets met Docker en databases.
Er zijn tientallen databases beschikbaar op Dockers Hub (een kruising tussen GitHub en Google Play Store). Denk daarbij aan: Oracle, SQL Server, Postgres, MariaDB, maar bijvoorbeeld ook aan MySQL en Mongo en vele anderen.
De databases zijn te krijgen in verschillende versies, van de nieuwste bèta tot oudere edities.
De containers maken deel uit van het geheel van Microservices Architecture, een onderwerp dat inmiddels torenhoog op de agenda staat van DevOps. Vanwege onder andere de beheersbaarheid van CI/CD pipelines en bijna ongekende efficiency.
Dit alles leidt haast weer onvermijdelijk tot het praten over Kubernetes – maar dat is misschien beter voor een andere blog.
Wat zijn de stappen die je moet zetten?
STAP 1: download Docker
Om te beginnen moet je Docker downloaden. Hier is de keuze uit de nieuwste Docker Desktop voor Windows, waarvoor een gratis Docker Hub-account nodig is en VirtualBox uitschakelt om te worden uitgevoerd, of de oudere Docker Toolbox. Omdat ik wil niet knoeien met mijn bestaande VirtualBox-afbeeldingen, gaan wij voor Docker Toolbox.
Download de exe van https://github.com/docker/toolbox/releases en voer deze uit. De standaardinstallatie omvat zowel een oude versie van VirtualBox als een Git voor Windows. Als je een nieuwe versie van VirtualBox hebt, sla deze dan over. Op mijn systeem detecteert het installatieprogramma Git maar niet VirtualBox. Als het klaar is, kun je de 2 snelkoppelingen bekijken die het installeert Docker Quickstart Terminal (opdrachtregel) en Kitematic (GUI).
STAP 2: Voer de Docker Quickstart Terminal uit
Als je de VirtualBox open hebt gemaakt, zul je merken dat deze een nieuwe machine heeft gemaakt met de naam default. Op Windows, althans in de toolbox-versie, wordt alles binnen deze VirtualBox-machine uitgevoerd. Na een tijdje is de eerste installatie voltooid en zou je een ASCII-afbeelding van een walvis moeten zien, een opmerking over de standaardmachine en het IP-adres alsmede een interactieve shell.
Let op het IP-adres, dit komt later van pas
STAP 3: my first container
Nu Docker actief is, kun je ook de GUI uitvoeren. Klik op Kitematic, en als er staat: We couldn’t find a native setup……”, kies “Use VirtualBox”. Sla vervolgens het scherm “Connect to Docker Hub” over en je krijgt verschillende aanbevolen Docker images te zien. Je kunt zoeken naar alle beschikbare images op Docker Hub. Er zijn meer dan een dozijn categorieën, zoals besturingssystemen, DevOps-tools, databases en programmeertalen. Ze hebben zelfs mediaservers en twitter clients.
Zowel de Terminal als de Kitematic controleren of er een default VirtualBox-machine beschikbaar is en als dat niet het geval is, maken ze er een. Je kunt dus de VirtualBox-machine verwijderen en opnieuw beginnen. Maar wees voorzichtig, want alle containerinformatie staat op die machine. Dat hoeft geen probleem te zijn als je gewoon aan het rommelen bent. Maar als je tijd hebt besteed aan het bouwen van meerdere containers, wil je misschien een snapshot van je machine maken.
STAP 4: PostgreSQL image selecteren
Typ postgres in het zoekvak boven aan Kitematic. Er zijn veel images beschikbaar. We gaan de eerste gebruiken, wat het officiële Postgres-image is. Klik op de drie stippen links van “create” en selecteer “view on Docker Hub”. Dit opent een browservenster. Als je naar de sectie “How to use this image” scrolt, zie je:
docker run --name some-postgres -e
POSTGRES_PASSWORD=mysecretpassword -d postgres
Typ (of kopieer en plak) dit in het Terminal-venster, zorg ervoor dat je twee mintekens voor “name” gebruikt en druk vervolgens op Return.
Je ziet de melding “unable to find image ‘postgres:latest’ locally” en het zal vervolgens talloze bestanden downloaden en uitpakken. Als het klaar is, zou het een sha256-regel, een Status-regel en een hash moeten weergeven.
STAP 5: test je container
Top! Je hebt je eerste container gemaakt!
In de huidige staat is het echter vrij nutteloos. We moeten toegang hebben tot de container om SQL-opdrachten van psql uit te voeren. Maar laten we eerst kijken of het werkt. Type:
docker ps
Dit retourneert een container-ID (de eerste 12 tekens van de hash), de image naam (in dit geval Postgres), command, create, status, poorts en de naam van de container (some-postgres).
STAP 6: Maak verbinding via EXEC
Nu moeten we daadwerkelijk verbinding maken met de container om ermee te kunnen werken.
Typ het volgende:
docker exec -it some-postgres bash
Nu hebben we root-access tot de container. Let op de container-ID in de opdrachtprompt. Om toegang te krijgen tot Postgres moet je user veranderen naar ‘postgres’ en vervolgens psql uitvoeren. Om psql af te sluiten, typ: \q
su postgres
psql
\conninfo
\q
Typ nogmaals exit en verlaat de interactieve sessie waarin je jezelf bevond. Keer terug naar de Docker Terminal. Om te controleren of de container nog steeds actief is en je inderdaad alleen een interactieve sessie hebt verlaten, typ:
docker ps
Stap 7: De GUI PgAdmin koppelen
Je zult zien dat de status van je Postgres-container nog steeds actief is.
Dat is de PostgreSQL command line, maar hoe zit het met het gebruik van een GUI-tool zoals pgAdmin? Als u geen kopie heeft, kunt u deze downloaden van: https://www.pgadmin.org/
Voer het uit en maak een nieuwe server. Geef het een naam op het algemene tabblad en klik op het tabblad “Connection”.
Vul de hostname/address in met het IP-adres van de default machine waarop je Terminal voor het eerst hebt uitgevoerd. Dit zorgt ervoor dat je container verbinding maakt via de VirtualBox-machine in plaats van rechtstreeks. Vul het wachtwoord in als mysecretpassword (zoals het ingesteld op de commandline toen je de container maakte).
Selecteer save password en klik op opslaan.
En…
het werkt niet!
Er ontbreekt een flag in de opdracht voor het maken van containers wat heel belangrijk om pgAdmin aan het werk te krijgen. Het is het poortcommando en het wijst de interne en externe poort van een container toe. Maar eerst moeten we de eerste container opruimen.
rm
Als je de oorspronkelijke opdracht die we hebben gebruikt om de container te maken, opnieuw probeert uit te voeren, krijgt je een foutmelding dat de containernaam nog steeds wordt gebruikt. Dus, om de container te verwijderen, stop eerst de container:
docker stop some-postgres
gebruik daarna:
docker rm some-postgres
Je kunt ook de flag -rm gebruiken wanneer u een container maakt. Op die manier wordt het niet bewaard als je stopt. Als je van alles af wilt, gebruik dan:
docker system prune
Voer nu de oorspronkelijke Docker-runopdracht opnieuw uit, maar deze keer met -p 5432: 5432
docker run --name some-postgres -p 5432:5432 -e _ _POSTGRES_PASSWORD=mysecretpassword -d postgres
Typ:
docker ps
om te controleren of het actief is. Je zult merken dat deze keer, evenals een andere container-ID, de poorten enigszins verschillen
Wanneer je nu een nieuwe server in pgAdmin maakt, zou deze het zonder problemen moeten vinden.
GEFELICITEERD!
Als je al deze stappen hebt gezet: Dan heb je een complete serveromgeving met PostgreSQL in een container verpakt welke je overal en met alles kunt aanspreken.
In deel twee zal ik enkele van de algemene Docker-commando’s uitleggen en kijken naar typische acties in Docker zoals het maken van image, netwerken en volumes.
Route naar effectief databasebeheer?
Wat is nu de route naar effectief databasebeheer? Wat zijn de valkuilen ? Om een aantal handvatten aan te reiken hebben we daar een whitepaper over geschreven.