Hoppa till innehåll
Installation

Installera Docker Compose

Språket som de andra serverguiderna är skrivna på: flera containrar i en textfil, med indenteringen och den farliga flaggan förklarade.

Senast granskad:

Vad Docker Compose är

Ett sätt att beskriva flera containrar i en enda textfil och starta dem tillsammans. Ett program med databas består sällan av en container, utan av två eller tre som måste känna till varandra. Att starta dem för hand i rätt ordning, med rätt inställningar, varje gång, är ett recept på att något blir fel.

Med Compose skriver du ner hela uppsättningen en gång i filen compose.yaml. Sedan är starten ett kommando, och den är likadan på varje dator som har filen.

Det är därför nästan varje serverguide i den här samlingen ber dig skapa just den filen. Compose är inte ett program du använder för sig, det är språket som de andra guiderna är skrivna på.

Du har det förmodligen redan

Compose följer med Docker sedan flera år tillbaka och installeras inte separat. Har du följt Installera Docker är du klar.

Kontrollera saken innan du installerar något. Öppna PowerShell på Windows eller Terminal på Linux Mint och skriv:

docker compose version

Får du ett versionsnummer behöver du inte göra något mer i det här avsnittet. Får du ett felmeddelande på Linux Mint installeras delen med:

sudo apt-get install docker-compose-v2

Paketet docker-compose-plugin finns bara i Dockers eget apt-förråd, inte i Mints. Har du följt Installera Docker och fått docker.io från Mints eget förråd heter paketet i stället docker-compose-v2, och det är den raden du ska köra.

På Windows finns Compose alltid med i Docker Desktop, så saknas det är det Docker Desktop som inte är installerat. Notera också att Docker Desktop kräver WSL2, alltså Windows inbyggda Linux. Det installeras normalt automatiskt, men blir du tillfrågad ska du svara ja.

En sak om skrivsättet. Äldre guider skriver docker-compose med bindestreck, vilket var ett eget program som numera är avvecklat. Nya skriver docker compose med mellanslag. Fungerar en rad du kopierat inte, kontrollera att du bytt bindestrecket mot ett mellanslag mellan docker och compose, inte tagit bort det. Skriver du ihop orden till dockercompose finns inget sådant kommando.

Så ser en fil ut

Skapa en mapp, och i den en textfil som heter exakt compose.yaml. Skriv:

services:
  webb:
    image: nginx
    ports:
      - "8080:80"

Öppna sedan terminalen i den mappen och kör docker compose up -d. Surfa till http://localhost:8080, så står webbservern där. Stäng av med docker compose down.

Raden "8080:80" läses från höger till vänster: containern lyssnar inuti på 80, och du når den utifrån på 8080. Den ordningen förväxlas ständigt, och då undrar man varför sidan inte svarar.

Tre saker att göra först

  1. Lär dig indenteringen, för det är den som fäller folk. Filformatet bygger på mellanslag i början av raderna, och tabbtecken är förbjudna. Använd två mellanslag per nivå och var konsekvent. Ett felmeddelande om yaml betyder nästan alltid att en rad har fel antal mellanslag.
  2. Kör docker compose config innan du kör up. Kommandot läser filen och skriver ut hur den tolkats, utan att starta något. Är den trasig får du veta det på en sekund i stället för efter en nedladdning på två minuter.
  3. Lär dig docker compose logs -f. Startar något inte är svaret där, alltid. Tryck Ctrl och C för att komma ur loggen, vilket inte stänger av något.

Den vanligaste fällan

Flaggan -v på slutet av docker compose down. Utan den stannar containrarna men all data ligger kvar i volymerna. Med den raderas volymerna, och databasen följer med i samma sekund. Ingen fråga, ingen bekräftelse.

Flaggan finns i mängder av guider på nätet, eftersom den är bekväm när man provar saker och vill börja om från rent bord. På den installation där ditt riktiga arbete ligger ska den aldrig användas. Vänj dig vid att skriva docker compose down och inget mer.

Den andra halvan är lösenord i filen. Ett databaslösenord skrivet rakt in i compose.yaml följer med när du lägger upp projektet på GitHub, och då är det inte längre ett lösenord. Lägg dem i en fil som heter .env bredvid, hänvisa till dem i compose-filen, och skriv upp .env i .gitignore. Fem minuters arbete som sparar en obehaglig upptäckt.

Varukorg

Laddar