Docker Compose: Pagpasimple sa Imong Trabaho Gamit ang Makefiles

Matag pipila ka tuig, ang industriya sa pagpalambo sa software moagi sa usa ka pagbag-o sa paradigm. Ang usa niini nga mga katingad-an mahimong mailhan ingon nga nagkadako nga interes sa konsepto sa microservices. Bisan kung ang mga microservice dili ang pinakabag-o nga teknolohiya, bag-o lang nga ang pagkapopular niini literal nga misaka.

Ang dagkong monolithic nga mga serbisyo gipulihan na karon sa independente, autonomous microservices. Ang usa ka microservice mahimong isipon nga usa ka aplikasyon nga nagsilbi sa usa ug piho nga katuyoan. Pananglitan, mahimo kini usa ka relational DBMS, usa ka Express nga aplikasyon, usa ka serbisyo sa Solr.

Docker Compose: Pagpasimple sa Imong Trabaho Gamit ang Makefiles

Karong mga adlawa, lisud mahanduraw ang paghimo og bag-ong sistema sa software nga wala gigamit ang mga microservice. Ug kini nga kahimtang, sa baylo, nagdala kanamo sa plataporma sa Docker.

Docker

Platform Docker, sa pagpalambo ug pag-deploy sa mga microservice, nahimong halos usa ka sumbanan sa industriya. Sa website sa proyekto mahimo nimong mahibal-an nga ang Docker mao ra ang independente nga platform sa containerization nga nagtugot sa mga organisasyon nga dali nga maghimo bisan unsang aplikasyon, ingon man pag-apod-apod ug pagpadagan niini sa bisan unsang palibot - gikan sa hybrid nga mga panganod hangtod sa mga sistema sa ngilit.

Docker Compose

teknolohiya Docker Compose gidisenyo alang sa pag-configure sa mga aplikasyon nga daghang sulud. Ang usa ka proyekto sa Docker Compose mahimong adunay daghang mga sulud sa Docker nga kinahanglan sa tiglalang sa proyekto.

Kung nagtrabaho kauban ang Docker Compose, usa ka YAML file ang gigamit aron ma-configure ang mga serbisyo sa aplikasyon ug maorganisar ang ilang interaksyon sa usag usa. Busa ang Docker Compose usa ka himan alang sa paghulagway ug pagpadagan sa multi-container nga mga aplikasyon sa Docker.

Docker Compose: Pagpasimple sa Imong Trabaho Gamit ang Makefiles
Duha ka sudlanan nga nagdagan sa usa ka host system

GNU Himua

Ang programa make, usa ka himan alang sa pag-automate sa pagtukod sa mga programa ug mga librarya gikan sa source code. Sa kinatibuk-an, makaingon kita niana make magamit sa bisan unsa nga proseso nga naglakip sa pagpatuman sa arbitraryong mga sugo aron sa pagbag-o sa pipila ka mga materyal nga input ngadto sa pipila ka porma sa output, ngadto sa pipila ka tumong. Sa among kaso, ang mga mando docker-compose mausab ngadto sa abstract nga mga tumong (Mga target sa telepono).

Aron isulti ang programa make bahin sa kung unsa ang gusto namon gikan niini, kinahanglan namon ang usa ka file Makefile.

Sa among Makefile maglangkob sa regular nga mga sugo docker ΠΈ docker-compose, nga gidisenyo sa pagsulbad sa daghang mga problema. Sa ato pa, naghisgot kami bahin sa pag-assemble sa usa ka sudlanan, bahin sa pagsugod niini, paghunong niini, pag-restart niini, bahin sa pag-organisar sa pag-login sa gumagamit sa sulud, bahin sa pagtrabaho sa mga log sa sulud, ug bahin sa pagsulbad sa uban pang parehas nga mga problema.

Kasagaran nga Mga Kaso sa Paggamit alang sa Docker Compose

Hunahunaa ang usa ka regular nga aplikasyon sa web nga adunay mga musunud nga sangkap:

  • Database sa TimescaleDB (Postgres).
  • Express.js nga aplikasyon.
  • Ping (usa lang ka sudlanan, wala’y gihimo nga espesyal).

