Docker Compose: Makefile'ları Kullanarak Çalışmanızı Basitleştirme

Her birkaç yılda bir, yazılım geliştirme endüstrisi bir paradigma değişikliğine uğrar. Bu olgulardan biri, mikro hizmet kavramına artan ilgi olarak kabul edilebilir. Mikro hizmetler en yeni teknoloji olmasa da, popülaritesi ancak son zamanlarda kelimenin tam anlamıyla hızla arttı.

Büyük monolitik hizmetlerin yerini artık bağımsız, özerk mikro hizmetler alıyor. Mikro hizmet, tek ve çok özel bir amaca hizmet eden bir uygulama olarak düşünülebilir. Örneğin ilişkisel bir DBMS, Express uygulaması, Solr hizmeti olabilir.

Docker Compose: Makefile'ları Kullanarak Çalışmanızı Basitleştirme

Bugünlerde mikro hizmetler kullanmadan yeni bir yazılım sistemi geliştirmeyi hayal etmek zor. Bu durum da bizi Docker platformuna götürüyor.

liman işçisi

platform liman işçisiMikro hizmetlerin geliştirilmesi ve dağıtımında neredeyse bir endüstri standardı haline geldi. Proje web sitesinde Docker'ın, kuruluşların herhangi bir uygulamayı zahmetsizce oluşturmasına ve bunları hibrit bulutlardan uç sistemlere kadar herhangi bir ortamda dağıtmasına ve çalıştırmasına olanak tanıyan tek bağımsız konteynerleştirme platformu olduğunu öğrenebilirsiniz.

Docker Oluşturma

Teknoloji Docker Oluşturma Çok kapsayıcılı uygulamaları yapılandırmak için tasarlanmıştır. Bir Docker Compose projesi, projeyi oluşturan kişinin ihtiyaç duyduğu sayıda Docker kapsayıcısı içerebilir.

Docker Compose ile çalışırken uygulama hizmetlerini yapılandırmak ve birbirleriyle etkileşimlerini düzenlemek için bir YAML dosyası kullanılır. Bu nedenle Docker Compose, çok kapsayıcılı Docker uygulamalarını tanımlamaya ve çalıştırmaya yönelik bir araçtır.

Docker Compose: Makefile'ları Kullanarak Çalışmanızı Basitleştirme
Bir ana sistemde çalışan iki konteyner

GNU Yap

Program make, esasen programların ve kitaplıkların kaynak kodundan oluşturulmasını otomatikleştirmeye yönelik bir araçtır. Genel olarak şunu söyleyebiliriz make Bazı girdi malzemelerini bazı çıktı biçimlerine, bazı amaçlara dönüştürmek için rastgele komutların yürütülmesini içeren herhangi bir süreç için geçerlidir. Bizim durumumuzda komutlar docker-compose soyut hedeflere dönüştürülecek (Telefon hedefleri).

Programı anlatmak için make ondan ne istediğimiz hakkında bir dosyaya ihtiyacımız var Makefile.

В нашем Makefile düzenli komutlar içerecek docker и docker-composebirçok sorunu çözmek için tasarlanmıştır. Yani bir konteynerin montajından, başlatılmasından, durdurulmasından, yeniden başlatılmasından, konteynere kullanıcı girişinin organize edilmesinden, konteyner günlükleriyle çalışmaktan ve diğer benzer sorunların çözülmesinden bahsediyoruz.

Docker Compose için Tipik Kullanım Durumları

Aşağıdaki bileşenlere sahip normal bir web uygulaması hayal edelim:

  • TimescaleDB veritabanı (Postgres).
  • Express.js uygulaması.
  • Ping (yalnızca bir kap, özel bir şey yapmaz).

Bu uygulamanın 3 Docker kapsayıcısına ve bir dosyaya ihtiyacı olacak docker-composeBu kapsayıcıların yönetilmesine ilişkin talimatları içeren. Her konteynerin farklı temas noktaları olacaktır. Örneğin bir konteyner ile timescale veritabanlarıyla çalıştıkları gibi yaklaşık olarak aynı şekilde çalışmak mümkün olacaktır. Yani aşağıdaki eylemleri gerçekleştirmenize olanak tanır:

  • Postgres kabuğuna giriş yapılıyor.
  • Tabloların içe ve dışa aktarımı.
  • oluşturma pg_dump tablolar veya veritabanları.

Express.js uygulama kapsayıcısı, expressjs, aşağıdaki yeteneklere sahip olabilir:

  • Sistem günlüğünden yeni veriler sağlanması.
  • Belirli komutları yürütmek için kabuğa giriş yapın.

