I vår Docker-hand­led­ning in­tro­du­ce­rar vi dig till vir­tu­a­li­se­rings­platt­for­men Docker och visar dig hur du använder Docker på ditt Ubuntu 22.04-system med hjälp av lätt­för­stå­e­li­ga in­struk­tio­ner.

Dockers struktur och funk­tio­ner

”Bygg, leverera och kör vilken app som helst, var som helst” – det är Dockers motto. Den öppna käll­kods­platt­for­men erbjuder ett flexibelt al­ter­na­tiv som kräver få resurser för emulering av hård­va­ru­kom­po­nen­ter baserade på virtuella maskiner (VM).

Medan tra­di­tio­nell hård­va­ruvir­tu­a­li­se­ring baseras på att starta flera gäst­sy­stem på ett gemensamt värd­sy­stem, körs Docker-ap­pli­ka­tio­ner som isolerade processer på samma system med hjälp av con­tain­rar. Detta kallas con­tai­ner­ba­se­rad vir­tu­a­li­se­ring, även kallad vir­tu­a­li­se­ring på ope­ra­tiv­system­ni­vå.

Bild: Virtual machines and software containers in comparison
While each virtual machine launches its own operating system, Docker con­tai­ners share the core of the host system

En stor fördel med con­tai­ner­ba­se­rad vir­tu­a­li­se­ring är att ap­pli­ka­tio­ner med olika krav kan köras isolerat från varandra utan att det krävs ett separat gäst­sy­stem. Dessutom kan ap­pli­ka­tio­ner med con­tain­rar dis­tri­bue­ras över platt­for­mar och i olika in­fra­struk­tu­rer utan att behöva anpassas till värd­sy­ste­mets hårdvaru- eller mjuk­va­ru­kon­fi­gu­ra­tio­ner.

Docker är det mest populära mjuk­va­ru­pro­jek­tet som förser användare med con­tai­ner­ba­se­rad vir­tu­a­li­se­rings­tek­nik. Den öppna käll­kods­platt­for­men bygger på tre grund­läg­gan­de kom­po­nen­ter. För att kunna köra con­tain­rar behöver an­vän­dar­na endast Docker-motorn samt speciella Docker-bilder, som kan hämtas via Docker Hub eller skapas av an­vän­dar­na själva.

Docker-bilder

I likhet med virtuella maskiner baseras Docker-con­tain­rar på Docker-bilder. En bild är en skriv­skyd­dad mall som in­ne­hål­ler alla in­struk­tio­ner som Docker-motorn behöver för att skapa en container. En Docker-bild beskrivs som en portabel bild av en container i form av en textfil, även kallad Doc­ker­fi­le. Om en container ska startas på ett system laddas först ett paket med re­spek­ti­ve bild, så länge den inte finns lokalt. Den laddade bilden till­han­da­hål­ler det nöd­vän­di­ga fil­sy­ste­met inklusive alla pa­ra­met­rar för körtiden. En container kan ses som en körande process av en bild.

Docker Hub

Docker Hub är ett moln­ba­se­rat register för pro­gram­varu­re­po­si­to­ri­er, en typ av bibliotek för Docker-bilder. On­li­ne­tjäns­ten är uppdelad i en offentlig och en privat del. Den of­fent­li­ga delen erbjuder an­vän­dar­na möjlighet att ladda upp sina egna ut­veck­la­de bilder och dela dem med com­mu­ni­tyn. Här finns ett antal of­fi­ci­el­la bilder till­gäng­li­ga från Docker-ut­vecklar­tea­met och eta­ble­ra­de open source-projekt. Bilder som laddas upp till den privata delen av registret är inte till­gäng­li­ga för all­män­he­ten och kan därför delas, till exempel inom ett företags interna krets eller med vänner eller bekanta. Docker Hub kan nås på hub.docker.com.

Docker-motorn

Kärnan i Docker-projektet är Docker-motorn. Det är en öppen käll­kodsap­pli­ka­tion för kli­entserv­rar som är till­gäng­lig för alla användare i den aktuella versionen på alla eta­ble­ra­de platt­for­mar.

Docker-motorns grund­läg­gan­de ar­ki­tek­tur är uppdelad i tre kom­po­nen­ter: en daemon med ser­ver­funk­tio­ner, ett pro­gram­me­rings­gräns­snitt (API) baserat på pro­gram­me­rings­pa­ra­dig­met REST (Re­pre­sen­ta­tio­nal State Transfer) och ope­ra­tiv­sy­ste­mets terminal (kom­man­do­rads­gräns­snitt, CLI) som an­vän­dar­gräns­snitt (klient).

  • Docker-daemon: Som server för Docker-motorn används en daemon-process. Docker-daemon körs i bak­grun­den på värd­sy­ste­met och används för central styrning av Docker-motorn. Denna funktion skapar och hanterar alla bilder, con­tain­rar eller nätverk.
  • REST-API: REST-API spe­ci­fi­ce­rar en upp­sätt­ning gräns­snitt som gör det möjligt för andra program att kom­mu­ni­ce­ra med Docker-daemon och ge den in­struk­tio­ner. Ett av dessa program är ope­ra­tiv­sy­ste­mets terminal.
  • Terminal: Som kli­ent­pro­gram använder Docker ope­ra­tiv­sy­ste­mets terminal. Denna är in­te­gre­rad med Docker-daemonen via REST-API, vilket gör det möjligt för användare att styra den via skript eller an­vän­da­rin­mat­ning.
