Hoe u Docker installeert en gebruikt op Ubuntu 22.04

Introductie

Docker is een toepassing die het proces van het beheren van applicatieprocessen in containers vereenvoudigt. Containers stellen u in staat om uw applicaties uit te voeren in resource-geïsoleerde processen. Ze lijken op virtuele machines, maar containers zijn draagbaarder, vriendelijker voor de bronnen en meer afhankelijk van het hostbesturingssysteem.

Voor een gedetailleerde kennismaking met de verschillende componenten van een Docker-container, bekijk De Docker-ecosysteem: Een kennismaking met veelvoorkomende componenten.

In deze zelfstudie zult u Docker Community Edition (CE) installeren en gebruiken op Ubuntu 22.04. U zult Docker zelf installeren, werken met containers en images, en een image naar een Docker Repository pushen.

Vereenvoudig het implementeren van applicaties met DigitalOcean App Platform. Implementeer direct vanuit GitHub in enkele minuten.

Vereisten

Om deze zelfstudie te volgen, heeft u het volgende nodig:

Stap 1 — Docker installeren

Het Docker-installatiepakket dat beschikbaar is in de officiële Ubuntu-opslagplaats is mogelijk niet de nieuwste versie. Om ervoor te zorgen dat we de nieuwste versie krijgen, zullen we Docker installeren vanuit de officiële Docker-opslagplaats. Hiervoor zullen we een nieuwe pakketbron toevoegen, de GPG-sleutel van Docker toevoegen om ervoor te zorgen dat de downloads geldig zijn, en vervolgens het pakket installeren.

Eerst, update uw bestaande lijst met pakketten:

  1. sudo apt update

Installeer vervolgens een paar vereiste pakketten waarmee apt pakketten via HTTPS kan gebruiken:

  1. sudo apt install apt-transport-https ca-certificates curl software-properties-common

Voeg vervolgens de GPG-sleutel toe voor de officiële Docker-opslagplaats aan uw systeem toe:

  1. curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

Voeg de Docker-opslagplaats toe aan APT-bronnen:

  1. echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Update opnieuw uw bestaande lijst met pakketten zodat de toevoeging wordt herkend:

  1. sudo apt update

Zorg ervoor dat u gaat installeren vanuit de Docker-opslagplaats in plaats van de standaard Ubuntu-opslagplaats:

  1. apt-cache policy docker-ce

Je zult output zien zoals dit, hoewel het versienummer voor Docker anders kan zijn:

Output of apt-cache policy docker-ce
docker-ce:
  Installed: (none)
  Candidate: 5:20.10.14~3-0~ubuntu-jammy
  Version table:
     5:20.10.14~3-0~ubuntu-jammy 500
        500 https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages
     5:20.10.13~3-0~ubuntu-jammy 500
        500 https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages

Let op dat docker-ce niet is geïnstalleerd, maar de kandidaat voor installatie is afkomstig van de Docker-opslagplaats voor Ubuntu 22.04 (jammy).

Tenslotte, installeer Docker:

  1. sudo apt install docker-ce

Docker zou nu geïnstalleerd moeten zijn, de daemon gestart, en het proces ingeschakeld om op te starten bij het opstarten. Controleer of het draait:

  1. sudo systemctl status docker

De uitvoer zou vergelijkbaar moeten zijn met het volgende, waarbij wordt getoond dat de service actief en draaiend is:

Output
● docker.service - Docker Application Container Engine Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled) Active: active (running) since Fri 2022-04-01 21:30:25 UTC; 22s ago TriggeredBy: ● docker.socket Docs: https://docs.docker.com Main PID: 7854 (dockerd) Tasks: 7 Memory: 38.3M CPU: 340ms CGroup: /system.slice/docker.service └─7854 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

Het installeren van Docker geeft je nu niet alleen de Docker-service (daemon), maar ook het docker command line utility, of de Docker-client. We zullen later in deze zelfstudie verkennen hoe je het docker commando kunt gebruiken.

Stap 2 — Het Uitvoeren van het Docker Commando Zonder Sudo (Optioneel)

Standaard kan het docker commando alleen worden uitgevoerd door de root gebruiker of door een gebruiker in de docker groep, die automatisch wordt aangemaakt tijdens het installatieproces van Docker. Als je probeert het docker commando uit te voeren zonder het vooraf te prefixen met sudo of zonder lid te zijn van de docker groep, krijg je een uitvoer zoals deze:

Output
docker: Cannot connect to the Docker daemon. Is the docker daemon running on this host?. See 'docker run --help'.