Konteynerlerle Etkileşim

Docker Compose kullanarak konteynerler arasında iletişim kurduktan sonra sıra bu konteynerlerle iletişim kurmaya gelir. Docker Compose sisteminde bir komut var docker-compose, destekleyici seçenek -f, sisteme bir dosya aktarmanıza olanak tanır docker-compose.yml.

Bu seçeneğin yeteneklerini kullanarak sistemle etkileşimi yalnızca dosyada belirtilen kaplarla sınırlandırabilirsiniz. docker-compose.yml.

Komutları kullanırken kapsayıcılarla etkileşimlerin nasıl göründüğüne bir göz atalım docker-compose. Eğer kabuğa giriş yapmamız gerektiğini hayal edersek psql, o zaman karşılık gelen komutlar şöyle görünebilir:

docker-compose -f docker-compose.yml exec timescale psql -Upostgres

Yürütmek için kullanılmayan aynı komut docker-composeVe docker, şöyle görünebilir:

docker exec -it  edp_timescale_1 psql -Upostgres

Lütfen bu gibi durumlarda komutu kullanmanın her zaman tercih edildiğini unutmayın. dockerve komut docker-compose, çünkü bu kapsayıcı adlarını hatırlama ihtiyacını ortadan kaldırır.

Yukarıdaki komutların her ikisi de o kadar da zor değil. Ancak formda bir "sarmalayıcı" kullanırsak Makefilebize basit komutlar şeklinde bir arayüz verecek ve kendisi de benzer uzun komutları çağıracaksa, aynı sonuçlara şu şekilde ulaşılabilir:

make db-shell

kullanıldığı oldukça açıktır. Makefile konteynerlerle çalışmayı çok daha kolay hale getiriyor!

Çalışma örneği

Yukarıdaki proje şemasına dayanarak aşağıdaki dosyayı oluşturacağız. docker-compose.yml:

version: '3.3'
services:
    api:
        build: .
        image: mywebimage:0.0.1
        ports:
            - 8080:8080
        volumes:
            - /app/node_modules/
        depends_on:
            - timescale
        command: npm run dev
        networks:
            - webappnetwork
    timescale:
        image: timescale/timescaledb-postgis:latest-pg11
        environment:
          - POSTGRES_USER=postgres
          - POSTGRES_PASSWORD=postgres
        command: ["postgres", "-c", "log_statement=all", "-c", "log_destination=stderr"]
        volumes:
          - ./create_schema.sql:/docker-entrypoint-initdb.d/create_schema.sql
        networks:
           - webappnetwork
    ping:
       image: willfarrell/ping
       environment:
           HOSTNAME: "localhost"
           TIMEOUT: 300
networks:
   webappnetwork:
       driver: bridge

Docker Compose yapılandırmasını yönetmek ve tanımladığı kapsayıcılarla etkileşim kurmak için aşağıdaki dosyayı oluşturacağız. Makefile:

THIS_FILE := $(lastword $(MAKEFILE_LIST))
.PHONY: help build up start down destroy stop restart logs logs-api ps login-timescale login-api db-shell
help:
        make -pRrq  -f $(THIS_FILE) : 2>/dev/null | awk -v RS= -F: '/^# File/,/^# Finished Make data base/ {if ($$1 !~ "^[#.]") {print $$1}}' | sort | egrep -v -e '^[^[:alnum:]]' -e '^$@$$'
build:
        docker-compose -f docker-compose.yml build $(c)
up:
        docker-compose -f docker-compose.yml up -d $(c)
start:
        docker-compose -f docker-compose.yml start $(c)
down:
        docker-compose -f docker-compose.yml down $(c)
destroy:
        docker-compose -f docker-compose.yml down -v $(c)
stop:
        docker-compose -f docker-compose.yml stop $(c)
restart:
        docker-compose -f docker-compose.yml stop $(c)
        docker-compose -f docker-compose.yml up -d $(c)
logs:
        docker-compose -f docker-compose.yml logs --tail=100 -f $(c)
logs-api:
        docker-compose -f docker-compose.yml logs --tail=100 -f api
ps:
        docker-compose -f docker-compose.yml ps
login-timescale:
        docker-compose -f docker-compose.yml exec timescale /bin/bash
login-api:
        docker-compose -f docker-compose.yml exec api /bin/bash
db-shell:
        docker-compose -f docker-compose.yml exec timescale psql -Upostgres

