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:
- Een Ubuntu 22.04-server opgezet door de Ubuntu 22.04 initiële serverinstallatiehandleiding te volgen, inclusief een
sudo
niet-root gebruiker en een firewall. - Een account op Docker Hub als je je eigen images wilt maken en naar Docker Hub wilt pushen, zoals getoond in Stappen 7 en 8.
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:
Installeer vervolgens een paar vereiste pakketten waarmee apt
pakketten via HTTPS kan gebruiken:
Voeg vervolgens de GPG-sleutel toe voor de officiële Docker-opslagplaats aan uw systeem toe:
Voeg de Docker-opslagplaats toe aan APT-bronnen:
Update opnieuw uw bestaande lijst met pakketten zodat de toevoeging wordt herkend:
Zorg ervoor dat u gaat installeren vanuit de Docker-opslagplaats in plaats van de standaard Ubuntu-opslagplaats:
Je zult output zien zoals dit, hoewel het versienummer voor Docker anders kan zijn:
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:
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:
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:
Outputdocker: 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:
Om de nieuwe groepslidmaatschap toe te passen, log uit op de server en weer in, of typ het volgende:
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:
Outputsammy sudo docker
Als u een gebruiker aan de docker
groep moet toevoegen waarbij u niet bent ingelogd, geef dan die gebruikersnaam expliciet op met:
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:
Om alle beschikbare subopdrachten te bekijken, typ:
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:
Om systeembrede informatie over Docker te bekijken, gebruik:
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:
De uitvoer zal aangeven dat Docker correct werkt:
OutputUnable 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:
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:
OutputNAME 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:
Je zult de volgende uitvoer zien:
OutputUsing 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:
De uitvoer zal er ongeveer als volgt uitzien:
OutputREPOSITORY 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:
Je opdrachtprompt zou moeten veranderen om aan te geven dat je nu binnen de container werkt, en zou dit moeten zijn:
Outputroot@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:
Vervolgens installeer je een applicatie erin. Laten we Node.js installeren:
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:
Je ziet het versienummer weergegeven in je terminal:
Outputv12.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:
Je ziet een uitvoer vergelijkbaar met het volgende:
OutputCONTAINER 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:
Je ziet een uitvoer vergelijkbaar met dit:
OutputCONTAINER 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:
OutputCONTAINER 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
:
De container zal starten, en je kunt docker ps
gebruiken om de status te zien:
OutputCONTAINER 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
:
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.
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.
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:
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:
Je ziet output zoals deze:
OutputREPOSITORY 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.
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:
Vervolgens kun je je eigen afbeelding pushen met:
Om de ubuntu-nodejs
afbeelding naar de sammy opslagplaats te pushen, zou het commando zijn:
Het proces kan enige tijd duren om te voltooien omdat het afbeeldingen uploadt, maar wanneer het is voltooid, zal de uitvoer er zo uitzien:
OutputThe 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:
OutputThe 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