Tips

2017 bytte Docker-motorn namn till Docker Community Edition (förkortat Docker CE), men den of­fi­ci­el­la do­ku­men­ta­tio­nen och Docker-arkiven använder fort­fa­ran­de mestadels det gamla namnet. Förutom Docker CE finns även Docker En­ter­pri­se Edition (Docker EE), som har vissa pre­mi­um­funk­tio­ner. Den är dock inte gratis och passar bättre för företag.

Med Docker-kommandon kan an­vän­dar­pro­gram­va­rucon­tain­rar startas, stoppas och hanteras direkt från ter­mi­na­len. Daemon adres­se­ras via kommandot docker och in­struk­tio­ner som build, pull eller run. Klient och server kan finnas på samma system. An­vän­dar­na har också möjlighet att komma åt en Docker-daemon på ett annat system. Beroende på vilken typ av an­slut­ning som upprättas sker kom­mu­ni­ka­tio­nen mellan klienten och servern via REST-API, via UNIX-socklar eller via ett nät­verks­gräns­snitt.

Följande bild il­lu­stre­rar samspelet mellan de enskilda Docker-kom­po­nen­ter­na med ex­em­pel­kom­man­do­na docker build, docker pull och docker run:

Bild: Schematic representation of the Docker architecture
'The Docker ar­chi­tectu­re is based on the coo­pe­ra­tion of the client (terminal'), server (Docker-daemon) och register (Docker hub).”

Kommandot docker build in­stru­e­rar Docker-daemonen att skapa en bild (prickad linje). För detta måste en mot­sva­ran­de Doc­ker­fi­le finnas till­gäng­lig. Om bilden inte ska skapas, utan istället laddas från ett arkiv i Docker Hub, används kommandot docker pull (streckad linje). Om Docker-daemonen in­strue­ras via docker run att starta en container, kon­trol­le­rar bak­grunds­pro­gram­met om mot­sva­ran­de con­tai­ner­bild finns till­gäng­lig lokalt. Om så är fallet körs con­tai­nern (heldragen linje). Om daemonen inte kan hitta bilden initierar den au­to­ma­tiskt en hämtning från arkivet.

Arbeta med Docker

Nu är det dags att bekanta sig med con­tai­ner­platt­for­mens ap­pli­ka­tio­ner. Om du ännu inte har in­stal­le­rat Docker-motorn kan du göra det via Linux-ter­mi­na­len. Du hittar in­struk­tio­ner om hur du gör detta i vår artikel med titeln”In­stal­le­ra Docker på Ubuntu 22.04”. Lär dig nedan hur du styr Docker-motorn från ter­mi­na­len, vad Docker Hub kan göra för dig och varför Docker-con­tain­rar kan re­vo­lu­tio­ne­ra ditt sätt att arbeta med ap­pli­ka­tio­ner.

Hur man styr Docker-motorn

Sedan version 16.04 har Ubuntu använt bak­grunds­pro­gram­met systemd(för­kort­ning för ”system daemon”) för att hantera processer.Systemd ären init-process som även används i andra Linux-dis­tri­bu­tio­ner som RHEL, CentOS och Fedora. Van­ligt­visfår systemdprocess-ID 1. Som systemets första process ansvarar daemon för att starta, övervaka och avsluta alla ef­ter­föl­jan­de processer. I tidigare Ubuntu-versioner (14.10 och äldre) övertar bak­grunds­pro­gram­metupstart denna funktion.

Docker-daemonen kan också styras via systemd. I stan­dardin­stal­la­tio­nen är con­tai­ner­platt­for­men kon­fi­gu­re­rad så att daemonen startar au­to­ma­tiskt när systemet startas upp. Denna stan­dardin­ställ­ning kan anpassas via kom­man­do­rads­verk­ty­get systemctl.

Med systemctl skickar du kommandon till systemd för att styra en process eller begära dess status. Syntaxen för ett sådant kommando är följande:

systemctl [OPTION] [COMMAND]
bash

Vissa kommandon hänvisar till specifika resurser (till exempel Docker). I systemd-ter­mi­no­lo­gin kallas dessa för enheter. I detta fall är kommandot re­sul­ta­tet av re­spek­ti­ve in­struk­tion och namnet på den enhet som ska adres­se­ras.