Als je wilt voorkomen dat je telkens sudo moet typen wanneer je het docker commando uitvoert, voeg dan je gebruikersnaam toe aan de docker groep:

  1. sudo usermod -aG docker ${USER}

Om de nieuwe groepslidmaatschap toe te passen, log uit op de server en weer in, of typ het volgende:

  1. su - ${USER}

U wordt gevraagd om het wachtwoord van uw gebruiker in te voeren om door te gaan.

Bevestig dat uw gebruiker nu is toegevoegd aan de docker groep door het volgende te typen:

  1. groups
Output
sammy sudo docker

Als u een gebruiker aan de docker groep moet toevoegen waarbij u niet bent ingelogd, geef dan die gebruikersnaam expliciet op met:

  1. sudo usermod -aG docker username

De rest van dit artikel gaat ervan uit dat u de docker opdracht uitvoert als een gebruiker in de docker groep. Als u ervoor kiest dit niet te doen, voeg dan sudo toe aan het begin van de commando’s.

Laten we nu de docker opdracht verkennen.

Stap 3 — Het gebruik van de Docker-opdracht

Het gebruik van docker bestaat uit het doorgeven van een reeks opties en opdrachten gevolgd door argumenten. De syntax heeft de volgende vorm:

  1. docker [option] [command] [arguments]

Om alle beschikbare subopdrachten te bekijken, typ:

  1. docker

Vanaf Docker-versie 20.10.14, omvat de volledige lijst met beschikbare subopdrachten:

Output
attach Attach local standard input, output, and error streams to a running container build Build an image from a Dockerfile commit Create a new image from a container's changes cp Copy files/folders between a container and the local filesystem create Create a new container diff Inspect changes to files or directories on a container's filesystem events Get real time events from the server exec Run a command in a running container export Export a container's filesystem as a tar archive history Show the history of an image images List images import Import the contents from a tarball to create a filesystem image info Display system-wide information inspect Return low-level information on Docker objects kill Kill one or more running containers load Load an image from a tar archive or STDIN login Log in to a Docker registry logout Log out from a Docker registry logs Fetch the logs of a container pause Pause all processes within one or more containers port List port mappings or a specific mapping for the container ps List containers pull Pull an image or a repository from a registry push Push an image or a repository to a registry rename Rename a container restart Restart one or more containers rm Remove one or more containers rmi Remove one or more images run Run a command in a new container save Save one or more images to a tar archive (streamed to STDOUT by default) search Search the Docker Hub for images start Start one or more stopped containers stats Display a live stream of container(s) resource usage statistics stop Stop one or more running containers tag Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE top Display the running processes of a container unpause Unpause all processes within one or more containers update Update configuration of one or more containers version Show the Docker version information wait Block until one or more containers stop, then print their exit codes

Om de opties die beschikbaar zijn voor een specifieke opdracht te bekijken, typ:

  1. docker docker-subcommand --help

Om systeembrede informatie over Docker te bekijken, gebruik:

  1. docker info

Laten we enkele van deze opdrachten verkennen. We beginnen met het werken met images.

Stap 4 — Werken met Docker-images

Docker-containers worden gebouwd van Docker-images. Standaard haalt Docker deze afbeeldingen op van Docker Hub, een Docker-register beheerd door Docker, het bedrijf achter het Docker-project. Iedereen kan zijn Docker-images hosten op Docker Hub, dus de meeste applicaties en Linux-distributies die je nodig hebt, zullen daar gehoste afbeeldingen hebben.

Om te controleren of je toegang hebt tot en afbeeldingen kunt downloaden van Docker Hub, typ je:

  1. docker run hello-world

De uitvoer zal aangeven dat Docker correct werkt:

Output
Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world 2db29710123e: Pull complete Digest: sha256:bfea6278a0a267fad2634554f4f0c6f31981eea41c553fdf5a83e95a41d40c38 Status: Downloaded newer image for hello-world:latest Hello from Docker! This message shows that your installation appears to be working correctly. ...

Docker kon in eerste instantie de hello-world-afbeelding niet lokaal vinden, dus het heeft de afbeelding van Docker Hub gedownload, wat het standaard repository is. Zodra de afbeelding is gedownload, heeft Docker een container gemaakt vanuit de afbeelding en werd de applicatie binnen de container uitgevoerd, waarbij het bericht werd weergegeven.

Je kunt zoeken naar beschikbare afbeeldingen op Docker Hub door het docker-commando te gebruiken met de search-subopdracht. Bijvoorbeeld, om te zoeken naar de Ubuntu-afbeelding, typ je:

  1. docker search ubuntu

