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.
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 ni 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 er skapa just den filen. Compose är inte ett program ni använder för sig, det är språket som de andra guiderna är skrivna på.
Ni har det förmodligen redan
Compose följer med Docker sedan flera år tillbaka och installeras inte separat. Har ni följt Installera Docker är ni klara.
Kontrollera saken innan ni installerar något. Öppna PowerShell på Windows eller Terminal på Linux Mint och skriv:
docker compose version
Får ni ett versionsnummer behöver ni inte göra något mer i det här avsnittet. Får ni 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 ni 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 ni 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 ni tillfrågade ska ni 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 ni kopierat inte, kontrollera att ni bytt bindestrecket mot ett mellanslag mellan docker och compose, inte tagit bort det. Skriver ni 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 ni 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
- Lär er 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
yamlbetyder nästan alltid att en rad har fel antal mellanslag. - Kör
docker compose configinnan ni körup. Kommandot läser filen och skriver ut hur den tolkats, utan att starta något. Är den trasig får ni veta det på en sekund i stället för efter en nedladdning på två minuter. - Lär er
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 ert riktiga arbete ligger ska den aldrig användas. Vänj er 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 ni 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.