Kini nga aplikasyon nanginahanglan 3 nga mga sudlanan sa Docker ug usa ka file docker-compose, nga adunay mga panudlo alang sa pagdumala niini nga mga sudlanan. Ang matag sudlanan adunay lain-laing mga touchpoints. Pananglitan, uban sa usa ka sudlanan timescale kini mahimong posible sa pagtrabaho sa gibana-bana nga sama nga paagi sa ilang pagtrabaho uban sa mga database. Nga mao, kini nagtugot kaninyo sa pagbuhat sa mosunod nga mga aksyon:

  • Pag-log in sa Postgres shell.
  • Import ug export sa mga lamesa.
  • paglalang pg_dump mga lamesa o mga database.

Express.js nga sudlanan sa aplikasyon, expressjs, mahimong adunay mosunod nga mga kapabilidad:

  • Paghatag bag-ong datos gikan sa log sa sistema.
  • Pag-login sa kabhang aron ipatuman ang pipila ka mga sugo.

Pakig-uban sa mga Kontainer

Kung na-set up na namo ang komunikasyon tali sa mga sudlanan gamit ang Docker Compose, panahon na nga makigkomunikar sa mga sudlanan. Sulod sa sistema sa Docker Compose adunay usa ka sugo docker-compose, pagsuporta nga kapilian -f, nga nagtugot kanimo sa pagbalhin sa usa ka file sa sistema docker-compose.yml.

Gamit ang mga kapabilidad niini nga kapilian, mahimo nimong limitahan ang interaksyon sa sistema sa mga sudlanan nga gihisgutan sa file. docker-compose.yml.

Atong tan-awon kung unsa ang hitsura sa mga interaksyon sa mga sudlanan kung mogamit mga mando docker-compose. Kung atong hunahunaon nga kita kinahanglan nga mag-log in sa kabhang psql, unya ang katugbang nga mga sugo mahimong ingon niini:

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

Ang sama nga sugo nga wala gigamit sa pagpatuman docker-composeug docker, mahimong ingon niini:

docker exec -it  edp_timescale_1 psql -Upostgres

Palihug timan-i nga sa maong mga kaso mas maayo nga gamiton ang sugo docker, ug ang sugo docker-compose, tungod kay kini nagwagtang sa panginahanglan sa paghinumdom sa mga ngalan sa sudlanan.

Ang duha sa mga sugo sa ibabaw dili kaayo lisud. Apan kung gigamit namon ang usa ka "wrapper" sa porma Makefile, nga maghatag kanato ug interface sa porma sa yanong mga sugo ug motawag mismo sa susamang tag-as nga mga sugo, unya ang samang resulta mahimong makab-ot sama niini:

make db-shell

Klaro kaayo nga ang paggamit Makefile naghimo sa pagtrabaho uban sa mga sudlanan nga mas sayon!

Pananglitan sa pagtrabaho

Base sa diagram sa proyekto sa ibabaw, maghimo kami sa mosunod nga file 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

Aron madumala ang configuration sa Docker Compose ug makig-uban sa mga sudlanan nga gihulagway niini, maghimo kami sa mosunod nga file 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

Kadaghanan sa mga sugo nga gihulagway dinhi magamit sa tanan nga mga sudlanan, apan gamit ang kapilian c= nagtugot kanimo nga limitahan ang sakup sa usa ka sugo sa usa ka sudlanan.

human sa Makefile andam, mahimo nimo kini gamiton sama niini:

  • make help β€” pag-isyu sa usa ka lista sa tanan nga mga sugo nga magamit alang sa make.

Docker Compose: Pagpasimple sa Imong Trabaho Gamit ang Makefiles
Tabang sa magamit nga mga sugo

  • make build - pag-assemble sa usa ka imahe gikan sa Dockerfile. Sa among panig-ingnan gigamit namon ang naglungtad nga mga imahe timescale ΠΈ ping. Apan ang imahe api gusto namon nga mangolekta sa lokal. Mao gyud kini ang buhaton pagkahuman ipatuman kini nga mando.

