# Docker-vejledning for begyndere

I vores Docker-vejledning giver vi dig en introduktion til Docker-virtualiseringsplatformen og viser dig, hvordan du bruger Docker på dit Ubuntu 22.04-system ved hjælp af enkle, letforståelige instruktioner.

## Dockers opbygning og funktioner

»Byg, distribuer og kør enhver app, hvor som helst« – det er Dockers motto. Den open source-baserede containerplatform tilbyder et fleksibelt og ressourcebesparende alternativ til emulering af hardwarekomponenter baseret på virtuelle maskiner (VM’er).

Mens **traditionel hardwarevirtualisering** bygger på, at der kører flere gæstesystemer på et fælles værtsystem, kører Docker-applikationer som isolerede processer på det samme system ved hjælp af **containere**. Dette kaldes containerbaseret virtualisering, også kendt som **virtualisering på operativsystemniveau**.

[![Billede: Virtual machines and software containers in comparison](https://www.ionos.com/da-dk/digitalguide/fileadmin/_processed_/f/9/csm_virtual-machines-compared-to-docker-containers_1216df397f.webp "Virtual machines and software containers in comparison")](https://www.ionos.com/da-dk/digitalguide/fileadmin/DigitalGuide/Schaubilder/virtual-machines-compared-to-docker-containers.png) While each virtual machine launches its own operating system, Docker containers share the core of the host system En stor fordel ved containerbaseret virtualisering er, at applikationer med forskellige krav kan køre adskilt fra hinanden uden at kræve den ekstra belastning, som et separat gæstesystem medfører. Derudover kan applikationer med containere implementeres **på tværs af platforme og i forskellige infrastrukturer** uden at skulle tilpasses værtsystemets hardware- eller softwarekonfigurationer.

Docker er det mest populære softwareprojekt, der giver brugerne adgang til **containerbaseret virtualiseringsteknologi**. Den open source-baserede platform bygger på tre grundlæggende komponenter. For at kunne køre containere behøver brugerne blot **Docker-motoren** samt specielle **Docker-images**, som kan hentes via **Docker Hub** eller oprettes selv.

Tip Docker-containere og -billeder er for det meste generiske, men kan tilpasses i høj grad efter behov. Du kan læse mere om det i vores artikel om Docker-containere.

### Docker-billeder

Ligesom virtuelle maskiner er Docker-containere baseret på Docker-images. Et image er en skrivebeskyttet skabelon, der indeholder alle de instruktioner, som Docker-motoren har brug for til at oprette en container. Et Docker-image beskrives som et **bærbart billede af en container** i form af en tekstfil, også kaldet en Dockerfile. Hvis en container skal startes på et system, indlæses der først en pakke med det pågældende image, såfremt det ikke findes lokalt. Det indlæste billede leverer det nødvendige **filsystem inklusive alle parametre** til kørselstiden. En container kan betragtes som en kørende proces af et billede.

### Docker Hub

Docker Hub er et cloudbaseret **register for softwarearkiver**, en slags bibliotek for Docker-billeder. Onlinetjenesten er opdelt i en offentlig og en privat sektion. Den offentlige sektion giver brugerne mulighed for at uploade deres egne udviklede billeder og dele dem med fællesskabet. Her findes der en række officielle billeder fra Docker-udviklerteamet og etablerede open source-projekter. Billeder, der uploades til den private del af registret, er ikke offentligt tilgængelige og kan derfor deles, for eksempel inden for en virksomheds interne kreds eller med venner eller bekendte. Docker Hub kan tilgås på [*hub.docker.com*](https://hub.docker.com/ "Docker Hub website").

### Docker-motoren

Kernen i Docker-projektet er Docker-motoren. Det er et **open source-klient-server-program**, som i den aktuelle version er tilgængeligt for alle brugere på alle gængse platforme.

Docker-motorens grundlæggende arkitektur er opdelt i tre komponenter: En **daemon** med serverfunktioner, et **programmeringsgrænseflade (API)** baseret på REST-paradigmet (Representational State Transfer) og **operativsystemets terminal** (kommandolinjegrænseflade, CLI) som brugergrænseflade (klient).

- **Docker-daemon**: Som server for Docker-motoren anvendes en daemon-proces. Docker-daemonen kører i baggrunden på værtsystemet og bruges til den centrale styring af Docker-motoren. Denne funktion opretter og administrerer alle billeder, containere og netværk.
- **REST-API**: REST-API’en specificerer et sæt grænseflader, der gør det muligt for andre programmer at kommunikere med Docker-daemonen og give den instruktioner. Et af disse programmer er operativsystemets terminal.
- **Terminal**: Som klientprogram bruger Docker operativsystemets terminal. Dette, integreret med Docker-daemonen via REST-API’en, gør det muligt for brugere at styre den via scripts eller brugerinput.

Tip I 2017 blev Docker-motoren omdøbt til *Docker Community Edition* (forkortet til Docker CE), men den officielle dokumentation og Docker-repositorierne bruger for det meste stadig det gamle navn. Ud over Docker CE findes der også *Docker Enterprise Edition* (Docker EE), som indeholder en række avancerede funktioner. Den er dog ikke gratis og er derfor mere velegnet til virksomheder.

Med Docker-kommandoer kan brugerens softwarecontainere startes, stoppes og administreres direkte fra terminalen. Daemonen tilkaldes via kommandoen `docker` og kommandoer som `build`, `pull` eller `run`. Klient og server kan befinde sig på samme system. Brugere har også mulighed for at få adgang til en Docker-daemon på et andet system. Afhængigt af den type forbindelse, der oprettes, foregår kommunikationen mellem klienten og serveren via REST-API, via UNIX-sockets eller via en netværksgrænseflade.

Følgende figur illustrerer **samspillet mellem de enkelte Docker-komponenter** ved hjælp af eksempelkommandoerne `docker build`, `docker pull` og `docker run`:

[![Billede: Schematic representation of the Docker architecture](https://www.ionos.com/da-dk/digitalguide/fileadmin/_processed_/e/1/csm_docker-architecture-schematic_0cb6890f75.webp "Schematic representation of the Docker architecture")](https://www.ionos.com/da-dk/digitalguide/fileadmin/DigitalGuide/Schaubilder/docker-architecture-schematic.png) 'The Docker architecture is based on the cooperation of the client (terminal'), server (Docker-daemon) og register (Docker Hub).“ Kommandoen `docker build` instruerer Docker-daemonen om at oprette et image (stiplet linje). Til dette skal der foreligge en tilhørende **Dockerfile**. Hvis imaget ikke skal oprettes, men i stedet hentes fra et repository i Docker Hub, anvendes kommandoen `docker pull` (streglinje). Hvis Docker-daemonen via `docker run` får besked på at starte en container, kontrollerer baggrundsprogrammet, om det tilsvarende containerbillede er tilgængeligt lokalt. Hvis det er tilfældet, køres containeren (hel linje). Hvis daemonen ikke kan finde billedet, initierer den automatisk en pull fra repositoriet.

## Arbejde med Docker

Nu er det tid til at stifte bekendtskab med **containerplatformens applikationer**. Hvis du endnu ikke har installeret Docker-motoren, kan du gøre det via Linux-terminalen. Du kan finde vejledning i, hvordan du gør dette, i vores artikel med titlen»Installer Docker på Ubuntu 22.04«. Læs nedenfor, hvordan du styrer Docker-motoren fra terminalen, hvad Docker Hub kan gøre for dig, og hvorfor Docker-containere kan revolutionere den måde, du arbejder med applikationer på.

Tip Hvis du vil installere Docker på en anden Linux-distribution eller på Windows, kan du følge nedenstående vejledning:

- Installer Docker på Debian 11
- Installer Docker på Ubuntu 20.04
- Installer Docker på CentOS 7
- Installer Docker på Windows 10
- Installer Docker på Windows 11
- Installer Docker på Raspberry Pi

### Sådan styrer du Docker-motoren

Siden version 16.04 har Ubuntu brugt **baggrundsprogrammet *systemd***(forkortelse for »system daemon«) til at styre processer.*Systemd er*en init-proces, der også bruges i andre Linux-distributioner som RHEL, CentOS eller Fedora.*Systemd tildeles*typisk proces-ID 1. Som systemets første proces har daemonen til opgave at starte, overvåge og afslutte alle efterfølgende processer. I tidligere Ubuntu-versioner (14.10 og ældre) varetager baggrundsprogrammet*upstart* denne funktion.

Docker-daemonen kan også styres via *systemd*. I standardinstallationen er containerplatformen konfigureret således, at daemonen starter automatisk, når systemet startes op. Denne standardindstilling kan tilpasses via kommandolinjeværktøjet **systemctl**.

Med *systemctl* sender du kommandoer til *systemd* for at styre en proces eller hente dens status. Syntaksen for en sådan kommando er som følger:

```bash
systemctl [OPTION] [COMMAND]
```

Nogle kommandoer henviser til bestemte ressourcer (for eksempel Docker). I *systemd-terminologien* kaldes disse for enheder. I dette tilfælde består kommandoen af den pågældende instruktion og navnet på den enhed, der skal adresseres.

Hvis du vil aktivere (*enable*) eller deaktivere (*disable*) **autostart af Docker-daemonen**, skal du bruge kommandolinjeværktøjet *systemctl* med følgende kommandoer:

```bash
sudo systemctl enable docker
sudo systemctl disable docker
```

Kommandolinjeværktøjet *systemctl* giver dig mulighed for at tjekke **status for en enhed**:

```bash
sudo systemctl status docker
```

Hvis Docker-motoren på dit Ubuntu-system er aktiv, bør udskriften i terminalen se ud som på nedenstående skærmbillede:

[![Billede: The status query via systemctl shows: The Docker engine is active (running)](https://www.ionos.com/da-dk/digitalguide/fileadmin/_processed_/f/7/csm_docker-status-active-running_f52601bd11.webp "The status query via systemctl shows: The Docker engine is active (running)")](https://www.ionos.com/da-dk/digitalguide/fileadmin/DigitalGuide/Screenshots_2023/docker-status-active-running.png) Status query via systemctl: The Docker Engine is active (running) Hvis din Docker-motor i øjeblikket er deaktiveret, vil du se statusangivelsen *»inaktiv (død)*«. I dette tilfælde skal du manuelt starte Docker-daemonen for at kunne køre containere.

[![Billede: The status query via systemctl shows: The Docker engine is inactive (dead)](https://www.ionos.com/da-dk/digitalguide/fileadmin/_processed_/d/a/csm_docker-status-inactive_cad5668ee9.webp "The status query via systemctl shows: The Docker engine is inactive (dead)")](https://www.ionos.com/da-dk/digitalguide/fileadmin/DigitalGuide/Screenshots_2023/docker-status-inactive.png) Status query via systemctl: The Docker engine is inactive (dead) Hvis du vil **starte, stoppe eller genstarte din Docker-motor manuelt**, skal du bruge en af følgende kommandoer i *systemd*.

For at **starte den deaktiverede daemon** skal du bruge *systemctl* sammen med kommandoen `start`:

```bash
sudo systemctl start docker
```

Hvis **Docker-daemonen skal afsluttes**, skal du i stedet bruge kommandoen `stop`:

```bash
sudo systemctl stop docker
```

Der anmodes om en **genstart af motoren** med kommandoen `restart`:

```bash
sudo systemctl restart docker
```

### Sådan bruger du Docker Hub

Hvis Docker-motoren udgør hjertet i containerplatformen, så er Docker Hub sjælen i open source-projektet. Det er her, fællesskabet mødes. I det **cloudbaserede register** kan brugerne finde alt, hvad de har brug for, for at få liv i deres Docker-installation.

Onlinetjenesten tilbyder **en række officielle arkiver med over 100.000 gratis apps**. Brugerne har mulighed for at oprette et billedarkiv og dele det med arbejdsgrupper. Ud over den professionelle support, som udviklerteamet tilbyder, kan begyndere her finde kontakt til brugerfællesskabet. Der findes et forum for brugerstøtte på [**GitHub**](https://github.com/docker/hub-feedback/issues "Docker’s GitHub website").

[![Billede: The Docker hub: Registration](https://www.ionos.com/da-dk/digitalguide/fileadmin/_processed_/a/0/csm_docker-hub-login-page_d232488fe7.webp "The Docker hub: Registration")](https://www.ionos.com/da-dk/digitalguide/fileadmin/DigitalGuide/Screenshots_2023/docker-hub-login-page.png) Create your personal Docker ID for free by registering / Source: hub.docker.com #### Registrering på Docker Hub

**Det er gratis at oprette en konto på Docker Hub**. Brugere skal blot have en e-mailadresse og deres valgte Docker-ID. Dette fungerer senere som et personligt **repository-navneområde** og giver brugerne adgang til alle Docker-tjenester. I øjeblikket omfatter dette tilbud Docker Cloud, Docker Store og udvalgte betaprogrammer ud over Docker Hub. Det gør det også muligt at bruge **Docker-ID’et** som login til Docker Support Center samt Docker Success Portal og [Docker Forum](https://www.docker.com/community/ "Docker Community forum").

Registreringsprocessen består af fem trin:

1. **Vælg dit Docker-ID**: Som det første trin i tilmeldingen skal du vælge et brugernavn, der senere vil blive brugt som dit personlige Docker-ID.
2. **Indtast en e-mailadresse**: Indtast din nuværende e-mailadresse. Bemærk, at du skal bekræfte din registrering hos Docker Hub via e-mail.
3. **Vælg en adgangskode**: Vælg en hemmelig adgangskode.
4. **Indsend din registrering**: Klik på ‘Tilmeld’ for at indsende din registrering. Når dataene er blevet overført, sender Docker et link til din angivne indbakke, hvor du kan bekræfte din e-mailadresse.
5. **Bekræft din e-mailadresse**: Bekræft din e-mailadresse ved at klikke på bekræftelseslinket.

Docker-projektets onlinetjenester er tilgængelige med det samme, når du har tilmeldt dig i browseren. Her kan du oprette repositorier og arbejdsgrupper eller søge efter offentlige ressourcer på Docker Hub ved hjælp af funktionen »Explore«.

[![Billede: Dashboard of the Docker hub](https://www.ionos.com/da-dk/digitalguide/fileadmin/_processed_/f/a/csm_docker-hub-dashboard_1d08a8d15d.webp "Dashboard of the Docker hub")](https://www.ionos.com/da-dk/digitalguide/fileadmin/DigitalGuide/Screenshots_2023/docker-hub-dashboard.png) Select and set repositories and workgroups via the Docker hub dashboard / Source: hub.docker.com Du kan også logge ind direkte i dit operativsystems terminal ved hjælp af kommandoen *`docker login`*. Du finder en detaljeret beskrivelse af kommandoen i [Docker-dokumentationen](https://docs.docker.com/engine/reference/commandline/login/ "Docker documentation").

I princippet er Docker Hub også tilgængelig for brugere **uden en konto eller et Docker-ID**. I dette tilfælde kan man dog kun hente billeder fra offentlige repositorier. Det er ikke muligt at uploade (*push*) egne billeder uden et Docker-ID.

#### Opret repositorier i Docker Hub

Den **gratis Docker Hub-konto** indeholder ét privat repository og giver mulighed for at oprette et ubegrænset antal offentlige repositorier. Hvis du har brug for flere private repositorier, kan du få adgang til disse ved **at opgradere til en betalt version**.

Gør følgende for at oprette et arkiv:

1. **Vælg et navneområde**: Nyligt oprettede repositorier tildeles automatisk navneområdet for dit Docker-ID. Du har også mulighed for at indtaste ID’et for en organisation, som du er medlem af.
2. **Navngiv repositoriet**: Indtast et navn til det nyoprettede repository.
3. **Tilføj en beskrivelse**: Tilføj en kort beskrivelse af dit repository.
4. **Indstil synlighed**: Vælg, om repositoriet skal være offentligt synligt (*offentligt*) eller kun tilgængeligt for dig eller din organisation (*privat*).

Bekræft dine indtastninger ved at klikke på »Opret«.

[![Billede: The Docker hub: Input screen for creating a repository](https://www.ionos.com/da-dk/digitalguide/fileadmin/_processed_/a/d/csm_docker-hub-repository-creation_ac7984ce9d.webp "The Docker hub: Input screen for creating a repository")](https://www.ionos.com/da-dk/digitalguide/fileadmin/DigitalGuide/Screenshots_2023/docker-hub-repository-creation.png) Your repositories are automatically created in the namespace of your Docker ID / Source: hub.docker.com #### Opret teams og organisationer

Med hubben tilbyder Docker en cloudbaseret platform, hvor **brugerdefinerede billeder administreres centralt** og nemt **kan deles med arbejdsgrupper**. I Docker-terminologien kaldes disse for organisationer. Ligesom brugerkonti tildeles organisationer individuelle ID’er, som bruges til at stille billeder til rådighed og downloade dem. Rettigheder og roller inden for en organisation kan tildeles via teams. For eksempel har brugere, der er tilknyttet teamet »Owners«, beføjelse til at oprette private eller offentlige repositorier og tildele adgangsrettigheder.

Arbejdsgrupper kan også oprettes og administreres direkte via kontrolpanelet. Du kan finde yderligere oplysninger om organisationer og teams i [Docker-dokumentationen](https://docs.docker.com/docker-hub/orgs/ "Workgroups - Docker documentation").

### Arbejde med billeder og containere

Som det første kontaktpunkt for officielle Docker-ressourcer er Docker Hub vores udgangspunkt for denne **introduktion til håndtering af billeder og containere**. Udviklerteamet har stillet demo-billedet *»whalesay«* til rådighed, som vil danne grundlag for den følgende Docker-vejledning.

#### Download Docker-billeder

Du kan finde billedet *»whalesay«* ved at gå ind på Docker Hub-webstedet og skrive *»whalesay«* i søgefeltet ved siden af Docker-logoet.

[![Billede: The search function in Docker hub](https://www.ionos.com/da-dk/digitalguide/fileadmin/_processed_/c/c/csm_docker-hub-whalesay-repos_eae5c60dab.webp "The search function in Docker hub")](https://www.ionos.com/da-dk/digitalguide/fileadmin/DigitalGuide/Screenshots_2023/docker-hub-whalesay-repos.png) Search the Docker hub using the search bar or the ‘Explore’ button / Source: hub.docker.com Klik på ressourcen med titlen *docker/whalesay* i søgeresultaterne for at få adgang til det offentlige repository for dette billede.

Docker-arkiver er altid opbygget efter det samme mønster. Øverst på siden kan brugerne se billedets titel, arkivets kategori og tidspunktet for den seneste upload (*sidste push*).

[![Billede: Web view of a Docker repository](https://www.ionos.com/da-dk/digitalguide/fileadmin/_processed_/3/e/csm_docker-hub-official-whalesay-repo_2355257104.webp "Web view of a Docker repository")](https://www.ionos.com/da-dk/digitalguide/fileadmin/DigitalGuide/Screenshots_2023/docker-hub-official-whalesay-repo.png) In the repository, users generally find all information that is needed to use an image / Source: hub.docker.com Hvert Docker-repository indeholder desuden følgende infobokse:

1. **Beskrivelse**: Detaljeret beskrivelse, som normalt indeholder brugsanvisninger
2. **Docker pull-kommando**: Kommandolinjedirektiv, der bruges til at downloade billedet fra repositoriet (`pull`)
3. **Ejer**: Oplysninger om ophavsmanden til repositoriet
4. **Kommentarer**: Kommentarfelt nederst på siden

Oplysningerne i arkivets informationsfelter viser, at *whalesay* er en videreudvikling af open source-Perl-scriptet ***cowsay***. Programmet, der blev udviklet af Tony Monroe i 1999, genererer en ASCII-grafik i form af en ko, som vises sammen med en besked på brugerens terminal.

For at downloade *docker/whalesay* skal du bruge kommandoen `docker pull`:

```bash
docker pull [OPTIONS] NAME [:TAG|@DIGEST]
```

Kommandoen `docker pull` instruerer daemonen om at hente et image fra repositoriet. Du angiver, hvilket image der er tale om, ved at indtaste image-titlen (*NAME*). Du kan også angive over for Docker, hvordan den ønskede kommando skal udføres (*OPTIONS*). Valgfri indtastning omfatter **tags** (*:TAG*) og individuelle **identifikationsnumre** (*@DIGEST*), som giver dig mulighed for at downloade en bestemt version af et image.

Man henter en lokal kopi af *docker/whalesay-billedet* med følgende kommando:

```bash
docker pull docker/whalesay
```

Som udgangspunkt kan du springe dette trin over. Hvis du vil starte en container, henter Docker-daemonen automatisk de billeder fra arkivet, som den ikke kan finde på det lokale system.

#### Start Docker-billeder som containere

For at starte et Docker-billede skal du bruge kommandoen `docker run`:

```bash
docker run [OPTIONS] IMAGE [:TAG|@DIGEST] [CMD] [ARG...]
```

Den eneste obligatoriske del af kommandoen `docker run` er navnet på det ønskede Docker-billede. Men når du starter en container, har du også mulighed for at angive ekstra indstillinger, TAG’er og DIGEST’er. Derudover kan kommandoen `docker run` kombineres med andre kommandoer, der udføres, så snart containeren starter. I dette tilfælde overskrives **CMD** (COMMAND, defineret af billedskaberen og udført automatisk, når containeren startes). Andre valgfri konfigurationer kan defineres gennem **yderligere argumenter** (*ARG…*). Dette gør det for eksempel muligt at tilføje brugere eller overføre miljøvariabler.

Brug kommandolinjedirektivet

```bash
docker run docker/whalesay cowsay boo
```

for at downloade det eksisterende Perl-script som et billede og køre det i en container. Du vil se, at *whalesay* adskiller sig markant fra kildescriptet.

[![Billede: Terminal output of the container docker/whalesay: The whale says ‘boo’](https://www.ionos.com/da-dk/digitalguide/fileadmin/_processed_/e/4/csm_docker-run-whalesay-boo-english_82f28f20b7.webp "Terminal output of the container docker/whalesay: The whale says ‘boo’")](https://www.ionos.com/da-dk/digitalguide/fileadmin/DigitalGuide/Screenshots_2023/docker-run-whalesay-boo-english.png) If docker/whalesay is run with the standard command, the Docker whale is limited to a short ‘boo’ Hvis billedet *docker/whalesay* køres, viser scriptet en ASCII-grafik i form af en hval samt tekstbeskeden »boo«, som sendes via kommandoen *cowsay* i terminalen.

Ligesom ved testkørslen søger daemonen først efter det ønskede billede i det lokale filmappe. Da der ikke findes en pakke med samme navn, igangsættes en hentning fra Docker-arkivet. Derefter starter daemonen det ændrede *cowsay-program*. Når dette er kørt færdigt, **lukkes containeren automatisk**.

Ligesom *cowsay* giver Dockers *whalesay* også mulighed for at gribe ind i programforløbet for at påvirke den tekst, der vises i terminalen. Prøv denne funktion ved at erstatte »boo« i kommandoen output med en vilkårlig tekststreng eller f.eks. en dårlig hval-vits.

```bash
sudo docker run docker/whalesay cowsay What did the shark say to the whale? What are you blubbering about?
```

[![Billede: Terminal output of the container docker/whalesay: A whale with an individual message](https://www.ionos.com/da-dk/digitalguide/fileadmin/_processed_/8/6/csm_docker-run-whalesay-joke_6337d3f36a.webp "Terminal output of the container docker/whalesay: A whale with an individual message")](https://www.ionos.com/da-dk/digitalguide/fileadmin/DigitalGuide/Screenshots_2023/docker-run-whalesay-joke.png) Make your Docker whale say whatever you want by placing words in his speech bubble #### Vis alle Docker-billeder på det lokale system

Hvis du ikke er sikker på, om du allerede har downloadet et bestemt billede, kan du få vist en **oversigt over alle billederne på din lokale computer**. Brug følgende kommandolinjekommando:

```bash
sudo docker image
```

Kommandoen `docker images` (alternativ `docker image ls`) viser alle lokale billeder, herunder filstørrelse, tag og billed-ID.

[![Billede: Overview of all images on the local system](https://www.ionos.com/da-dk/digitalguide/fileadmin/_processed_/3/9/csm_sudo-docker-images-empty_9806635619.webp "Overview of all images on the local system")](https://www.ionos.com/da-dk/digitalguide/fileadmin/DigitalGuide/Screenshots_2023/sudo-docker-images-empty.png) The overview displays the images hello-world and docker/whalesay Når du starter en container, downloades det underliggende billede som en kopi fra arkivet og gemmes permanent på din computer. Det sparer dig tid, hvis du senere vil bruge billedet. Der iværksættes kun en ny download, hvis billedkilden ændres, for eksempel hvis der er en nyere version tilgængelig i arkivet.

#### Vis alle containere på det lokale system

Hvis du vil få vist en **oversigt over alle containere**, der kører på dit system eller har kørt tidligere, skal du bruge kommandolinjekommandoen `docker ps` sammen med indstillingen `--all` (forkortet: `-a`):

```bash
sudo docker ps -a
```

[![Billede: Overview of all containers on the local system](https://www.ionos.com/da-dk/digitalguide/fileadmin/_processed_/5/a/csm_sudo-docker-ps-a-english_74f680383e.webp "Overview of all containers on the local system")](https://www.ionos.com/da-dk/digitalguide/fileadmin/DigitalGuide/Screenshots_2023/sudo-docker-ps-a-english.png) The overview shows all containers that have been launched on the Docker engine Terminaludskriften indeholder oplysninger som den pågældende **containers ID**, det underliggende **billede**, den **kommando**, der blev kørt, da containeren blev startet, **tidspunktet** for containerens opstart samt **status**.

Hvis du kun vil vise de containere, der i øjeblikket kører på dit system, skal du bruge kommandolinjedirektivet `docker ps` uden yderligere indstillinger:

```bash
sudo docker ps
```

I øjeblikket bør der dog ikke køre nogen containere på dit system.

#### Opret Docker-billeder

Som vores Docker-vejledning har vist, kan du finde billeder i Docker Hub, downloade dem og køre dem på ethvert system, hvor Docker-motoren er installeret. Men med Docker får du ikke kun adgang til det omfattende udvalg af apps, der findes i registret. Platformen byder også på en lang række muligheder for **at oprette dine egne billeder** og dele dem med andre udviklere.

I de indledende kapitler af denne Docker-vejledning har du allerede lært, at hvert Docker-billede er baseret på en **Dockerfile**. Du kan forestille dig Dockerfiles som en slags **skabelon til opbygning af billeder**. Det er enkle tekstfiler, der indeholder alle de instruktioner, Docker har brug for til at oprette et billede. I de følgende trin lærer du, hvordan du skriver en sådan Dockerfile og instruerer Docker i at bruge den som grundlag for dit eget billede.

1. **Opret en ny mappe**: Docker-udviklerteamet anbefaler, at der oprettes en ny mappe til hver Dockerfile. Under Linux kan man nemt oprette mapper i terminalen. Brug følgende kommandolinjekommando til at oprette en mappe med navnet *mydockerbuild*:

```bash
mkdir mydockerbuild
```

[![Billede: Ubuntu terminal: The command mkdir](https://www.ionos.com/da-dk/digitalguide/fileadmin/_processed_/4/8/csm_mkdir-mydockerbuild-english_b8f27a8820.webp "Ubuntu terminal: The command mkdir")](https://www.ionos.com/da-dk/digitalguide/fileadmin/DigitalGuide/Screenshots_2023/mkdir-mydockerbuild-english.png) Create new directories with the command mkdir 2. **Naviger i det nye bibliotek**: Brug kommandoen `cd` til at navigere i det nyoprettede arbejdsbibliotek.

```bash
cd mydockerbuild
```

[![Billede: Ubuntu terminal: The command cd](https://www.ionos.com/da-dk/digitalguide/fileadmin/_processed_/6/d/csm_cd-mydockerbuild-english_93ecadd291.webp "Ubuntu terminal: The command cd")](https://www.ionos.com/da-dk/digitalguide/fileadmin/DigitalGuide/Screenshots_2023/cd-mydockerbuild-english.png) With the help of the cd command, switch to another working directory 3. **Opret en ny tekstfil**: Du kan også nemt oprette tekstfiler via terminalen i Ubuntu. Brug til dette en editor som f.eks. Nano eller Vim. Opret en tekstfil med navnet *Dockerfile* i mappen *mydockerbuild*.

```bash
nano Dockerfile
```

[![Billede: Ubuntu terminal: Create text files with Nano](https://www.ionos.com/da-dk/digitalguide/fileadmin/_processed_/2/4/csm_nano-dockerfile-empty_b2b1b6195b.webp "Ubuntu terminal: Create text files with Nano")](https://www.ionos.com/da-dk/digitalguide/fileadmin/DigitalGuide/Screenshots_2023/nano-dockerfile-empty.png) The text editor Nano is preinstalled on all Ubuntu versions 4. **Skriv en Dockerfile**: Den nyoprettede tekstfil fungerer som en byggevejledning til dit egenudviklede image. I stedet for at programmere imaget fra bunden vil vi i denne Docker-vejledning bruge demo-imaget *docker/whalesay* som skabelon. Dette integreres ved hjælp af kommandoen *FROM* i din Dockerfile. Brug tagget *:latest* for at henvise til den nyeste version af imaget.

```none
FROM docker/whalesay:latest
```

Indtil videre fungerer *docker/whalesay* sådan, at du selv skriver teksten. I terminalen vises den nøjagtige tekst, du har indtastet, sammen med kommandoen til at starte containeren. Men det ville være mere interessant, hvis scriptet **automatisk** genererede ny tekst. Dette kan f.eks. gøres ved at bruge programmet *fortunes*, som findes på alle Linux-systemer. Den grundlæggende funktion af *fortunes* er at generere citater fra lykkekager og humoristiske aforismer. Brug følgende kommando til at opdatere dit nuværende lokale pakkeindeks og installere *fortunes*:

```none
RUN apt-get -y update && apt-get install -y fortunes
```

Definer derefter en *CMD-sætning*. Denne udføres efter *RUN-kommandoen*, medmindre den er blevet overskrevet af call (`docker run image CMD`). Brug følgende kommando til at køre programmet *fortunes* med optionen `-a` (‘Vælg fra alle databaser’) og vise resultatet via programmet *cowsay* i terminalen:

```none
CMD /usr/games/fortune -a | cowsay
```

Din Dockerfile skal se således ud:

```none
FROM docker/whalesay:latest
RUN apt-get -y update && apt-get install -y fortunes
CMD /usr/games/fortune -a | cowsay
```

Bemærk: **Kommandoer** i en Dockerfile skrives **altid med enkelt linjeafstand** og begynder altid med et nøgleord. Den underliggende syntaks er ikke skelnen mellem store og små bogstaver, så det er ligegyldigt, om du skriver med store eller små bogstaver. Der er dog fastlagt en ensartet brug af store bogstaver i nøgleordene.

[![Billede: The text editor Nano in the Ubuntu terminal](https://www.ionos.com/da-dk/digitalguide/fileadmin/_processed_/b/b/csm_nano-dockerfile-full_bd1796f06d.webp "The text editor Nano in the Ubuntu terminal")](https://www.ionos.com/da-dk/digitalguide/fileadmin/DigitalGuide/Screenshots_2023/nano-dockerfile-full.png) Control the text editor Nano via the key combinations given in the footer 1. **Gem tekstfil**: Gem din indtastning. Hvis du bruger Nano-editoren, skal du gemme med tastkombinationen \[CTRL\] + \[O\] og bekræfte med \[ENTER\]. Nano viser en meddelelse om, at der er skrevet tre linjer til den valgte fil. Luk teksteditoren med tastkombinationen \[CTRL\] + \[X\].
2. **Opret billede som Dockerfile**: For at oprette et billede fra en Dockerfile skal du først navigere til det bibliotek, hvor tekstfilen er placeret. Start oprettelsen af billedet med kommandolinjedirektivet `docker build`. Hvis du vil navngive billedet individuelt eller give det et tag, skal du bruge indstillingen `-t` efterfulgt af den ønskede kombination af label og tag. Standardformatet er `name:tag`.

I dette eksempel skal der oprettes et billede med navnet *docker-whale*:

```bash
docker build -t docker-whale .
```

Det sidste **punkt** angiver, at den underliggende Dockerfile findes i det valgte bibliotek. Du har også mulighed for at angive en filsti eller en URL til kildefilerne.

*Kompileringsprocessen* starter, så snart kommandoen bekræftes med \[ENTER\]. Først kontrollerer Docker-daemonen, om den har alle de filer, der skal til for at oprette billedet. I Docker-terminologi samles dette under betegnelsen »kontekst«.

Derefter findes Docker-billedet *»whalesay«* med mærket *:latest*:

Hvis den nødvendige kontekst til oprettelsen af billedet allerede findes i sin helhed, starter Docker-daemonen det billedskabelon, der er angivet via *FROM*, i en midlertidig container og går videre til den næste kommando i *Dockerfilen*. I det aktuelle eksempel er dette *RUN-kommando* en, som sørger for, at programmet *fortunes* installeres.

Ved afslutningen af hvert trin i billedoprettelsesprocessen tildeler Docker et **ID til det pågældende lag**, der oprettes i det pågældende trin. Det betyder, at hver linje i den underliggende Dockerfile svarer til et lag i det billede, der bygges på baggrund af den.

Når *RUN-kommandoen* er afsluttet, stopper Docker-daemonen den container, der er oprettet til den, sletter den og starter en ny midlertidig container til laget fra CMD-sætningen. Ved afslutningen af oprettelsesprocessen lukkes og slettes denne midlertidige container også. Docker viser ID’et for det nye billede:

```none
Successfully built a8f2048c9ab8
```

[![Billede: Ubuntu terminal: Status message during image creation](https://www.ionos.com/da-dk/digitalguide/fileadmin/_processed_/f/6/csm_sudo-docker-build-whale-english_d6b1eb3cf7.webp "Ubuntu terminal: Status message during image creation")](https://www.ionos.com/da-dk/digitalguide/fileadmin/DigitalGuide/Screenshots_2023/sudo-docker-build-whale-english.png) Docker images are created in multiple layers Dit nyoprettede billede kan findes under navnet *docker-whale* i oversigten over dine lokalt gemte billeder.

```bash
sudo docker images
```

[![Billede: Ubuntu terminal: Overview of all images](https://www.ionos.com/da-dk/digitalguide/fileadmin/_processed_/3/9/csm_docker-images-new-docker-whale_4a46337253.webp "Ubuntu terminal: Overview of all images")](https://www.ionos.com/da-dk/digitalguide/fileadmin/DigitalGuide/Screenshots_2023/docker-images-new-docker-whale.png) The newly created image in the image overview For at starte en container ud fra dit nyoprettede image skal du bruge kommandolinjeparameteren `sudo docker run` sammen med navnet på imaget:

```bash
sudo docker run docker-whale
```

Hvis billedet er blevet oprettet korrekt ud fra Dockerfilen, bør din hval nu inspirere dig med mere eller mindre vise ord. Bemærk: Hver gang du genstarter containeren, genereres der en ny sætning.

[![Billede: Container based on docker-whale: Text output in the terminal](https://www.ionos.com/da-dk/digitalguide/fileadmin/_processed_/1/1/csm_sudo-run-docker-whale-fortunes-english_3bfb9d5385.webp "Container based on docker-whale: Text output in the terminal")](https://www.ionos.com/da-dk/digitalguide/fileadmin/DigitalGuide/Screenshots_2023/sudo-run-docker-whale-fortunes-english.png) Thanks to fortunes, the ASCII whale now provides witty or wise phrases  Tip Du kan læse mere om, hvordan man opretter Docker-billeder, i vores separate artikel om emnet.

#### Mærk Docker-billeder, og upload dem til Docker Hub

Hvis du vil uploade dit brugerdefinerede *docker-whale-billede* til hubben og gøre det tilgængeligt for enten fællesskabet eller en arbejdsgruppe, skal du først knytte det til et repository med samme navn i dit eget personlige navneområde. I Docker-terminologien kaldes dette trin for **tagging**.

Gør følgende for at offentliggøre et billede på Docker Hub:

1. **Opret et repository**: Log ind på Docker Hub med dit Docker-ID og din personlige adgangskode, og opret et offentligt repository med navnet *docker-whale*.

[![Billede: The Docker hub: Entry form for creating a repository](https://www.ionos.com/da-dk/digitalguide/fileadmin/_processed_/3/3/csm_docker-hub-create-docker-whale-repo_1266f7d9ea.webp "The Docker hub: Entry form for creating a repository")](https://www.ionos.com/da-dk/digitalguide/fileadmin/DigitalGuide/Screenshots_2023/docker-hub-create-docker-whale-repo.png) Create a repository for your custom image / Source: hub.docker.com 2. **Find billed-ID’et**: Find ID’et for dit brugerdefinerede billede *»docker-whale«* ved hjælp af kommandolinjeparameteren `docker images`.

[![Billede: Overview of all local images in the Ubuntu terminal](https://www.ionos.com/da-dk/digitalguide/fileadmin/_processed_/5/a/csm_sudo-docker-images-id-english_265f2f9d16.webp "Overview of all local images in the Ubuntu terminal")](https://www.ionos.com/da-dk/digitalguide/fileadmin/DigitalGuide/Screenshots_2023/sudo-docker-images-id-english.png) The command docker images lists all images that are saved on your system I vores tilfælde er billed-id’et *a8f2048c9ab8*. Det skal vi bruge til mærkning i næste trin.

3. **Mærk billedet**: Mærk billedet *»docker-whale«* ved hjælp af kommandolinjeprogrammet `docker tag` som beskrevet nedenfor:

```bash
sudo docker tag [Image-ID][Docker-ID]/[Image-Name]:[TAG]
```

I dette eksempel lyder kommandolinjedirektivet til mærkning således:

```bash
sudo docker tag a8f2048c9ab8 [Namespace]/docker-whale:latest
```

Du kan kontrollere, om du har tagget dit billede korrekt, ved hjælp af oversigten `docker images`. Navnet på repositoriet bør nu indeholde dit Docker-ID.

[![Billede: Ubuntu terminal: Image overview before and after tagging](https://www.ionos.com/da-dk/digitalguide/fileadmin/_processed_/6/e/csm_sudo-docker-tag-docker-whale-english_d2345804e2.webp "Ubuntu terminal: Image overview before and after tagging")](https://www.ionos.com/da-dk/digitalguide/fileadmin/DigitalGuide/Screenshots_2023/sudo-docker-tag-docker-whale-english.png) Link images with your Docker ID using the command docker tag 4. **Upload billedet**: For at uploade billedet skal du først logge ind på Docker Hub. Dette gøres ved hjælp af kommandoen `docker login`.

```bash
sudo docker login
```

Terminalen beder dig derefter om at indtaste dit brugernavn (Docker-ID) og din adgangskode.

[![Billede: Log in to the Docker hub via the Ubuntu terminal](https://www.ionos.com/da-dk/digitalguide/fileadmin/_processed_/3/3/csm_sudo-docker-login-english_77fe04ede0.webp "Log in to the Docker hub via the Ubuntu terminal")](https://www.ionos.com/da-dk/digitalguide/fileadmin/DigitalGuide/Screenshots_2023/sudo-docker-login-english.png) Before you can upload an image to the Docker hub, you first need to log in Hvis loginet lykkedes, skal du bruge kommandolinjeparameteren `docker push` til at uploade dit billede til det nyoprettede arkiv.

```bash
sudo docker push [Namespace]/docker-whale
```

Overførslen tager kun et par sekunder. Den aktuelle status vises i terminalen.

[![Billede: Ubuntu terminal: Status message of the image upload](https://www.ionos.com/da-dk/digitalguide/fileadmin/_processed_/c/a/csm_sudo-docker-push-whale-english_44b31ef5fd.webp "Ubuntu terminal: Status message of the image upload")](https://www.ionos.com/da-dk/digitalguide/fileadmin/DigitalGuide/Screenshots_2023/sudo-docker-push-whale-english.png) After uploading, the image is available under the set tag latest in the Docker hub Log ind på Docker Hub via browseren for at se det uploadede billede.

[![Billede: Docker hub: The repository [Namespace]/docker-whale in the detailed view](https://www.ionos.com/da-dk/digitalguide/fileadmin/_processed_/5/e/csm_docker-hub-push-result_56530d8ebc.webp "Docker hub: The repository [Namespace]/docker-whale in the detailed view")](https://www.ionos.com/da-dk/digitalguide/fileadmin/DigitalGuide/Screenshots_2023/docker-hub-push-result.png) The latest update of your repository is shown in the detailed view / Source: hub.docker.com Hvis du vil uploade mere end ét billede pr. repository, skal du bruge forskellige tags for at tilbyde dine billeder i forskellige versioner. For eksempel:

```none
[Namespace]/docker-whale:latest
[Namespace]/docker-whale:version1
[Namespace]/docker-whale:version2
```

Du kan finde en oversigt over de forskellige billedversioner i Docker Hub-repositoriet under fanen »Tags«.

[![Billede: Docker hub: The ‘Tags’ tab](https://www.ionos.com/da-dk/digitalguide/fileadmin/_processed_/3/9/csm_docker-hub-multiple-versions-tags_e6c43a478d.webp "Docker hub: The ‘Tags’ tab")](https://www.ionos.com/da-dk/digitalguide/fileadmin/DigitalGuide/Screenshots_2023/docker-hub-multiple-versions-tags.png) In the ‘Tags’ tab, you’ll find all versions of an image / Source: hub.docker.com Billeder fra de forskellige projekter bør dog lægges i separate arkiver.

Hvis overførslen lykkedes, vil dit brugerdefinerede billede nu være tilgængeligt i det offentlige arkiv for alle Docker-brugere verden over.

1. **Testkørsel**: Test, om uploaden er lykkedes, ved at forsøge at downloade billedet.

Bemærk, at den lokale version af billedet først skal slettes, før du kan downloade en ny kopi med samme tag. Ellers vil Docker meddele, at det ønskede billede allerede findes i den aktuelle version.

[![Billede: The Image is up to date](https://www.ionos.com/da-dk/digitalguide/fileadmin/_processed_/f/0/csm_sudo-docker-pull-docker-whale-english_84e2e758c4.webp "The Image is up to date")](https://www.ionos.com/da-dk/digitalguide/fileadmin/DigitalGuide/Screenshots_2023/sudo-docker-pull-docker-whale-english.png) If an image exists locally, the pull command is cancelled For at slette det lokale Docker-billede skal du bruge kommandolinjekommandoen `docker rmi` sammen med det tilhørende billed-ID. Dette fastlægges som sædvanlig via `docker images`. Hvis Docker melder en konflikt, f.eks. fordi et billed-ID bruges i flere repositorier eller i en container, skal du gentage kommandoen med parameteren `--force` (forkortet\*-f\* ) for **at tvinge sletningen igennem**.

```bash
sudo docker rmi -f a8f2048c9ab8
```

[![Billede: Command docker rmi in combination with the option -f (force)](https://www.ionos.com/da-dk/digitalguide/fileadmin/_processed_/b/f/csm_sudo-docker-rmi-remove-image_75b679b119.webp "Command docker rmi in combination with the option -f (force)")](https://www.ionos.com/da-dk/digitalguide/fileadmin/DigitalGuide/Screenshots_2023/sudo-docker-rmi-remove-image.png) Use the command docker rmi in combination with the option -f to force a deletion Vis en oversigt over alle lokale billeder igen:

```bash
sudo docker Images
```

De slettede elementer bør ikke længere vises i terminaludskriften. Brug nu kommandoen »pull« fra repositoriet til at hente en **ny kopi af billedet** fra Docker Hub.

```bash
sudo docker pull [Namespace]/docker-whale
```

[![Billede: Ubuntu terminal: Download from the Docker hub](https://www.ionos.com/da-dk/digitalguide/fileadmin/_processed_/4/8/csm_sudo-docker-pull-image-redownload_3dfb6af27f.webp "Ubuntu terminal: Download from the Docker hub")](https://www.ionos.com/da-dk/digitalguide/fileadmin/DigitalGuide/Screenshots_2023/sudo-docker-pull-image-redownload.png) The previously published image is successfully downloaded ## Yderligere emner og vejledninger om Docker

Docker-universet er stort, og med tiden [er der opstået](https://www.ionos.com/da-dk/digitalguide/server/know-how/docker-vaerktoejer-oekosystemet-omkring-containerplatformen/) et levende [økosystem omkring Docker-værktøjerne](https://www.ionos.com/da-dk/digitalguide/server/know-how/docker-vaerktoejer-oekosystemet-omkring-containerplatformen/). Docker er særligt nyttigt for systemadministratorer, især hvis de administrerer komplekse applikationer med flere containere, der kører sideløbende på forskellige systemer. Docker tilbyder en række funktioner til **orkestrering** af netop sådanne klynger. Du kan finde mere information om dette i vores artikel om Docker-orkestrering med Swarm og Compose.

Den digitale guide indeholder **yderligere vejledninger** til brug af Docker:

- Opsætning af et Docker-repository
- Docker-container-volumener
- Docker: Sikkerhedskopiering og gendannelse
- Installation og kørsel af Docker på en Linux-server
- Vejledning i Docker Compose

Docker egner sig til **mange forskellige anvendelsesscenarier**. I den digitale guide finder du følgende vejledninger:

- [Implementering af WordPress i Docker-containere](https://www.ionos.com/da-dk/digitalguide/server/know-how/wordpress-i-docker-containere/)
- Kør en VPN i en Docker-container ved hjælp af SoftEther
- Nextcloud-installation med Docker
- Installer Portainer under Docker
- Redis i Docker-containere
- Valheim Docker-server

Docker er ikke altid det bedste valg til alle applikationer. I en af vores artikler gennemgår vi de mest populære [alternativer til Docker](https://www.ionos.com/da-dk/digitalguide/server/know-how/oversigt-over-alternativer-til-docker/). Derudover har vi mange artikler, der sammenligner Docker med andre platforme:

- Kubernetes kontra Docker
- Openshift vs. Docker
- Podman vs. Docker


This is a markdown version of: [https://www.ionos.com/da-dk/digitalguide/server/konfiguration/docker-vejledning-installation-og-de-foerste-skridt/](https://www.ionos.com/da-dk/digitalguide/server/konfiguration/docker-vejledning-installation-og-de-foerste-skridt/) for AI/LLM consumption.