Om du vill aktivera autostart av Docker-daemonen (aktivera) eller in­ak­ti­ve­ra den (in­ak­ti­ve­ra), använd kom­man­do­rads­verk­ty­get systemctl med följande kommandon:

sudo systemctl enable docker
sudo systemctl disable docker
bash

Med kom­man­do­rads­verk­ty­get systemctl kan du fråga efter status för en enhet:

sudo systemctl status docker
bash

Om Docker-motorn på ditt Ubuntu-system är aktiv bör utdata i ter­mi­na­len se ut som på följande skärmdump:

Bild: The status query via systemctl shows: The Docker engine is active (running)
Status query via systemctl: The Docker Engine is active (running)

Om din Docker-motor för när­va­ran­de är in­ak­ti­ve­rad kommer du att få sta­tus­de­kla­ra­tio­nen inaktiv (död). I detta fall måste du starta Docker-daemonen manuellt för att köra con­tain­rar.

Bild: The status query via systemctl shows: The Docker engine is inactive (dead)
Status query via systemctl: The Docker engine is inactive (dead)

Om du vill starta, stoppa eller starta om din Docker-motor manuellt, använd systemd med något av följande kommandon.

För att starta den in­ak­ti­ve­ra­de daemonen, använd systemctl i kom­bi­na­tion med kommandot start:

sudo systemctl start docker
bash

Om Docker-daemonen ska avslutas, använd istället kommandot stop:

sudo systemctl stop docker
bash

En omstart av motorn begärs med kommandot restart:

sudo systemctl restart docker
bash

Hur man använder Docker Hub

Om Docker-motorn utgör hjärtat i con­tai­ner­platt­for­men, så är Docker Hub själen i open source-projektet. Det är här com­mu­ni­tyn möts. I det moln­ba­se­ra­de registret kan an­vän­dar­na hitta allt de behöver för att blåsa liv i sin Docker-in­stal­la­tion.

On­li­ne­tjäns­ten erbjuder olika of­fi­ci­el­la arkiv med mer än 100 000 gra­tisap­par. An­vän­dar­na har möjlighet att skapa ett bildarkiv och använda dem gemensamt med ar­bets­grup­per. Förutom det pro­fes­sio­nel­la stödet som ut­veck­lings­grup­pen erbjuder kan nybörjare här hitta kontakter till an­vän­dar­ge­men­ska­pen. Ett forum för ge­men­skaps­stöd finns till­gäng­ligt på GitHub.

Bild: The Docker hub: Registration
Create your personal Docker ID for free by re­gis­te­ring / Source: hub.docker.com

Re­gi­stre­ring i Docker Hub

Re­gi­stre­ring i Docker Hub är gratis. An­vän­dar­na behöver bara en e-post­a­dress och ett valfritt Docker-ID. Detta fungerar senare som ett per­son­ligt namn­om­rå­de för arkivet och ger an­vän­dar­na tillgång till alla Docker-tjänster. För när­va­ran­de omfattar detta er­bju­dan­de Docker Cloud, Docker Store och utvalda be­ta­pro­gram utöver Docker Hub. Det gör det också möjligt att använda Docker-ID:t för in­logg­ning på Docker Support Center, Docker Success Portal och Docker Forum.

Re­gi­stre­rings­pro­ces­sen består av fem steg:

  1. Välj ditt Docker-ID: Som första steg i ansökan väljer du ett an­vän­dar­namn som senare kommer att användas som ditt per­son­li­ga Docker-ID.
  2. Ange en e-post­a­dress: Ange din aktuella e-post­a­dress. Observera att du måste bekräfta din re­gi­stre­ring hos Docker Hub via e-post.
  3. Välj ett lösenord: Välj ett hemligt lösenord.
  4. Skicka in din re­gi­stre­ring: Klicka på “Re­gi­stre­ra dig” för att skicka in din re­gi­stre­ring. När upp­gif­ter­na har överförts kommer Docker att skicka en länk till din angivna inkorg så att du kan verifiera din e-post­a­dress.
  5. Bekräfta din e-post­a­dress: Bekräfta din e-post­a­dress genom att klicka på ve­ri­fi­e­rings­län­ken.

Docker-pro­jek­tets on­li­ne­tjäns­ter är till­gäng­li­ga direkt efter att du re­gi­stre­rat dig i webb­lä­sa­ren. Här kan du skapa arkiv och ar­bets­grup­per eller söka efter of­fent­li­ga resurser i Docker Hub med hjälp av funk­tio­nen ”Explore”.

Bild: Dashboard of the Docker hub
Select and set re­po­si­to­ri­es and work­groups via the Docker hub dashboard / Source: hub.docker.com

Du kan också re­gi­stre­ra dig direkt på ope­ra­tiv­sy­ste­mets terminal via docker login. En de­tal­je­rad be­skriv­ning av kommandot finns i Docker-do­ku­men­ta­tio­nen.

