# Att använda Docker Compose för utvecklings beroenden

<!--category-- Docker -->
<datetime class="hidden">2024-08-09T17:17</datetime>

# Inleiding

När man utvecklar mjukvara så gör vi traditionellt en databas, ,, ett meddelandens kö,,, ett kass, , och kanske några andra tjänster.. Det kan vara svårt att hantera, M SK5, speciellt om du arbetar med flera projekt, MSC6 Docker Compose är ett verktyg som låter dig definiera och köra flera Docker-applikationer icontainer.

I den här postan, visar jag er hur man använder Docker Compose för att sköta utvecklings beroenden

[TOC]

# Förberedelser

Först måste du installera dockaren på vilken plattform som helst som du använder. [här](https://www.docker.com/products/docker-desktop).

**NOTET: Jag' har funnit att på Windows behöver du verkligen köra Docker Desktop installer som administratör för att säkerställa att den installerar korrekt .**

# Att skapa en Docker Compose-Datei

Docker Compose använder en YAML-Datei för att definiera de tjänster du vill köra. `devdeps-docker-compose.yml` file som definierar en databas- och ett e-mailtjänster:

```yaml
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
```

Lägg märke till att här I' har specifikerat volymerna för att upprätthålla data för varje tjänst

```yaml
    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 gör att informationen förblir kvar mellan flödena av behållarna.

Jag specifikerar också `env_file` för `postgres` service. Detta är en file som innehåller miljövariabler som skickas till behållaren
Du kan se en lista av miljövariabler som kan skickas till PostgreSQL-containern [här](https://www.docker.com/blog/how-to-use-the-postgres-docker-official-image/#1-Environment-variables).
Här är ett exempel på `.env` file:

```shell
POSTGRES_DB=postgres
POSTGRES_USER=postgres
POSTGRES_PASSWORD=<somepassword>
```

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

Här kör jag också SMTP, det här är ett bra verktyg för att testa e-postfunktionen i din application. [här](https://github.com/rnwood/smtp4dev/wiki/Installation#how-to-run-smtp4dev-in-docker).

Om du tittar på min `appsettings.Developmet.json` file you'will see Jag har följande konfiguration för SMTP servern

```json
  "SmtpSettings":
{
"Server": "localhost",
"Port": 2525,
"SenderName": "Mostlylucid",
"Username": "",
"SenderEmail": "scott.galloway@gmail.com",
"Password": "",
"EnableSSL": "false",
"EmailSendTry": 3,
"EmailSendFailed": "true",
"ToMail": "scott.galloway@gmail.com",
"EmailSubject": "Mostlylucid"

}
```

Detta fungerar för SMTP4Dev och det gör att jag kan testa denna funktionalitet | ( | Jag kan skicka till vilken adress som helst |, | och se e-mailen i SMTP\ 4 | Dev gränssnittet på http |

När du är säker på att ' fungerar kan du testa den på en riktig SMTP server som GMAIL. [här](addingasyncsendingforemails) för hur man gör det

# Att köra tjänsterna

Att köra servicen som definieras i `devdeps-docker-compose.yml` file, du behöver köra följande kommandot i samma katalog som den

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

Kom ihåg att du bör köra den i början som detta; det här gör att du kan se konfigurationselementen som skickas in från `.env` file.

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

Om du nu tittar på Docker Desktop så kan du se dessa tjänster som körs

![Dockarens dator](dockerdesktopdev.png)