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:
- docker:compose:down Stopt en verwijdert containers, networks, volumes en images.
- docker:compose:exec Run een commando vanuit een draaiende container.
- docker:compose:logs Volg & bekijk de output van draaiende container(s).
- docker:compose:restart Restart een draaiende container.
- docker:compose:run Start een "one-off" commando op een service.
- docker:compose:stop Stop draaiende containers zonder ze te verwijderen.
- docker:compose:up Start docker compose service(s).
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"
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:
Volgende onderdelen niet gebruiken
Binnen de docker-compose.yml
kun je geen gebruik maken van het volgende onderdeel:
container_name:
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.