Het script zal Docker Hub doorzoeken en een lijst teruggeven van alle afbeeldingen waarvan de naam overeenkomt met de zoekreeks. In dit geval zal de uitvoer vergelijkbaar zijn met dit:

Output
NAME DESCRIPTION STARS OFFICIAL AUTOMATED ubuntu Ubuntu is a Debian-based Linux operating sys… 14048 [OK] websphere-liberty WebSphere Liberty multi-architecture images … 283 [OK] ubuntu-upstart DEPRECATED, as is Upstart (find other proces… 112 [OK] neurodebian NeuroDebian provides neuroscience research s… 88 [OK] open-liberty Open Liberty multi-architecture images based… 51 [OK] ...

In de OFFICIËLE kolom, geeft OK aan dat het een afbeelding betreft die is gebouwd en ondersteund door het bedrijf achter het project. Zodra je de afbeelding hebt geïdentificeerd die je wilt gebruiken, kun je deze downloaden naar je computer met het pull subcommando.

Voer de volgende opdracht uit om de officiële ubuntu afbeelding naar je computer te downloaden:

  1. docker pull ubuntu

Je zult de volgende uitvoer zien:

Output
Using default tag: latest latest: Pulling from library/ubuntu e0b25ef51634: Pull complete Digest: sha256:9101220a875cee98b016668342c489ff0674f247f6ca20dfc91b91c0f28581ae Status: Downloaded newer image for ubuntu:latest docker.io/library/ubuntu:latest

Nadat een afbeelding is gedownload, kun je vervolgens een container uitvoeren met behulp van de gedownloade afbeelding met het run subcommando. Zoals je hebt gezien bij het hello-world voorbeeld, als een afbeelding nog niet is gedownload wanneer docker wordt uitgevoerd met het run subcommando, zal de Docker-client eerst de afbeelding downloaden en vervolgens een container uitvoeren met behulp ervan.

Om de afbeeldingen die naar je computer zijn gedownload te bekijken, typ je:

  1. docker images

De uitvoer zal er ongeveer als volgt uitzien:

Output
REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu latest 1d622ef86b13 3 weeks ago 73.9MB hello-world latest bf756fb1ae65 4 months ago 13.3kB

Zoals je later in deze tutorial zult zien, kunnen afbeeldingen die je gebruikt om containers uit te voeren worden aangepast en gebruikt om nieuwe afbeeldingen te genereren, die vervolgens kunnen worden geüpload (gepusht is de technische term) naar Docker Hub of andere Docker-registers.

Laten we eens kijken naar hoe je containers in meer detail kunt uitvoeren.

Stap 5 — Uitvoeren van een Docker-container

De hello-world container die je in de vorige stap hebt uitgevoerd, is een voorbeeld van een container die wordt gestart en afgesloten nadat hij een testbericht heeft afgegeven. Containers kunnen veel nuttiger zijn dan dat, en ze kunnen interactief zijn. Ze lijken immers op virtuele machines, maar dan vriendelijker voor de bronnen.

Als voorbeeld, laten we een container uitvoeren met behulp van de nieuwste image van Ubuntu. De combinatie van de -i en -t schakelaars geeft je interactieve shell-toegang tot de container:

  1. docker run -it ubuntu

Je opdrachtprompt zou moeten veranderen om aan te geven dat je nu binnen de container werkt, en zou dit moeten zijn:

Output
root@d9b100f2f636:/#

Merk de container-id op in de opdrachtprompt. In dit voorbeeld is het d9b100f2f636. Je hebt die container-ID later nodig om de container te identificeren wanneer je deze wilt verwijderen.

Nu kun je elk commando binnen de container uitvoeren. Laten we bijvoorbeeld de pakketdatabase binnen de container bijwerken. Je hoeft geen enkel commando vooraf te laten gaan door sudo, omdat je binnen de container werkt als de root gebruiker:

  1. apt update

Vervolgens installeer je een applicatie erin. Laten we Node.js installeren:

  1. apt install nodejs

Dit installeert Node.js in de container vanuit de officiële Ubuntu repository. Wanneer de installatie is voltooid, controleer dan of Node.js is geïnstalleerd:

  1. node -v

Je ziet het versienummer weergegeven in je terminal:

Output
v12.22.9

Alle wijzigingen die je binnen de container aanbrengt, gelden alleen voor die container.

Om de container te verlaten, typ exit bij de prompt.

Laten we nu eens kijken naar het beheren van de containers op ons systeem.

Stap 6 – Beheer van Docker Containers

Na een tijdje Docker te hebben gebruikt, zul je veel actieve (draaiende) en inactieve containers op je computer hebben. Om de actieve te bekijken, gebruik:

  1. docker ps

Je ziet een uitvoer vergelijkbaar met het volgende:

Output
CONTAINER ID IMAGE COMMAND CREATED

In deze handleiding heb je twee containers gestart; een vanuit de hello-world afbeelding en een andere vanuit de ubuntu afbeelding. Beide containers zijn niet langer actief, maar ze bestaan nog steeds op je systeem.

Om alle containers te bekijken – actief en inactief, voer docker ps uit met de -a schakelaar:

  1. docker ps -a

Je ziet een uitvoer vergelijkbaar met dit:

Output
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1c08a7a0d0e4 ubuntu "bash" About a minute ago Exited (0) 7 seconds ago dazzling_taussig 587000e49d53 hello-world "/hello" 5 minutes ago Exited (0) 5 minutes ago adoring_kowalevski

Om de laatst gemaakte container te bekijken, geef je hem de -l schakelaar:

  1. docker ps -l
Output
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1c08a7a0d0e4 ubuntu "bash" 3 minutes ago Exited (0) 2 minutes ago dazzling_taussig

Om een gestopte container te starten, gebruik docker start, gevolgd door de container-ID of de naam van de container. Laten we de op Ubuntu gebaseerde container starten met de ID van 1c08a7a0d0e4:

  1. docker start 1c08a7a0d0e4

De container zal starten, en je kunt docker ps gebruiken om de status te zien:

Output
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1c08a7a0d0e4 ubuntu "bash" 6 minutes ago Up 8 seconds dazzling_taussig

Om een draaiende container te stoppen, gebruik docker stop, gevolgd door de container-ID of naam. Deze keer zullen we de naam gebruiken die Docker aan de container heeft toegewezen, namelijk dazzling_taussig:

  1. docker stop dazzling_taussig

Zodra je hebt besloten dat je een container niet langer nodig hebt, verwijder je deze met het docker rm commando, opnieuw gebruikmakend van zowel de container-ID als de naam. Gebruik het docker ps -a commando om de container-ID of naam te vinden voor de container die is geassocieerd met de hello-world image en verwijder deze.

  1. docker rm adoring_kowalevski

Je kunt een nieuwe container starten en deze een naam geven met behulp van de --name schakelaar. Je kunt ook de --rm schakelaar gebruiken om een container te maken die zichzelf verwijdert wanneer deze wordt gestopt. Zie het docker run help commando voor meer informatie over deze opties en anderen.

Containers kunnen worden omgezet in images die je kunt gebruiken om nieuwe containers te bouwen. Laten we eens kijken hoe dat werkt.

Stap 7 — Veranderingen in een container committen naar een Docker-image

Wanneer je een Docker-image start, kun je bestanden maken, wijzigen en verwijderen, net zoals je kunt doen met een virtuele machine. De wijzigingen die je aanbrengt, zijn alleen van toepassing op die container. Je kunt deze starten en stoppen, maar zodra je deze vernietigt met het docker rm commando, zullen de wijzigingen voorgoed verloren gaan.

Deze sectie laat zien hoe je de staat van een container kunt opslaan als een nieuw Docker-image.

Na het installeren van Node.js binnen de Ubuntu-container heb je nu een container draaien op basis van een image, maar de container verschilt van het image dat je hebt gebruikt om het te maken. Maar je wilt mogelijk deze Node.js-container hergebruiken als basis voor nieuwe images later.

Vervolgens commit je de wijzigingen naar een nieuwe Docker-image-instantie met behulp van de volgende opdracht.

  1. docker commit -m "What you did to the image" -a "Author Name" container_id repository/new_image_name

De -m schakelaar is voor het commitbericht dat jou en anderen helpt te weten welke wijzigingen je hebt aangebracht, terwijl -a wordt gebruikt om de auteur te specificeren. De container_id is degene die je eerder in de tutorial hebt genoteerd toen je de interactieve Docker-sessie startte. Tenzij je extra repositories op Docker Hub hebt aangemaakt, is de repository meestal je Docker Hub-gebruikersnaam.

Bijvoorbeeld, voor de gebruiker sammy, met het container-ID d9b100f2f636, zou de opdracht zijn:

  1. docker commit -m "added Node.js" -a "sammy" d9b100f2f636 sammy/ubuntu-nodejs

Wanneer je een image committ, wordt het nieuwe image lokaal op je computer opgeslagen. Later in deze tutorial leer je hoe je een image naar een Docker-register zoals Docker Hub kunt pushen, zodat anderen er toegang toe hebben.

Als je de Docker-images opnieuw opsomt, zie je het nieuwe image, evenals het oude waarvan het is afgeleid:

  1. docker images

Je ziet output zoals deze:

Output
REPOSITORY TAG IMAGE ID CREATED SIZE sammy/ubuntu-nodejs latest 7c1f35226ca6 7 seconds ago 179MB ...

In dit voorbeeld is ubuntu-nodejs het nieuwe image, dat is afgeleid van het bestaande ubuntu-image van Docker Hub. Het grootteverschil weerspiegelt de gemaakte wijzigingen. En in dit voorbeeld was de wijziging dat NodeJS werd geïnstalleerd. Dus de volgende keer dat je een container moet uitvoeren met Ubuntu waarin NodeJS vooraf is geïnstalleerd, kun je gewoon het nieuwe image gebruiken.

Je kunt ook afbeeldingen bouwen vanuit een Dockerfile, waarmee je de installatie van software in een nieuwe afbeelding kunt automatiseren. Dat valt echter buiten de scope van deze tutorial.

Nu laten we de nieuwe afbeelding delen met anderen zodat ze containers ervan kunnen maken.

Stap 8 — Docker-afbeeldingen pushen naar een Docker-opslagplaats

De volgende logische stap na het maken van een nieuwe afbeelding vanuit een bestaande afbeelding is om deze te delen met een select aantal van je vrienden, de hele wereld op Docker Hub, of een andere Docker-opslagplaats waar je toegang toe hebt. Om een afbeelding naar Docker Hub of een andere Docker-opslagplaats te pushen, moet je daar een account hebben.

Om je afbeelding te pushen, log eerst in op Docker Hub.

  1. docker login -u docker-registry-username

Je wordt gevraagd om te authenticeren met behulp van je Docker Hub-wachtwoord. Als je het juiste wachtwoord hebt opgegeven, zou de authenticatie moeten slagen.

Opmerking: Als je Docker-opslagplaats gebruikersnaam verschilt van de lokale gebruikersnaam die je hebt gebruikt om de afbeelding te maken, moet je je afbeelding taggen met je opslagplaats gebruikersnaam. Voor het voorbeeld dat in de laatste stap is gegeven, zou je typen:

  1. docker tag sammy/ubuntu-nodejs docker-registry-username/ubuntu-nodejs

Vervolgens kun je je eigen afbeelding pushen met:

  1. docker push docker-registry-username/docker-image-name

Om de ubuntu-nodejs afbeelding naar de sammy opslagplaats te pushen, zou het commando zijn:

  1. docker push sammy/ubuntu-nodejs

Het proces kan enige tijd duren om te voltooien omdat het afbeeldingen uploadt, maar wanneer het is voltooid, zal de uitvoer er zo uitzien:

Output
The push refers to a repository [docker.io/sammy/ubuntu-nodejs] e3fbbfb44187: Pushed 5f70bf18a086: Pushed a3b5c80a4eba: Pushed 7f18b442972b: Pushed 3ce512daaf78: Pushed 7aae4540b42d: Pushed ...

Na het pushen van een afbeelding naar een register, moet deze worden vermeld op het dashboard van je account, zoals te zien is in de afbeelding hieronder.

Als een pushpoging resulteert in een fout van dit type, dan ben je waarschijnlijk niet ingelogd:

Output
The push refers to a repository [docker.io/sammy/ubuntu-nodejs] e3fbbfb44187: Preparing 5f70bf18a086: Preparing a3b5c80a4eba: Preparing 7f18b442972b: Preparing 3ce512daaf78: Preparing 7aae4540b42d: Waiting unauthorized: authentication required

Log in met docker login en herhaal de pushpoging. Controleer vervolgens of deze bestaat op de pagina van je Docker Hub-repository.

Je kunt nu docker pull sammy/ubuntu-nodejs gebruiken om de afbeelding naar een nieuwe machine te halen en deze te gebruiken om een nieuwe container uit te voeren.

Conclusie

In deze tutorial heb je Docker geïnstalleerd, gewerkt met afbeeldingen en containers, en een aangepaste afbeelding naar Docker Hub gepusht. Nu je de basisprincipes kent, verken de andere Docker tutorials in de DigitalOcean Community.

Source:
https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-22-04