005 - docker

1. Dateistruktur

1.1 Dockerfiles

Dockerfiles MÜSSEN unter docker/ im Projektroot angelegt werden.

Beispiel:

docker/
    php/
        Dockerfile
    database/
        Dockerfile
    nginx/
        Dockerfile
docker-compose.yml

2.1 .env Dateien

Es MUSS eine .env.dist angelegt werden, in der mindestens die folgenden Umgebungsvariablen definiert sind:

  • COMPOSE_PROJECT_NAME
  • DATABASE_PASSWORD - kann auch nach Bedarf anders benannt werden (POSTGRES_PASSWORD, MYSQL_ROOT_PASSWORD, MYSQL_PASSWORD)

Wenn eine production Konfiguration vorliegt, MUSS diese unter production.yml hinterlegt sein.

2. docker-compose

2.1 Allgemein

docker-compose.yml MUSS Version 3.7 haben.

3. Services

3.1 Nginx / Apache

Nginx oder Apache MÜSSEN über :8080 erreichbar sein. Sollten mehr Ports benötigt werden: :8081 bis :8089.

Der Service SOLLTE nach dem verwendeten Server benannt werden.

Beispiel:

  nginx:
    build:
      context: .
      dockerfile: ./docker/nginx/Dockerfile
    volumes:
      - ./src:/usr/src
      - ./docker/nginx/nginx.conf:/etc/nginx/nginx.conf
      - ./docker/nginx/sites/:/etc/nginx/sites-available
      - ./docker/nginx/conf.d/:/etc/nginx/conf.d            
    ports:
      - "8080:80"
      - "8081:81"
    depends_on: 
      - php-fpm

3.2 PHP

TBD

3.3 Datenbanken

Der Datenbankservice MUSS als db benannt sein.

Beispiel:

  db:
    build: 
      context: .
      dockerfile: ./docker/database/Dockerfile
    environment:
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
    volumes:
      - db-data:/var/lib/postgresql/data 

3.3 Adminer

Wenn das Projekt eine Datenbank verwendet, SOLLTE adminer als Service bereitgestellt werden.

Adminer MUSS über :8060 erreichbar sein.

Beispiel:

  adminer:
    image: adminer:4.7.5
    ports: ["8060:8080"]
    restart: on-failure

3.4 Chrome Selenium Standalone

Wenn Projekte Acceptance-Tests enthalten, MUSS das selenium/standalone-chrome-debug Image verwendet werden.

Beispiel:

  selenium-chrome:
    image: selenium/standalone-chrome-debug
    ports:
      - '4444:4444'
      - '5900:5900'
    environment:
      - no_proxy=""

3.5 Dokumentation

Wenn ein Projekt eine Dokumentation enthält, SOLLTE diese mit mkdocs umgesetzt werden.

Die Dokumentation MUSS unter :8000 erreichbar sein.

4. Volumes

Volumes MÜSSEN named sein.

Beispiel:

services:  
  db:
    build: 
      context: .
      dockerfile: ./docker/database/Dockerfile
    environment:
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
    volumes:
      - db-data:/var/lib/postgresql/data 
volumes:
  db-data: