Docker Compose: Nyederhanakake Pakaryan Nggunakake Makefiles

Saben sawetara taun, industri pangembangan piranti lunak ngalami owah-owahan paradigma. Salah sawijining fenomena kasebut bisa diakoni minangka minat sing tuwuh ing konsep layanan mikro. Senajan microservices dudu teknologi paling anyar, mung bubar popularitase kanthi harfiah skyrocketed.

Layanan monolitik gedhe saiki diganti dening layanan mikro otonom. Layanan mikro bisa dianggep minangka aplikasi sing nduweni tujuan tunggal lan spesifik. Contone, bisa uga DBMS relasional, aplikasi Express, layanan Solr.

Docker Compose: Nyederhanakake Pakaryan Nggunakake Makefiles

Dina iki, angel mbayangno ngembangake sistem piranti lunak anyar tanpa nggunakake layanan mikro. Lan kahanan iki, ndadékaké kita menyang platform Docker.

docker

Platform docker, ing pangembangan lan panyebaran layanan mikro, wis meh dadi standar industri. Ing situs web proyek, sampeyan bisa ngerteni manawa Docker minangka siji-sijine platform containerisasi mandiri sing ngidini organisasi nggawe aplikasi apa wae kanthi gampang, uga nyebarake lan mbukak ing lingkungan apa wae - saka awan hibrida nganti sistem pinggiran.

Docker Compose

teknologi Docker Compose dirancang kanggo ngatur aplikasi multi-wadhah. Proyek Docker Compose bisa ngemot akeh kontaner Docker kaya sing dibutuhake panyipta proyek.

Nalika nggarap Docker Compose, file YAML digunakake kanggo ngatur layanan aplikasi lan ngatur interaksi karo saben liyane. Dadi Docker Compose minangka alat kanggo njlentrehake lan mbukak aplikasi Docker multi-kontainer.

Docker Compose: Nyederhanakake Pakaryan Nggunakake Makefiles
Loro kontaner mlaku ing sistem inang

GNU Gawe

Program kasebut make, ateges alat kanggo ngotomatisasi bangunan program lan perpustakaan saka kode sumber. Umumé, kita bisa ngomong sing make ditrapake kanggo sembarang proses sing melu nglakokaké printah kasepakatan kanggo ngowahi sawetara bahan input kanggo sawetara wangun output, kanggo sawetara goal. Ing kasus kita, printah docker-compose bakal diowahi dadi tujuan abstrak (Target telpon).

Kanggo ngandhani program make bab apa kita arep saka iku, kita kudu file Makefile.

Ing kita Makefile bakal ngemot printah biasa docker и docker-compose, sing dirancang kanggo ngatasi akeh masalah. Yaiku, kita ngomong babagan ngumpulake wadhah, babagan miwiti, mungkasi, miwiti maneh, babagan ngatur login pangguna menyang wadhah, babagan nggarap log wadhah, lan ngrampungake masalah liyane sing padha.

Kasus Gunakake Khas kanggo Docker Compose

Coba bayangake aplikasi web biasa sing nduweni komponen ing ngisor iki:

  • Database TimescaleDB (Postgres).
  • aplikasi Express.js.
  • Ping (mung wadhah, ora nindakake apa-apa khusus).

Aplikasi iki mbutuhake 3 wadhah Docker lan file docker-compose, sing ngemot instruksi kanggo ngatur wadhah kasebut. Saben wadhah bakal duwe titik tutul sing beda. Contone, karo wadhah timescale bakal bisa digunakake kanthi cara sing padha karo database. Yaiku, ngidini sampeyan nindakake tumindak ing ngisor iki:

  • Mlebu menyang cangkang Postgres.
  • Impor lan ekspor tabel.
  • nggawe pg_dump tabel utawa database.

Wadah aplikasi Express.js, expressjs, bisa duwe kapabilitas ing ngisor iki:

  • Nyedhiyakake data anyar saka log sistem.
  • Mlebu menyang cangkang kanggo nglakokake perintah tartamtu.

Interaksi karo Wadhah

Sawise kita nyiyapake komunikasi antarane kontaner nggunakake Docker Compose, wektune kanggo komunikasi karo kontaner kasebut. Ing sistem Docker Compose ana prentah docker-compose, opsi ndhukung -f, sing ngidini sampeyan nransfer file menyang sistem docker-compose.yml.

Nggunakake kemampuan pilihan iki, sampeyan bisa mbatesi interaksi karo sistem mung kanggo wadhah sing kasebut ing file kasebut. docker-compose.yml.

Ayo ndeleng apa interaksi karo kontaner katon nalika nggunakake printah docker-compose. Yen kita mbayangno yen kita kudu mlebu ing cangkang psql, banjur printah sing cocog bisa katon kaya iki:

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

Prentah sing padha ora digunakake kanggo nglakokake docker-composelan docker, bisa uga katon kaya iki:

docker exec -it  edp_timescale_1 psql -Upostgres