Docker Compose: Pagpasimple sa Imong Trabaho Gamit ang Makefiles
Paghimo usa ka sudlanan sa Docker

  • make start - paglansad sa tanan nga mga sudlanan. Sa paglansad lang sa usa ka sudlanan, mahimo nimong gamiton ang usa ka command sama sa make start c=timescale.

Docker Compose: Pagpasimple sa Imong Trabaho Gamit ang Makefiles
Pagpadagan sa timescale nga sudlanan

Docker Compose: Pagpasimple sa Imong Trabaho Gamit ang Makefiles
Pagpadagan sa usa ka sudlanan sa ping

  • make login-timescale β€” login sa bash session sa sudlanan timescale.

Docker Compose: Pagpasimple sa Imong Trabaho Gamit ang Makefiles
Pagpadagan sa bash sa usa ka sudlanan sa timescale

  • make db-shell - pagsulod sa psql sa usa ka sudlanan timescale aron ipatuman ang mga pangutana sa SQL batok sa database.

Docker Compose: Pagpasimple sa Imong Trabaho Gamit ang Makefiles
Pagdagan sa psql sa usa ka sudlanan nga timescaledb

  • make stop - paghunong sa mga sudlanan.

Docker Compose: Pagpasimple sa Imong Trabaho Gamit ang Makefiles
Paghunong sa usa ka sudlanan sa timescale

  • make down - paghunong ug pagtangtang sa mga sudlanan. Aron makuha ang usa ka piho nga sudlanan, mahimo nimong gamiton kini nga mando nga nagtino sa gusto nga sudlanan. Pananglitan - make down c=timescale o make down c=api.

Docker Compose: Pagpasimple sa Imong Trabaho Gamit ang Makefiles
Paghunong ug pagtangtang sa tanan nga mga sudlanan

Mga resulta

Bisan tuod ang Docker Compose naghatag kanato og daghang hugpong sa mga sugo alang sa pagdumala sa mga sudlanan, usahay kini nga mga sugo mahimong taas ug lisud hinumdoman.

Pamaagi sa paggamit Makefile nakatabang kanamo sa pag-establisar og dali ug sayon ​​nga interaksyon sa mga sudlanan gikan sa usa ka file docker-compose.yml. Sa ato pa, naghisgot kami bahin sa mosunod:

  • Ang developer nakig-interact lamang sa mga sudlanan sa proyekto nga gihulagway sa docker-compose.yml, ang trabaho dili mabalda sa uban nga nagdagan nga mga sudlanan.
  • Sa panghitabo nga ang usa ka sugo nakalimtan, mahimo nimong ipatuman ang sugo make help ug pagkuha og tabang sa mga magamit nga mga sugo.
  • Dili nimo kinahanglan nga hinumdoman ang taas nga mga lista sa mga argumento aron mahimo ang mga aksyon sama sa pagkuha sa labing bag-o nga mga entry sa log o pag-log in sa usa ka sistema. Pananglitan, usa ka sugo sama sa docker-compose -f docker-compose.yml exec timescale psql -Upostgres mahimong usa make db-shell.
  • file Makefile Mahimo nimo nga mapahiangay ang pagpahiangay niini samtang ang proyekto motubo. Pananglitan, dali ra ang pagdugang usa ka mando aron maghimo usa ka backup sa database o maghimo bisan unsang ubang aksyon.
  • Kung ang usa ka dako nga grupo sa mga developer naggamit sa parehas Makefile, kini nagpahapsay sa kolaborasyon ug nagpamenos sa mga sayop.

PS Sa among merkado naay image Docker, nga mahimong ma-install sa usa ka pag-klik. Mahimo nimong susihon ang operasyon sa mga sudlanan sa VPS. Tanang bag-ong mga kliyente gihatagan og 3 ka adlaw nga pagsulay nga walay bayad.

Minahal nga magbabasa! Giunsa nimo pag-automate ang Docker Compose?

Docker Compose: Pagpasimple sa Imong Trabaho Gamit ang Makefiles

Source: www.habr.com

Idugang sa usa ka comment