I princip är Docker Hub även till­gäng­ligt för dem som inte har ett konto eller Docker-ID. I detta fall kan dock endast bilder från of­fent­li­ga arkiv laddas. Det är inte möjligt att ladda upp (push) egna bilder utan ett Docker-ID.

Skapa arkiv i Docker Hub

Det kost­nads­fria Docker Hub-kontot in­ne­hål­ler ett privat arkiv och erbjuder möj­lig­he­ten att skapa ett obe­grän­sat antal of­fent­li­ga arkiv. Om du behöver fler privata arkiv kan du låsa upp dessa med en betald upp­gra­de­ring.

För att skapa ett arkiv, gör så här:

  1. Välj ett namn­om­rå­de: Nyskapade arkiv tilldelas au­to­ma­tiskt namn­om­rå­det för ditt Docker-ID. Du har också möjlighet att ange ID för en or­ga­ni­sa­tion som du tillhör.
  2. Namnge arkivet: Ange ett namn för det nyskapade arkivet.
  3. Lägg till en be­skriv­ning: Lägg till en kort be­skriv­ning av ditt arkiv.
  4. Ställ in synlighet: Bestäm om arkivet ska vara of­fent­ligt synligt (of­fent­ligt) eller endast till­gäng­ligt för dig eller din or­ga­ni­sa­tion (privat).

Bekräfta dina in­mat­ning­ar genom att klicka på “Skapa”.

Bild: The Docker hub: Input screen for creating a repository
Your re­po­si­to­ri­es are au­to­ma­ti­cal­ly created in the namespace of your Docker ID / Source: hub.docker.com

Skapa team och or­ga­ni­sa­tio­ner

Med hubben till­han­da­hål­ler Docker en moln­ba­se­rad plattform där själv­ska­pa­de bilder hanteras centralt och enkelt delas med ar­bets­grup­per. I Dockers ter­mi­no­lo­gi kallas dessa för or­ga­ni­sa­tio­ner. Precis som an­vän­dar­kon­ton får or­ga­ni­sa­tio­ner in­di­vi­du­el­la ID-nummer via vilka bilder kan till­han­da­hål­las och laddas ned. Rät­tig­he­ter och roller inom en or­ga­ni­sa­tion kan tilldelas via team. Användare som till­de­lats teamet ”Ägare” har till exempel be­hö­rig­het att skapa privata eller of­fent­li­ga arkiv och tilldela åt­komsträt­tig­he­ter.

Ar­bets­grup­per kan också skapas och hanteras direkt via in­stru­ment­pa­ne­len. Mer in­for­ma­tion om or­ga­ni­sa­tio­ner och team finns i Docker-do­ku­men­ta­tio­nen.

Arbeta med bilder och behållare

Som den första kon­takt­punk­ten för of­fi­ci­el­la Docker-resurser är Docker Hub vår ut­gångs­punkt för denna in­tro­duk­tion till hantering av bilder och con­tain­rar. Ut­vecklar­tea­met har till­han­da­hål­lit de­mo­bil­den whalesay, som kommer att fungera som grund för följande Docker-hand­led­ning.

Ladda ner Docker-bilder

Whalesay-bilden hittar du när du besöker Docker Hubs webbplats och skriver in termen whalesay i sökfältet bredvid Docker-logotypen.

Bild: The search function in Docker hub
Search the Docker hub using the search bar or the ‘Explore’ button / Source: hub.docker.com

I sökre­sul­ta­ten klickar du på resursen med titeln docker/whalesay för att komma åt det of­fent­li­ga arkivet för den här bilden.

Docker-arkiv byggs alltid enligt samma mönster. I sidans rubrik hittar an­vän­dar­na bildens titel, arkivets kategori och tid­punk­ten för den senaste upp­ladd­ning­en (senaste push).

Bild: Web view of a Docker repository
In the re­po­si­to­ry, users generally find all in­for­ma­tion that is needed to use an image / Source: hub.docker.com

Varje Docker-arkiv erbjuder också följande in­for­ma­tions­ru­tor:

  1. Be­skriv­ning: De­tal­je­rad be­skriv­ning, van­ligt­vis inklusive an­vänd­nings­an­vis­ning­ar
  2. Docker pull-kommando: Kom­man­do­rads­di­rek­tiv som används för att ladda ner bilden från arkivet (pull)
  3. Ägare: In­for­ma­tion om skaparen av arkivet
  4. Kom­men­ta­rer: Kom­men­tarav­snitt i slutet av sidan

In­for­ma­tions­ru­tor­na i arkivet visar att whalesay är en mo­di­fi­e­ring av det öppna käll­kods­pro­gram­met cowsay i Perl. Pro­gram­met, som ut­veck­la­des av Tony Monroe 1999, genererar en ASCII-grafik i form av en ko, som visas till­sam­mans med ett med­de­lan­de i an­vän­da­rens terminal.

För att ladda ner docker/whalesay, använd kommandot docker pull:

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