Wigati dimangerteni manawa ing kasus kaya mengkono, luwih becik nggunakake printah kasebut docker, lan tim docker-compose, amarga iki ngilangake kudu ngelingi jeneng wadhah.

Loro-lorone prentah ing ndhuwur ora angel banget. Nanging yen kita nggunakake "wrapper" ing wangun Makefile, sing bakal menehi antarmuka ing wangun printah sing prasaja lan bakal nelpon printah dawa sing padha, banjur asil sing padha bisa digayuh kaya iki:

make db-shell

Iku cukup ketok sing nggunakake Makefile nggawe nggarap kontaner luwih gampang!

Contoh kerja

Adhedhasar diagram proyek ing ndhuwur, kita bakal nggawe file ing ngisor iki 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

Kanggo ngatur konfigurasi Docker Compose lan sesambungan karo wadhah sing diterangake, kita bakal nggawe file ing ngisor iki 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

Umume prentah sing diterangake ing kene ditrapake kanggo kabeh kontaner, nanging nggunakake pilihan kasebut c= ngijini sampeyan kanggo matesi orane katrangan saka printah siji wadhah.

Sawise Makefile siap, sampeyan bisa nggunakake kaya iki:

  • make help - nerbitake dhaptar kabeh printah kasedhiya kanggo make.

Docker Compose: Nyederhanakake Pakaryan Nggunakake Makefiles
Bantuan ing printah kasedhiya

  • make build - assembling gambar saka Dockerfile. Ing conto kita nggunakake gambar sing wis ana timescale и ping. Nanging gambar api kita pengin ngumpulake lokal. Iki persis apa sing bakal ditindakake sawise nglakokake printah iki.

Docker Compose: Nyederhanakake Pakaryan Nggunakake Makefiles
Nggawe wadhah Docker

  • make start - ngetokake kabeh kontaner. Kanggo miwiti mung siji wadhah, sampeyan bisa nggunakake printah kaya make start c=timescale.

Docker Compose: Nyederhanakake Pakaryan Nggunakake Makefiles
Mbukak wadhah skala wektu

Docker Compose: Nyederhanakake Pakaryan Nggunakake Makefiles
Mbukak wadhah ping

  • make login-timescale - mlebu menyang sesi bash saka wadhah timescale.

Docker Compose: Nyederhanakake Pakaryan Nggunakake Makefiles
Mlaku bash ing wadhah skala wektu

  • make db-shell - mlebu menyang psql ing wadhah timescale kanggo nglakokake pitakon SQL marang database.

Docker Compose: Nyederhanakake Pakaryan Nggunakake Makefiles
Mlaku psql ing wadhah timescaledb

  • make stop - mungkasi wadhah.

Docker Compose: Nyederhanakake Pakaryan Nggunakake Makefiles
Mungkasi wadhah skala wektu

  • make down - mungkasi lan mbusak kontaner. Kanggo mbusak wadhah tartamtu, sampeyan bisa nggunakake printah iki nemtokake wadhah sing dikarepake. Tuladhane - make down c=timescale utawa make down c=api.

Docker Compose: Nyederhanakake Pakaryan Nggunakake Makefiles
Mungkasi lan mbusak kabeh wadhah

Hasil

Senajan Docker Compose menehi kita set sugih saka printah kanggo ngatur wadhah, kadhangkala printah iki bisa dadi dawa lan angel kanggo elinga.

Cara panggunaan Makefile mbantu kita nggawe interaksi cepet lan gampang karo kontaner saka file docker-compose.yml. Yaiku, kita ngomong babagan ing ngisor iki:

  • Pangembang mung sesambungan karo wadhah proyek sing diterangake ing docker-compose.yml, karya ora diganggu dening wadhah mlaku liyane.
  • Yen prentah tartamtu dilalekake, sampeyan bisa nglakokake perintah kasebut make help lan njaluk bantuan ing printah kasedhiya.
  • Sampeyan ora kudu ngelingi dhaptar argumen sing dawa kanggo nindakake tindakan kayata njupuk entri log paling anyar utawa mlebu menyang sistem. Contone, printah kaya docker-compose -f docker-compose.yml exec timescale psql -Upostgres malih dadi make db-shell.
  • berkas Makefile Sampeyan bisa adaptasi kanthi fleksibel nalika proyek kasebut tuwuh. Contone, gampang nambah printah kanggo nggawe serep database utawa nindakake tindakan liyane.
  • Yen tim gedhe pangembang nggunakake padha Makefile, iki streamlines kolaborasi lan nyuda kasalahan.

PS Ing kita pasar ana gambar docker, sing bisa diinstal ing siji klik. Sampeyan bisa mriksa operasi kontaner ing VPS. Kabeh klien anyar diwenehi 3 dina tes gratis.

Para pamaca ingkang kinurmatan! Kepiye cara ngotomatisasi Docker Compose?

Docker Compose: Nyederhanakake Pakaryan Nggunakake Makefiles

Source: www.habr.com

Add a comment