/docker-helper

Helper script for use with docker

Primary LanguageJavaScript

#Doker skript

Doker je bash skript, který zjednodušuje práci s dockerem. Automatizuje několik docker a docker-compose příkazů.

Instalace

Stačí ho nalinkovat někam do PATH, např:

ln -s /home/franta/docker-helper/scripts/doker /usr/local/bin/doker

Cílový název příkazu lze samozřejmě měnit, záleží na pojmenování linku.

Ujistěte se, že je spustitelný:

chmod +x /home/franta/docker-helper/scripts/doker

Nezávislé stacky, síť, proxy

Aby se jednotlivé kontejnery nepraly s porty, používá se proxy a porty jednotlivých kontejnerů se nepublikují - přistupuje k nim pouze proxy.

V tomto projektu se používá proxy traefik.

Protože si ale jednotlivé stacky vytváří své vlastní docker sítě, je potřeba je všechny spojit do jedné, ať na sebe navzájem vidí. Výchozí docker síť "bridge" však toto neumí, proto se musí vytvořit nová - tento helper využívá jméno sítě dev. Stačí ji vytvořit příkazem:

docker network create dev

Připojení stacku do proxy sítě

Na konec souboru docker-compose.yml přidat následující řádky:

networks:
  default:
    external:
      name: dev

Název sítě lze zvolit jakýkoliv, není nutné používat dev.

Na většině systémů funguje doménové jméno *.localhost, je vhodné jeho použití pro nastavení proxy. Ke kontejnerům v docker-compose.yml souboru je vhodné zrušit vypublikování portů a nastavit proxy:

version: "3"
services:
  my-container:
    # ...
    labels:
      - traefik.http.routers.my-container.rule=Host(`my_host.docker.localhost`)

Názvy my_service odpovídá názvu service z docker-compose.yml a my_host odpovídá jménu, které se bude zadávat do prohlížeče.

Pokud kontejner nepoužívá port 80, ale jiným je potřeba přidat label:

version: "3"
services:
  my-container:
    # ...
    labels:
      - traefik.http.routers.my-container.rule=Host(`mydomain.com`)
      # Tell Traefik to use the port 12345 to connect to `my-container`
      - traefik.http.services.my-service.loadbalancer.server.port=12345

Stacky nezávislé na projektech

Pokud chcete používat stacky nezávislé na projektech, je potřeba mít ENV proměnnou DOCKER_STACK_DIR. V té uloženou cestu k jednotlivým "stackům". Stačí tedy do ~/.bashrc (nebo ~/.zshrc podle shellu) přidat řádek:

export DOCKER_STACK_DIR=~/docker-helper/compose

Jeden takový stack "base" je připraven. Obsahuje:

  • traefik proxy
  • mysql - mariadb 10.2
  • adminer - správa db
  • mailhog - vývojový SMTP server

Spojení mezi jednotlivými kontejnery

Kontejnery budou v síti dev vidět na ostatní podle jejich jména. Proto pokud v docker-compose.yml bude toto nastavení:

version: '3'
services:
  adminer:
    container_name: adminer

  mysql:
    container_name: mysql

Tak z kontejneru adminer se půjde dostat do databáze při použití jména serveru mysql. Celé doménové jméno je nazev_kontejneru.nazev_site, neboli v tomto případě mysql.dev.

Příkazy

  • doker start <stack>
    • spustí stack na pozadí.
  • doker startf <stack>
    • spuští stack na popředí
  • doker stop <stack>
    • zastaví běžící stack
  • doker update <stack>
    • aktualizuje image ze stacku
    • pouští příkazy docker-compose pull (pro image z docker hubu) a docker-compose build --pull (pro image z lokalniho dockerfilu)
  • doker bash <kontejner>
  • doker sh <kontejner>
    • přejde do shellu v kontejneru (v alpinu většinou není bash, tam se použije sh)
    • stačí zadat část názvu - celý kontejner bude vyhledán. Pokud se kontejner jmenuje "muj_kontejner_php_fpm", stačí zadat příkaz doker bash php
    • pouští příkaz `docker exec -it bash <kontejner_id>