Kommandot docker pull in­stru­e­rar daemon att ladda en bild från arkivet. Du anger vilken bild det är genom att ange bildens titel (NAME). Du kan också instruera Docker om hur det önskade kommandot ska utföras (OPTIONS). Valfria in­mat­ning­ar in­klu­de­rar taggar (:TAG) och in­di­vi­du­el­la iden­ti­fi­ka­tions­num­mer (@DIGEST), som gör att du kan ladda ner en specifik version av en bild.

En lokal kopia av docker/whalesay -bilden erhålls med följande kommando:

docker pull docker/whalesay
bash

I allmänhet kan du hoppa över detta steg. Om du vill starta en container hämtar Docker-daemonen au­to­ma­tiskt bilderna från arkivet som den inte kan hitta på det lokala systemet.

Starta Docker-bilder som con­tain­rar

För att starta en Docker-bild använder du kommandot docker run:

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

Den enda ob­li­ga­to­ris­ka delen av kommandot docker run är namnet på den önskade Docker-bilden. Men när du startar en container har du också möjlighet att definiera extra al­ter­na­tiv, TAG:ar och DIGEST:ar. Dessutom kan kommandot docker run kom­bi­ne­ras med andra kommandon som körs så snart con­tai­nern startar. I detta fall skrivs CMD (COMMAND, de­fi­ni­e­rat av bild­ska­pa­ren och exekverat au­to­ma­tiskt när con­tai­nern startas) över. Andra valfria kon­fi­gu­ra­tio­ner kan de­fi­nie­ras genom yt­ter­li­ga­re argument (ARG…). Detta gör det möjligt att till exempel lägga till användare eller överföra mil­jö­va­ri­ab­ler.

Använd kom­man­do­rads­di­rek­ti­vet

docker run docker/whalesay cowsay boo
bash

för att ladda ner det be­fint­li­ga Perl-skriptet som en bild och köra det i en container. Du kommer att se att whalesay skiljer sig avsevärt från käll­skrip­tet.

Bild: Terminal output of the container docker/whalesay: The whale says ‘boo’
If docker/whalesay is run with the standard command, the Docker whale is limited to a short ‘boo’

Om bilden docker/whalesay körs, visar skriptet en ASCII-grafik i form av en val samt text­med­de­lan­det ”boo”, som skickas med kommandot cowsay i ter­mi­na­len.

Precis som vid test­kör­ning­en söker daemon först efter den önskade bilden i den lokala fil­ka­ta­lo­gen. Eftersom det inte finns något paket med samma namn initieras en hämtning från Docker-arkivet. Därefter startar daemon det mo­di­fi­e­ra­de cowsay-pro­gram­met. Om detta har körts klart avslutas con­tai­nern au­to­ma­tiskt.

Precis som cowsay erbjuder även Dockers whalesay möj­lig­he­ten att ingripa i pro­gram­se­kven­sen för att påverka tex­tut­mat­ning­en i ter­mi­na­len. Testa denna funktion genom att ersätta “boo” i ut­mat­nings­kom­man­dot med valfri sträng eller med ett dåligt valskämt, till exempel.

sudo docker run docker/whalesay cowsay What did the shark say to the whale? What are you blubbering about?
bash
Bild: Terminal output of the container docker/whalesay: A whale with an individual message
Make your Docker whale say whatever you want by placing words in his speech bubble

Visa alla Docker-bilder på det lokala systemet

Om du inte är säker på om du redan har laddat ner en viss bild kan du få en översikt över alla bilder på ditt lokala system. Använd följande kom­man­do­rads­di­rek­tiv:

sudo docker image
bash

Kommandot docker images (al­ter­na­tiv docker image ls) visar alla lokala bilder inklusive fil­stor­lek, tagg och bild-ID.

Bild: Overview of all images on the local system
The overview displays the images hello-world and docker/whalesay

Om du startar en container laddas den un­der­lig­gan­de bilden ned som en kopia från arkivet och lagras permanent på din dator. Detta sparar tid om du vill komma åt bilden vid ett senare tillfälle. En ny ned­ladd­ning initieras endast om bild­käl­lan ändras, till exempel om en aktuell version finns till­gäng­lig i arkivet.

Visa alla behållare på det lokala systemet

Om du vill visa en översikt över alla con­tain­rar som körs på ditt system eller har körts tidigare, använd kom­man­do­rads­di­rek­ti­vet docker ps i kom­bi­na­tion med al­ter­na­ti­vet --all (kort: -a):

sudo docker ps -a
bash
Bild: Overview of all containers on the local system
The overview shows all con­tai­ners that have been launched on the Docker engine

Ter­mi­nalut­mat­ning­en in­ne­hål­ler in­for­ma­tion som re­spek­ti­ve container-ID, den un­der­lig­gan­de bilden, kommandot som kördes när con­tai­nern startades, tid­punk­ten då con­tai­nern startades och status.

Om du bara vill visa de con­tain­rar som för när­va­ran­de körs på ditt system, använd kom­man­do­rads­di­rek­ti­vet docker ps utan några andra al­ter­na­tiv:

