Back to "Använda Docker Komposit för utvecklingsberoenden"

This is a viewer only at the moment see the article on how this works.

To update the preview hit Ctrl-Alt-R (or ⌘-Alt-R on Mac) or Enter to refresh. The Save icon lets you save the markdown file to disk

This is a preview from the server running through my markdig pipeline

Docker

Använda Docker Komposit för utvecklingsberoenden

Friday, 09 August 2024

Inledning

När vi utvecklade programvara brukade vi snurra upp en databas, en meddelande kö, en cache, och kanske några andra tjänster. Detta kan vara en smärta att hantera, särskilt om du arbetar på flera projekt. Docker Compose är ett verktyg som låter dig definiera och köra flera behållare Docker program. Det är ett bra sätt att hantera din utveckling beroenden.

I det här inlägget ska jag visa dig hur du använder Docker Compose för att hantera dina utvecklingsberoenden.

Förutsättningar

Först måste du installera docker skrivbord på vilken plattform du än använder. Du kan ladda ner den från här.

OBS: Jag har funnit att på Windows måste du verkligen köra Docker Desktop installationsprogram som administratör för att se till att det installeras korrekt.

Skapa en dockerkomponera fil

Docker Compose använder en YAML-fil för att definiera de tjänster du vill köra. Här är ett exempel på en enkel devdeps-docker-compose.yml fil som definierar en databastjänst och en e-posttjänst:

services: 
  smtp4dev:
    image: rnwood/smtp4dev
    ports:
      - "3002:80"
      - "2525:25"
    volumes:
      # This is where smtp4dev stores the database..
      - e:/smtp4dev-data:/smtp4dev
    restart: always
  postgres:
    image: postgres:16-alpine
    container_name: postgres
    ports:
      - "5432:5432"
    env_file:
      - .env
    volumes:
      - e:/data:/var/lib/postgresql/data  # Map e:\data to the PostgreSQL data folder
    restart: always	
networks:
  mynetwork:
        driver: bridge

Observera här att jag har specificerat volymer för att bevara data för varje tjänst, här har jag specificerat

    volumes:
      # This is where smtp4dev stores the database..
      - e:/smtp4dev-data:/smtp4dev
    volumes:
        - e:/data:/var/lib/postgresql/data  # Map e:\data to the PostgreSQL data folder

Detta säkerställer att uppgifterna finns kvar mellan transporterna av behållarna.

Jag specificerar också en env_file för postgres service. Detta är en fil som innehåller miljövariabler som skickas till behållaren. Du kan se en lista över miljövariabler som kan skickas till PostgreSQL-behållaren här. Här är ett exempel på en .env fil:

POSTGRES_DB=postgres
POSTGRES_USER=postgres
POSTGRES_PASSWORD=<somepassword>

Detta konfigurerar en standarddatabas, lösenord och användare för PostgreSQL.

Här kör jag också SMTP4Dev-tjänsten, detta är ett bra verktyg för att testa e-postfunktioner i ditt program. Du kan hitta mer information om det här.

Om du tittar i min appsettings.Developmet.json fil du ser Jag har följande konfiguration för SMTP-servern:

  "SmtpSettings":
{
"Server": "localhost",
"Port": 2525,
"SenderName": "Mostlylucid",
"Username": "",
"SenderEmail": "[email protected]",
"Password": "",
"EnableSSL": "false",
"EmailSendTry": 3,
"EmailSendFailed": "true",
"ToMail": "[email protected]",
"EmailSubject": "Mostlylucid"

}

Detta fungerar för SMTP4Dev och gör det möjligt för mig att testa denna funktionalitet (jag kan skicka till vilken adress som helst, och se e-posten i SMTP4Dev-gränssnittet på http://localhost:3002/).

När du är säker på att allt fungerar kan du testa på en riktig SMTP-server som GMAIL (t.ex. se här för hur man gör det)

Drift av tjänsterna

Köra de tjänster som definieras i devdeps-docker-compose.yml fil, du måste köra följande kommando i samma katalog som filen:

docker compose -f .\devdeps-docker-compose.yml up -d

Observera att du bör köra den från början så här. Detta säkerställer att du kan se konfigurationselementen som skickas in från .env En akt.

docker compose -f .\devdeps-docker-compose.yml config

Nu om du tittar i Docker Desktop kan du se dessa tjänster köras

Dockningsskrivbord

logo

©2024 Scott Galloway