GNU/Linux >> Znalost Linux >  >> Panels >> Docker

Od Docker Compose po Kubernetes s Podmanem

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
  1. Jak zabezpečit citlivá data pomocí tajemství Docker Compose

  2. Co je nového v Docker Compose v2?

  3. Co je Podman a jak se liší od Dockeru?

  1. Jak nainstalovat Jenkins pomocí Docker

  2. Jak používat Docker Compose

  3. Nainstalujte WordPress s Docker Compose, Nginx, Apache s SSL

  1. Co je Docker Compose

  2. Docker vs. Kubernetes

  3. Rychlý průvodce používáním Docker Compose