sudo docker ps
bash

För när­va­ran­de bör det dock inte finnas några aktiva con­tain­rar på ditt system.

Skapa Docker-bilder

Vår Docker-hand­led­ning har visat dig hur du hittar bilder i Docker Hub, laddar ner dem och kör dem på vilket system som helst där Docker-motorn är in­stal­le­rad. Men med Docker får du inte bara tillgång till det om­fat­tan­de utbudet av appar som finns i registret. Platt­for­men erbjuder också ett brett utbud av al­ter­na­tiv för att skapa egna bilder och dela dem med andra ut­veck­la­re.

I de inledande kapitlen i denna Docker-hand­led­ning har du redan lärt dig att varje Docker-bild baseras på en Doc­ker­fi­le. Du kan tänka dig Doc­ker­fi­les som en slags byggmall för bilder. Det är enkla textfiler som in­ne­hål­ler alla in­struk­tio­ner som Docker behöver för att skapa en bild. I följande steg lär du dig hur du skriver denna typ av Doc­ker­fi­le och in­stru­e­rar Docker att använda den som grund för din egen bild.

  1. Skapa ny katalog: Docker-ut­veck­lings­tea­met re­kom­men­de­rar att du skapar en ny katalog för varje Doc­ker­fi­le. Kataloger skapas enkelt i Linux-ter­mi­na­len. Använd följande kom­man­do­rads­di­rek­tiv för att skapa en katalog med namnet mydoc­ker­build:
mkdir mydockerbuild
bash
Bild: Ubuntu terminal: The command mkdir
Create new directo­ri­es with the command mkdir
  1. Navigera i den nya katalogen: Använd kommandot cd för att navigera i den nyskapade ar­betska­ta­lo­gen.
cd mydockerbuild
bash
Bild: Ubuntu terminal: The command cd
With the help of the cd command, switch to another working directory
  1. Skapa ny textfil: Du kan också enkelt skapa textfiler via ter­mi­na­len med Ubuntu. Använd en editor som Nano eller Vim för att göra detta. Skapa en textfil med namnet Doc­ker­fi­le i katalogen mydoc­ker­build.
nano Dockerfile
bash
Bild: Ubuntu terminal: Create text files with Nano
The text editor Nano is pre­instal­led on all Ubuntu versions
  1. Skriv Doc­ker­fi­le: Den nyskapade textfilen fungerar som en byggplan för din egen­ut­veck­la­de bild. Istället för att pro­gram­me­ra bilden från grunden kommer vi i denna Docker-hand­led­ning att använda de­mo­bil­den docker/whalesay som mall. Den in­te­gre­ras med kommandot FROM i din Doc­ker­fi­le. Använd taggen :latest för att hänvisa till den senaste versionen av bilden.
FROM docker/whalesay:latest

Hittills fungerar docker/whalesay genom att du matar in ord i dess mun. I ter­mi­na­len visas den exakta texten som du har angett i kom­bi­na­tion med kommandot för att starta con­tai­nern. Men det skulle vara mer in­tres­sant om skriptet au­to­ma­tiskt ge­ne­re­ra­de ny tex­tut­da­ta. Detta kan göras till exempel genom att använda pro­gram­met fortunes som finns på alla Linux-system. Den grund­läg­gan­de funk­tio­nen hos fortunes är att generera lyc­kokaksord­språk och hu­mo­ris­tis­ka aforismer. Använd följande kommando för att uppdatera ditt aktuella lokala pa­ke­tin­dex och in­stal­le­ra fortunes:

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

Definiera sedan ett CMD-uttryck. Detta exekveras efter RUN-kommandot, såvida det inte har skrivits över av anropet (docker run image CMD). Använd följande kommando för att köra fortunes-pro­gram­met med al­ter­na­ti­vet -a (”Välj från alla databaser”) och visa utdata via cowsay-pro­gram­met i ter­mi­na­len:

CMD /usr/games/fortune -a | cowsay

Din Doc­ker­fi­le bör se ut enligt följande:

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

Observera: Kommandon i en Doc­ker­fi­le har alltid enkel ra­dav­stånd och börjar alltid med ett nyckelord. Den un­der­lig­gan­de syntaxen är inte skift­lä­ges­käns­lig, så det spelar ingen roll om du skriver med stora eller små bokstäver. Det finns dock en fast­ställd regel för hur nyckelord ska skrivas.