Burada açıklanan komutların çoğu tüm kapsayıcılar için geçerlidir ancak bu seçenek kullanıldığında c= bir komutun kapsamını tek bir kapsayıcıyla sınırlamanıza olanak tanır.

Sonra Makefile hazır, şu şekilde kullanabilirsiniz:

  • make help - mevcut tüm komutların bir listesinin yayınlanması make.

Docker Compose: Makefile'ları Kullanarak Çalışmanızı Basitleştirme
Mevcut komutlarla ilgili yardım

  • make build - bir görüntünün birleştirilmesi Dockerfile. Örneğimizde mevcut görselleri kullandık timescale и ping. Ama görüntü api Yerel olarak toplamak istiyoruz. Bu komutu yürüttükten sonra yapılacak olan tam olarak budur.

Docker Compose: Makefile'ları Kullanarak Çalışmanızı Basitleştirme
Docker konteyneri oluşturma

  • make start — tüm konteynerlerin başlatılması. Yalnızca bir kapsayıcıyı başlatmak için aşağıdaki gibi bir komut kullanabilirsiniz: make start c=timescale.

Docker Compose: Makefile'ları Kullanarak Çalışmanızı Basitleştirme
Zaman ölçeği kapsayıcısını çalıştırma

Docker Compose: Makefile'ları Kullanarak Çalışmanızı Basitleştirme
Bir ping kapsayıcısını çalıştırma

  • make login-timescale — konteynerin bash oturumuna giriş yapın timescale.

Docker Compose: Makefile'ları Kullanarak Çalışmanızı Basitleştirme
Bash'ı zaman ölçeği kapsayıcısında çalıştırma

  • make db-shell - e giriş psql bir kapta timescale Veritabanında SQL sorguları yürütmek için.

Docker Compose: Makefile'ları Kullanarak Çalışmanızı Basitleştirme
Zaman ölçeklendirilmiş bir kapsayıcıda psql'yi çalıştırma

  • make stop — konteynerlerin durdurulması.

Docker Compose: Makefile'ları Kullanarak Çalışmanızı Basitleştirme
Zaman ölçeği kapsayıcısını durdurma

  • make down - Konteynerlerin durdurulması ve çıkarılması. Belirli bir kapsayıcıyı kaldırmak için, istediğiniz kapsayıcıyı belirterek bu komutu kullanabilirsiniz. Örneğin - make down c=timescale veya make down c=api.

Docker Compose: Makefile'ları Kullanarak Çalışmanızı Basitleştirme
Tüm kapsayıcıların durdurulması ve silinmesi

sonuçlar

Docker Compose bize konteynerleri yönetmek için zengin bir komut seti sunsa da, bazen bu komutlar uzun olabilir ve hatırlanması zor olabilir.

Kullanım metodu Makefile bir dosyadaki kapsayıcılarla hızlı ve kolay etkileşim kurmamıza yardımcı oldu docker-compose.yml. Yani aşağıdakilerden bahsediyoruz:

  • Geliştirici yalnızca burada açıklanan proje kapsayıcılarıyla etkileşime girer. docker-compose.yml, çalışan diğer konteynerler tarafından iş kesintiye uğramaz.
  • Belirli bir komutun unutulması durumunda komutu çalıştırabilirsiniz. make help ve mevcut komutlar hakkında yardım alın.
  • En son günlük girişlerini almak veya bir sistemde oturum açmak gibi eylemleri gerçekleştirmek için uzun argüman listelerini hatırlamanıza gerek yoktur. Örneğin, şöyle bir komut docker-compose -f docker-compose.yml exec timescale psql -Upostgres dönüşler içine make db-shell.
  • Dosya Makefile Proje büyüdükçe buna esnek bir şekilde uyum sağlayabilirsiniz. Örneğin, veritabanı yedeklemesi oluşturmak veya başka herhangi bir eylemi gerçekleştirmek için komut eklemek kolaydır.
  • Büyük bir geliştirici ekibi aynısını kullanıyorsa MakefileBu, işbirliğini kolaylaştırır ve hataları azaltır.

PS В нашем pazar yeri bir resim var liman işçisi, tek tıklamayla kurulabilir. Konteynerlerin çalışmasını şu adresten kontrol edebilirsiniz: VPS. Tüm yeni müşterilere 3 günlük ücretsiz test hakkı verilir.

Sevgili okuyucular! Docker Compose'u nasıl otomatikleştirirsiniz?

Docker Compose: Makefile'ları Kullanarak Çalışmanızı Basitleştirme

Kaynak: habr.com

Yorum ekle