Nástroj Docker Compose byl cenný pro mnoho lidí, kteří pracovali s kontejnery. Podle dokumentace se Docker Compose popisuje jako:
... nástroj pro definování a spouštění vícekontejnerových aplikací. S Compose používáte soubor YAML ke konfiguraci služeb vaší aplikace. Poté jediným příkazem vytvoříte a spustíte všechny služby z vaší konfigurace.
Jedním z problémů s Docker Compose je, že formát souboru YAML funguje pouze s modulem Docker. I když jej můžete poskytnout ostatním uživatelům Dockeru pro místní replikaci, tito jej nemohou používat s jinými běhovými prostředími kontejneru. Tedy až doteď.
[ Související výukový program:Používání Podman a Docker Compose ]
S Podman 3.0 pracuje Docker Compose s backendem Podman
Skutečná síla Podman vynikne snadnou konverzí kontejnerů založených na Docker Compose na soubor Kubernetes YAML. Stejně jako Docker Compose může Podman použít soubor Kubernetes YAML k místní replikaci kontejnerů. Ještě důležitější je, že to umožňuje Podmanovi mít organizovaný modul a službu, kterou lze provozovat na mnoha platformách, včetně Kubernetes/OpenShift nebo minikube.
Tento článek vysvětluje proces zahájení s jednoduchým souborem Compose, který spouští WordPress pomocí dvou kontejnerů. Zdroj tohoto souboru Compose je publikován na GitHubu v úložišti úžasného skládání Docker. Úspěšné použití tohoto souboru s Podmanem má za následek, že se v prohlížeči objeví úvodní obrazovka WordPress.
Poznámka :V době psaní tohoto článku podporujeme pouze docker-compose
příkaz spuštěný rootově.
Spusťte systémovou službu Podman
Chcete-li použít Compose, prvním krokem je ujistit se, že jsou nainstalovány všechny požadované balíčky, a poté nastavit systémovou službu Podman (3.0 nebo vyšší) pomocí systemd
. Po instalaci balíčků povolte a spusťte Podman systemd
socket-activated service pomocí následujícího příkazu:
$ sudo systemctl enable --now podman.socket
Ověřte, že služba běží, klepnutím na koncový bod ping. Tento krok musí být úspěšný, než budete pokračovat.
$ sudo curl -H "Typ obsahu:application/json" --unix-socket /var/run/docker.sock http://localhost/_pingOK
Nyní můžete s jistotou spustit Compose s vědomím, že RESTful API funguje.
Spustit psaní
Jak již bylo zmíněno dříve, v příkladu se spustí soubor Compose skládající se ze dvou kontejnerů pro vyvolání relace WordPress. Jeden kontejner provozuje webovou službu Apache a druhý ukládá data do databáze MySQL. Tyto dva kontejnery komunikují přes TCP/IP přes síť vyhrazenou pro tuto instanci Compose. Chcete-li kontejnery zobrazit, spusťte docker-compose up
.
$ sudo docker-compose up -dVytvoření sítě "wordpress-mysql_default" s výchozím ovladačemVytvoření svazku "wordpress-mysql_db_data" s výchozím ovladačemVytažení db (mysql:8.0.19)...0c27e8e5fcfab7805575e7963b1cf3951905195199963305755e79963 z Docker.io/library/mysql:8.0.19 Pulling WordPress (WordPress:nejnovější) ... 0d35C2300EC845FDA141BA012F7C6DCCDE8F0AE106B8F4BB0FCFCED69380F851:PALLING ISCES (). .. hotovo
Použijte podman ps
příkaz k ověření, že byly vytvořeny dva kontejnery a nyní běží. Nebyl nutný žádný démon Docker.
$ sudo podman pscontainer id obrázek příkaz vytvořený stavové porty jmenovity089a40bb9ae docker.io/library/mysql:8.0.19 ---Default-Authent ... před 15 sekundami před 15 sekundami před 15 sekundami před 15 sekundami wordpress:latest apache2-foregroun... před 15 sekundami Nárůst před 15 sekundami 0.0.0.0:80->80/tcp competent_kilby$
Ověřte, že WordPress běží lokálně
Pokyny pro spuštění WordPress ukazují, že funguje správně a lze k němu přistupovat pomocí localhost a portu 80.
Vytvořte Kubernetes YAML
S fungující instancí WordPressu na místním počítači začněte proces replikace těchto kontejnerů na platformě Kubernetes. Podman dokáže generovat YAML na Kubernetes ze spuštěných kontejnerů.
[ Mohlo by se vám také líbit: Začněte se učit Kubernetes z místního počítače ]
Jeden pod nebo více podů?
Existují dva přístupy k vytvoření YAML, které použijete v prostředí Kubernetes:Buď umístěte dva kontejnery do jednoho podu se službou, nebo vytvořte dva pody s jedním kontejnerem v každém a službou pro odhalení frontendu Apache. Určení, který přístup je nejlepší, může vyžadovat určité pokusy a omyly.
Jedním aspektem, který může určovat, jaký přístup použít, je způsob, jakým budou nádoby nebo pody komunikovat. Když Compose vytvářel tyto kontejnery, prošel řadou kroků, aby se zajistilo, že tyto dva kontejnery mohou spolu komunikovat pomocí názvů DNS. Ve skutečnosti Compose nastavil aliasy na kontejnerech, které jsou rozpoznány jako názvy DNS při překladu kontejnerů podle názvu. Umístěním kontejnerů do stejného modulu není potřeba rozlišovat mezi nimi, protože sdílejí síťový jmenný prostor. Proto mohou jednoduše použít localhost komunikovat mezi sebou.
Umístění kontejnerů do různých modulů Kubernetes poskytuje lepší flexibilitu, ale kontejnery budou muset mezi sebou komunikovat pomocí nějakého jiného mechanismu.
Vygenerujte YAML
Abyste mohli začít vytvářet Kubernetes YAML, musíte znát názvy nebo ID kontejnerů. Rozhodněte, zda má Podman vygenerovat popis služby pro Kubernetes. V tomto případě vystavte frontend Apache, aby mohl komunikovat s WordPress pomocí prohlížeče. Použijte vygenerování kube podman
příkaz k vytvoření souborů YAML.
$ sudo podman vygenerovat kube -s -f wordpress.yaml a089a40bb9ae 510c028c273f
-s
v předchozím příkazu znamená, že Podman vygeneruje službu pro tento modul. -f
nám umožňuje uložit vygenerovaný YAML do souboru. V opačném případě je výstup odeslán do stdout , kde může být přesměrován do souboru.
$ cat wordpress.yaml# Uložte výstup tohoto souboru a pomocí kubectl create -f jej importujte# do Kubernetes.## Vytvořeno pomocí podman-3.0.0-devapiVersion:v1kind:Podmetadata: creationTimestamp:" 2020-12-03T22:30:07Z" štítky: app:kindhermann název:kindhermannspec: kontejnery: - příkaz: - docker-entrypoint.sh - --default-authentication-plugin=mysql_native_password název_env: - /local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin ... workingDir:/ - command: - docker-entrypoint.sh - apache2-foreground env: - název :PATH hodnota:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin ... - název:WORDPRESS_DB_HOST hodnota:kindhermann - název:WORDPRESS_DB_PASSWORD hodnota: - name:APACHE_ENVVARS hodnota:/etc/apache2/envvars ... obrázek:docker.io/library/wordpress:latest název:kompetentníkilby porty: - containerPort:80 hostPort:80 secu protokol:TCP rityContext:allowPrivilegeEscalation:true schopnosti:kapka:- CAP_MKNOD - CAP_NET_RAW privilegované:falešný readOnlyRootFilesystem:falešné seLinuxOptions:{} workingDir:/ var / www / htmlstatus:{} --- apiVersion:v1kind:Servicemetadata:creationTimestamp „2020-12- 03T22:30:07Z" labels: app:kindhermann name:kindhermannspec: ports: - name:"80" nodePort:30579 port:80 protokol:TCP targetPort:0 selector: Bacer app:kindhermannstat : kód>
Aby kontejner Apache mohl komunikovat s kontejnerem MySQL, autor souboru Compose se rozhodl použít proměnnou prostředí s názvem WORDPRESS_DB_HOST označující název hostitele kontejneru MySQL. Před spuštěním v prostředí Kubernetes změňte hodnotu WORDPRESS_DB_HOST na název kontejneru MySQL (kindhermann v tomto příkladu) nebo 127.0.0.1 (kontejnery ve stejném modulu spolu mohou komunikovat přes localhost).
... - název:WORDPRESS_DB_HOST hodnota:kindhermann OR 127.0.0.1---
Postranní panel:
Když Compose provádí sestavení
V mnoha příkladech Compose se autor rozhodl vytvořit image kontejneru. Je to obvykle proto, že vyžadují další balíčky nebo chtějí provést určitou úroveň přizpůsobení obrazu. Když k tomu dojde, bude v Podmanově úložišti obrázků další nový obrázek. Výběr spuštění výstupního Kubernetes YAML může selhat, protože odkazuje na obrázek kontejneru, který je přítomen pouze v místním úložišti.
K nápravě použijte podman push
přesunout tyto nové obrázky buď do globálního registru, jako je quay.io, nebo do registru specifického pro Kubernetes, aby Kubernetes mohl tyto obrázky stáhnout. Ujistěte se, že název obrázku ve výsledném souboru YAML je stejný jako název obrázku, který byl odeslán.
Kubernetes
Další krok v provádění tohoto příkladu a jeho použití v prostředí Kubernetes ukáže, jak spustit tento příklad na minikube i OpenShift. V YAML není nic konkrétního, co by bránilo podům spouštět se v jiném prostředí Kubernetes, takže by teoreticky mělo fungovat s jinými příchutěmi Kubernetes.
Tento článek předpokládá existenci prostředí minikube a/nebo OpenShift. Dokumentace nastavení prostředí minikube nebo OpenShift Kubernetes je mimo rozsah tohoto článku.
minikube
Prvním krokem k nasazení na minikube je jednoduše vytvořit modul.
$ minikube kubectl -- create -f wordpress.yamlpod/kindhermann createdservice/kindhermann created
Po několika sekundách zkontrolujte stav pouzdra a nádob. V závislosti na rychlosti a šířce pásma sítě může být modul již dostupný. Zkontrolujte stav podu pomocí kubectl get pods
.
$ minikube kubectl – získejte podsNAME READY STAV RESTARTUJE AGEkindhermann 2/2 Běží 0 28
Nyní, když jsou oba kontejnery připraveny, otestujte dostupnost relace WordPress. Nejprve získejte IP adresu podu v Kubernetes pomocí kubectl
.
$ minikube kubectl -- description pods | grep Node:Node: minikube/192.168.39.7
Nasměrujte svůj prohlížeč na IP adresu modulu a podívejte se na obrazovku nastavení WordPress.
OpenShift
V tomto článku je na GCP spuštěn cluster OpenShift.
Použijte vygenerovaný wordpress.yaml
vytvořit modul a službu. Pokud používáte vanilkové prostředí Kubernetes, nahraďte oc
s kubectl
v následujících příkazech.
$ oc create -f wordpress.yaml pod/kindhermann createdservice/kindhermann vytvořen
Počkejte několik sekund, než se modul a služba objeví. Kindhermann pod je Spuštěno stav s oběma kontejnery v provozu. Kindhermann služba je také dostupná s přiřazenou IP clusteru.
$ oc Připravte se status Potsname Restarts Agekindhermann 2/2 spuštění 0 39s $ OC Získejte ServiceName Type Cluster-IP Port (S) Agekindhermann NodePort 172.303.100 80:30579/TCP 45SKUBERNES CLUSTERS 172.30.0.1 443/TCP 44mopenshift . . ne . Net. ne Externí název lo Ku s 6 v
Zobrazte modul a službu v konzole.
Chcete-li ke službě přistupovat z vnějšku clusteru, odkryjte ji, čímž se vytvoří trasa.
$ oc Expose SVC/Kindhermannroute.route.openshift.io/Kindhermann Exposed $ OC/KuBectl Získat RoutesName Host/Port Path Services Termination WildcardKindhermann Kindhermann-Default.Apps.Ci-tn-D3GW292-F76D1.ORIGIN -ci-int-gce.dev.openshift.com kindhermann 80 Žádné
Zpřístupněním služby byla vytvořena výše uvedená trasa hostitele/portu a přístup k tomuto koncovému bodu. Zobrazte stránku nastavení aplikace WordPress spuštěné v clusteru OpenShift nebo Kubernetes.
Prozkoumejte trasu v konzole a také odtud přímo přistupujte ke koncovému bodu.
[ Získejte tuto bezplatnou e-knihu:Správa clusterů Kubernetes pro figuríny. ]
Sbalit
Jak můžete vidět, přesun konfigurací pracovní zátěže z prostředí Docker Compose do Kubernetes je s Podmanem 3.0 přímočarý. Podman nejenže poskytuje flexibilitu Docker Compose při vývoji aplikací, ale také usnadňuje přechod na Kubernetes, když jsou aplikace připraveny na velkou ligu. To vše pomocí generování kube podman
příkaz. Vyzkoušejte si to sami ve třech jednoduchých krocích.
Docker