Bild: The text editor Nano in the Ubuntu terminal
Control the text editor Nano via the key com­bi­na­tions given in the footer
  1. Spara textfil: Spara din inmatning. Om du använder Nano-re­di­ge­ra­ren sparar du med tan­gent­kom­bi­na­tio­nen [CTRL] + [O] och bekräftar med [ENTER]. Nano visar ett med­de­lan­de om att tre rader har skrivits till den valda filen. Stäng tex­tre­di­ge­ra­ren med tan­gent­kom­bi­na­tio­nen [CTRL] + [X].
  2. Skapa bild som Doc­ker­fi­le: För att skapa en bild från en Doc­ker­fi­le, navigera först till katalogen där textfilen finns. Starta bild­ska­pan­det med kom­man­do­rads­di­rek­ti­vet docker build. Om du vill namnge bilden in­di­vi­du­ellt eller förse den med en tagg, använd al­ter­na­ti­vet -t följt av önskad kom­bi­na­tion av etikett och tagg. Stan­dard­for­ma­tet är name:tag.

I det aktuella exemplet ska en bild med namnet docker-whale skapas:

docker build -t docker-whale .
bash

Den sista perioden indikerar att den un­der­lig­gan­de Doc­ker­fi­le finns i den valda katalogen. Du har också möjlighet att ange en filväg eller en URL för käll­fi­ler­na.

Bygg­pro­ces­sen startar så snart kommandot bekräftas med [ENTER]. Först kon­trol­le­rar Docker-daemonen om den har alla filer som behövs för att skapa bilden. I Docker-ter­mi­no­lo­gi sam­man­fat­tas detta under termen ”kontext”.

Då finns docker/whalesay -bilden med taggen :latest:

Om den nöd­vän­di­ga kontexten för bild­ska­pan­det redan finns i sin helhet, startar Docker-daemonen den bildmall som bifogats via FROM i en till­fäl­lig container och går vidare till nästa kommando i Doc­ker­fi­le. I det aktuella exemplet är detta RUN-kommandot, som gör att fortunes-pro­gram­met in­stal­le­ras.

I slutet av varje steg i bild­ska­pan­de­pro­ces­sen ger Docker dig ett ID för mot­sva­ran­de lager som skapats i steget. Detta innebär att varje rad i den un­der­lig­gan­de Doc­ker­fi­le motsvarar ett lager i den bild som byggts på den.

När RUN-kommandot är klart stoppar Docker-daemonen den container som skapats för det, tar bort den och startar en ny till­fäl­lig container för lagret i CMD-uttrycket. I slutet av ska­pan­de­pro­ces­sen avslutas och tas även denna till­fäl­li­ga container bort. Docker ger dig ID-numret för den nya bilden:

Successfully built a8f2048c9ab8
Bild: Ubuntu terminal: Status message during image creation
Docker images are created in multiple layers

Din nyskapade bild finns under namnet docker-whale i över­sik­ten över dina lokalt sparade bilder.

sudo docker images
bash
Bild: Ubuntu terminal: Overview of all images
The newly created image in the image overview

För att starta en container från din nyskapade image använder du kom­man­do­rads­di­rek­ti­vet sudo docker run i kom­bi­na­tion med namnet på imagen:

sudo docker run docker-whale
bash

Om bilden skapades korrekt från Doc­ker­fi­le bör din val nu inspirera dig med mer eller mindre kloka ord. Obs! Varje gång du startar om con­tai­nern genereras en ny fras.

Bild: Container based on docker-whale: Text output in the terminal
Thanks to fortunes, the ASCII whale now provides witty or wise phrases

Tagga Docker-bilder och ladda upp dem till Docker Hub

Om du vill ladda upp din anpassade docker-whale-bild till hubben och göra den till­gäng­lig för antingen com­mu­ni­tyn eller en ar­bets­grupp måste du först länka den till ett arkiv med samma namn i ditt eget per­son­li­ga namn­om­rå­de. I Docker-ter­mi­no­lo­gin kallas detta steg för taggning.

För att publicera en bild i Docker Hub, gör så här:

  1. Skapa ett arkiv: Logga in på Docker Hub med ditt Docker-ID och ditt per­son­li­ga lösenord och skapa ett of­fent­ligt arkiv med namnet docker-whale.
Bild: The Docker hub: Entry form for creating a repository
Create a re­po­si­to­ry for your custom image / Source: hub.docker.com
  1. Bestäm bild-ID: Bestäm ID för din anpassade bild docker-whale med hjälp av kom­man­do­rads­di­rek­ti­vet docker images.
Bild: Overview of all local images in the Ubuntu terminal
The command docker images lists all images that are saved on your system

I vårt fall är bild-ID:t a8f2048c9ab8. Vi behöver detta för taggning i nästa steg.

  1. Tagga bilden: Tagga docker-whale -bilden med kom­man­do­rads­pro­gram­met docker tag enligt följande:
sudo docker tag [Image-ID][Docker-ID]/[Image-Name]:[TAG]
bash

I det aktuella exemplet lyder kom­man­do­rads­di­rek­ti­vet för taggning:

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

Du kan kon­trol­le­ra om du har taggat din bild korrekt eller inte med hjälp av över­sik­ten docker images. Namnet på arkivet ska nu innehålla ditt Docker-ID.

