#Doker skript
Doker je bash skript, který zjednodušuje práci s dockerem. Automatizuje několik docker a docker-compose příkazů.
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
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
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
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
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.
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) adocker-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>