/
Pack Hosting Panel

Docker basics

Wat is docker en hoe gebruik ik het bij Hipex


Wat is Docker

Docker is een set aan technieken waarmee je een applicatie in een geïsoleerde omgeving kan laten draaien. In plaats van dat we alle libraries voor je applicatie zoals libxml of openssl installeren, bepaal je precies welke versies er gebruikt worden. Dit gebeurt door de applicatie als container image in te pakken en deze container op de servers van Hipex te starten.

Voor het verdere gebruik van Docker bij Hipex gaan we er vanuit dat je bekend bent met de basis concepten van Docker. We hebben Docker ondersteuning ingebouwd via docker compose. Om docker te kunnen gebruiken gaan we er dus vanuit dat je bekend bent met zowel docker als docker compose.

Mocht dit niet het geval zijn raden we de officiële handleidingen van docker / docker compose aan. Deze zijn te vinden op: https://docs.docker.com/get-started/ en https://docs.docker.com/compose/gettingstarted/.

Gebruik bij Hipex

Security is natuurlijk een belangrijk onderdeel bij Hipex. Daarom hebben we een wrapper om de verschillende docker en docker-compose commando's gemaakt. Zo kun je altijd veilig gebruik maken van docker zonder dat je bang hoeft te zijn dat er iets gebeurd waardoor je de server stuk zou maken.

De commando's zijn onderdeel van de Hipex CLI en vallen onder de docker groep:

$ hipex | grep docker

Zie ook de uitleg over de verschillende commands:

Verder bevat Hipex CLI ook nog een aantal rechtstreekse docker commando's:

  • docker:login Login bij een (private) Docker registry
  • docker:ps Toon draaiende containers
  • docker:stats Toon een live stream van resource gebruik van de draaiende containers.

Compose file

Ook voor de docker-compose.yml wordt er een beperkte set van features ondersteund. Voor een uitleg van alle verschillende onderdelen zie: https://docs.docker.com/compose/compose-file/.

Alle onderdelen die worden ondersteund zijn:

#everything above 3.2 is supported
version: "3.2"

services:
    serviceA:
        # Alleen als string zonder opties
        image: redis
        # Als string of array
        command: "echo hoi"
        container_name: redisA
        depends_on:
        - serviceB
        # Als string of array
        dns: 1.1.1.1
        dns_search: example.com
        domainname: "service-a.com"
        # Als string of array
        entrypoint: "/bin/entry.sh test"
        # Als string of array
        env_file: ".env"
        # Standaard
        environment:
            NODE_ENV: prod 
        # Op host alleen tussen 10000 en 50000
        ports:
        - 10001:80
        # Standaard
        healthcheck:
            test: ["CMD", "curl", "-f", "http://localhost"]
            interval: 1m30s
            timeout: 10s
            retries: 3
            start_period: 40s
        # Standaard
        extra_hosts:
        - "service_redis"
        # Standaard
        hostname: service_redis_backend
        # Als string of array
        networks: internal
        # Standaard
        restart: always
        # Alleen anonymous volumes en padden waar de user zowel lees als schijfrechten heeft.
        volumes:
        - "data-serviceA:/data"
        - "./host-data:/host-data"
        
    # Deze service is dus ook valide
    serviceB:
        image: "elasticsearch"
        command: 
        - echo
        - hoi
        dns:
        - 1.1.1.1
        - 8.8.8.8
        dns_search:
        - dc1.example.com
        - dc2.example.com
        entrypoint:
        - /bin/entry.sh
        - test
        network:
        - internal
        - external

# Zonder options, bijvoorbeeld:
volumes:
    data-serviceA:

# Zonder options, bijvoorbeeld:
networks:
    internal: 
    external: 

Private registries

Om gebruik te maken van private registries dien je eerst in te loggen via het docker:login commando.

Backups

Wanneer je container volume's hebt die gebackuped moeten worden kun je deze plaatsen onder de domein folder. Wanneer je bijvoorbeeld jou elasticsearch configuratie hier ~/domains/example.com/elasticsearch/docker-compose.yml plaatst kun je een volume mount gebruiken voor het opslaan van de data.

version: "3.2"

services:
    elasticsearch:
        image: elasticsearch:7.8.0
        restart: "always"
        volumes:
        - ./data:/usr/share/elasticsearch/data
        environment:
            discovery.type: "single-node"
        ports:
        - "19200:9200"

Voor meer info over wat er wel en niet gebackuped wordt bekijk ons backup artikel.