Bild: Ubuntu terminal: Image overview before and after tagging
Link images with your Docker ID using the command docker tag
  1. Ladda upp bilden: För att ladda upp bilden måste du först logga in på Docker Hub. Detta kan göras med kommandot docker login.
sudo docker login
bash

Ter­mi­na­len uppmanar dig sedan att ange ditt an­vän­dar­namn (Docker-ID) och lösenord.

Bild: Log in to the Docker hub via the Ubuntu terminal
Before you can upload an image to the Docker hub, you first need to log in

Om in­logg­ning­en lyckades, använd kom­man­do­rads­di­rek­ti­vet docker push för att ladda upp din bild till det nyskapade arkivet.

sudo docker push [Namespace]/docker-whale
bash

Upp­ladd­ning­en bör bara ta några sekunder. Den aktuella statusen visas i ter­mi­na­len.

Bild: Ubuntu terminal: Status message of the image upload
After uploading, the image is available under the set tag latest in the Docker hub

Logga in på Docker Hub via webb­lä­sa­ren för att visa den upp­lad­da­de bilden.

Bild: Docker hub: The repository [Namespace]/docker-whale in the detailed view
The latest update of your re­po­si­to­ry is shown in the detailed view / Source: hub.docker.com

Om du vill ladda upp mer än en bild per arkiv, använd olika taggar för att erbjuda dina bilder i olika versioner. Till exempel:

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

En översikt över de olika bild­ver­sio­ner­na finns i Docker Hub-arkivet under fliken “Tags”.

Bild: Docker hub: The ‘Tags’ tab
In the ‘Tags’ tab, you’ll find all versions of an image / Source: hub.docker.com

Bilder av olika projekt bör dock erbjudas i separata arkiv.

Om upp­ladd­ning­en lyckades kommer din anpassade bild nu att vara till­gäng­lig i det of­fent­li­ga arkivet för alla Docker-användare över hela världen.

  1. Test­kör­ning: Testa om upp­ladd­ning­en lyckades genom att försöka ladda ner bilden.

Observera att den lokala versionen av bilden först måste raderas för att en ny kopia med samma tagg ska kunna laddas ner. Annars kommer Docker att rap­por­te­ra att den önskade bilden redan finns i den aktuella versionen.

Bild: The Image is up to date
If an image exists locally, the pull command is cancelled

För att radera den lokala Docker-bilden använder du kom­man­do­rads­di­rek­ti­vet docker rmi i kom­bi­na­tion med mot­sva­ran­de bild-ID. Detta bestäms som vanligt via docker images. Om Docker loggar en konflikt, t.ex. eftersom ett bild-ID används i flera arkiv eller används i en container, upprepar du kommandot med al­ter­na­ti­vet --force (-f förkortat) för att tvinga fram en radering.

sudo docker rmi -f a8f2048c9ab8
bash
Bild: Command docker rmi in combination with the option -f (force)
Use the command docker rmi in com­bi­na­tion with the option -f to force a deletion

Visa en översikt över alla lokala bilder igen:

sudo docker Images
bash

De borttagna elementen ska inte längre visas i ter­mi­nalut­mat­ning­en. Använd nu kommandot pull i arkivet för att ladda ner en ny kopia av bilden från Docker Hub.

sudo docker pull [Namespace]/docker-whale
bash
Bild: Ubuntu terminal: Download from the Docker hub
The pre­viously published image is suc­cess­ful­ly down­lo­a­ded

Yt­ter­li­ga­re Docker-ämnen och hand­led­ning­ar

Docker-uni­ver­su­met är stort och med tiden har ett levande ekosystem ut­veck­lats från Docker-verktygen. Docker är särskilt an­vänd­bart för ad­mi­nist­ra­tö­rer, framför allt om de hanterar komplexa ap­pli­ka­tio­ner med flera con­tain­rar pa­ral­lellt på olika system. Docker erbjuder olika funk­tio­ner för sam­ord­ning av sådana kluster. Mer in­for­ma­tion om detta finns i vår artikel om Docker-sam­ord­ning med Swarm och Compose.

Den digitala guiden in­ne­hål­ler yt­ter­li­ga­re hand­led­ning­ar för arbete med Docker:

  • Kon­fi­gu­re­ra ett Docker-arkiv
  • Docker-container volymer
  • Docker: Sä­ker­hetsko­pi­e­ring och åter­ställ­ning
  • In­stal­le­ra och köra Docker på en Linux-server
  • Docker Compose-hand­led­ning

Docker är lämpligt för olika tillämp­nings­sce­na­ri­er. Du hittar följande hand­led­ning­ar i den digitala guiden:

Docker är inte alltid det bästa valet för alla ap­pli­ka­tio­ner. En av våra artiklar behandlar de mest populära al­ter­na­ti­ven till Docker. Dessutom har vi många artiklar som jämför Docker med andra platt­for­mar:

  • Ku­ber­ne­tes vs. Docker
  • Openshift vs. Docker
  • Podman vs. Docker
Gå till huvudmeny