Docker Compose: Hoʻomaʻamaʻa i kāu hana me ka hoʻohana ʻana i nā faila

I kēlā me kēia mau makahiki, hoʻololi ka ʻoihana hoʻomohala polokalamu i kahi hoʻololi paradigm. Hiki ke ʻike ʻia kekahi o kēia mau mea i ka ulu ʻana o ka hoihoi i ka manaʻo o nā microservices. ʻOiai ʻaʻole ʻo ka microservices ka ʻenehana hou loa, i kēia manawa wale nō i hoʻonui maoli ʻia kona kaulana.

Ke pani ʻia nei nā lawelawe monolithic nui e nā microservices kūʻokoʻa. Hiki ke noʻonoʻo ʻia kahi microservice ma ke ʻano he noi e lawelawe ana i kahi kumu hoʻokahi a kikoʻī loa. No ka laʻana, hiki ke lilo i DBMS pili, kahi noi Express, kahi lawelawe Solr.

Docker Compose: Hoʻomaʻamaʻa i kāu hana me ka hoʻohana ʻana i nā faila

I kēia mau lā, paʻakikī ke noʻonoʻo i ka hoʻomohala ʻana i kahi ʻōnaehana polokalamu hou me ka ʻole o ka hoʻohana ʻana i nā microservices. A ʻo kēia kūlana, e alakaʻi iā mākou i ke kahua Docker.

Docker

Pakuhi Docker, i ka hoʻomohala ʻana a me ka hoʻolaha ʻana i nā microservices, ua lilo i mea maʻamau ʻoihana. Ma ka pūnaewele papahana hiki iā ʻoe ke ʻike ʻo Docker wale nō ke kahua containerization kūʻokoʻa e hiki ai i nā hui ke hana maʻalahi i kekahi noi, a me ka puʻunaue a holo iā lākou i kēlā me kēia kaiapuni - mai nā ao hybrid a hiki i nā ʻōnaehana palena.

Docker papa inoa

Pānaehana Docker papa inoa i hoʻolālā ʻia no ka hoʻonohonoho ʻana i nā noi multi-container. Hiki i kahi papahana Docker Compose ke loaʻa nā pahu Docker e like me ka mea e pono ai ka mea hana.

Ke hana pū me Docker Compose, hoʻohana ʻia kahi faila YAML e hoʻonohonoho i nā lawelawe noi a hoʻonohonoho i kā lākou pilina me kekahi. No laila he mea hana ʻo Docker Compose no ka wehewehe ʻana a me ka holo ʻana i nā noi Docker multi-container.

Docker Compose: Hoʻomaʻamaʻa i kāu hana me ka hoʻohana ʻana i nā faila
ʻElua pahu e holo ana ma kahi ʻōnaehana hoʻokipa

Hana GNU

ʻO ka papahana make, he mea paahana ia no ka hooponopono ana i ke kukulu ana i na papahana a me na hale waihona puke mai ke code kumu. Ma keʻano laulā, hiki iā mākou ke'ōlelo pēlā make pili i kekahi kaʻina hana e pili ana i ka hoʻokō ʻana i nā kauoha kūʻokoʻa e hoʻololi i kekahi mau mea hoʻokomo i kekahi puka puka, i kekahi pahuhopu. I kā mākou hihia, nā kauoha docker-compose e hoʻololi ʻia i mau pahuhopu abstract (Pahu kelepona).

E haʻi i ka papahana make e pili ana i kā mākou makemake mai ia mea, pono mākou i kahi faila Makefile.

I kā mākou Makefile e loaʻa nā kauoha maʻamau docker и docker-compose, i hoʻolālā ʻia e hoʻoponopono i nā pilikia he nui. ʻO ia hoʻi, ke kamaʻilio nei mākou e pili ana i ka hoʻohui ʻana i kahi pahu, e pili ana i ka hoʻomaka ʻana, e hoʻōki iā ia, e hoʻomaka hou, e pili ana i ka hoʻonohonoho ʻana i ka mea hoʻohana e komo i ka ipu, e pili ana i ka hana ʻana me nā pahu pahu, a me ka hoʻoponopono ʻana i nā pilikia like ʻole.

Nā hihia hoʻohana maʻamau no ka Docker Compose

E noʻonoʻo kākou i kahi polokalamu pūnaewele maʻamau i loaʻa nā ʻāpana penei:

  • ʻIkepili ʻo TimescaleDB (Postgres).
  • palapala noi Express.js.
  • Ping (he ipu wale nō, ʻaʻole hana i kekahi mea kūikawā).

Pono kēia noi i nā pahu Docker 3 a me kahi faila docker-compose, aia nā ʻōlelo kuhikuhi no ka mālama ʻana i kēia mau pahu. Loaʻa i kēlā me kēia pahu nā wahi hoʻopā like ʻole. Eia kekahi laʻana, me kahi pahu timescale Hiki ke hana like me ka hana ʻana me nā ʻikepili. ʻO ia, hiki iā ʻoe ke hana i kēia mau hana:

  • Ke komo nei i loko o ka pūpū Postgres.
  • Hoʻokomo a hoʻokuʻu aku i nā papa.
  • hanaia'na pg_dump nā papa a i ʻole nā ​​waihona.

pahu noi Express.js, expressjs, hiki ke loaʻa nā mana penei:

  • Hāʻawi i ka ʻikepili hou mai ka log system.
  • E komo i ka pūpū e hoʻokō i kekahi mau kauoha.

Ka launa pū me nā pahu

Ke hoʻonohonoho mākou i ka kamaʻilio ma waena o nā ipu me ka hoʻohana ʻana iā Docker Compose, ʻo ia ka manawa e kamaʻilio me kēlā mau ipu. Aia i loko o ka ʻōnaehana Docker Compose kahi kauoha docker-compose, koho kākoʻo -f, hiki iā ʻoe ke hoʻololi i kahi faila i ka ʻōnaehana docker-compose.yml.

Ke hoʻohana nei i nā mana o kēia koho, hiki iā ʻoe ke kaupalena i ka launa pū ʻana me ka ʻōnaehana wale nō i kēlā mau pahu i ʻōlelo ʻia ma ka faila. docker-compose.yml.

E nānā kākou i ke ʻano o ka launa pū ʻana me nā ipu i ka wā e hoʻohana ai i nā kauoha docker-compose. Inā mākou e noʻonoʻo pono mākou e komo i loko o ka pūpū psql, a laila e like paha nā kauoha e like me kēia:

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

ʻO ke kauoha like ʻole i hoʻohana ʻia e hoʻokō docker-composea me ka docker, e like paha me kēia:

docker exec -it  edp_timescale_1 psql -Upostgres

E ʻoluʻolu e hoʻomaopopo ʻia i kēlā mau hihia, ʻoi aku ka maikaʻi o ka hoʻohana ʻana i ke kauoha docker, a me ka hui docker-compose, ʻoiai e hoʻopau kēia i ka pono e hoʻomanaʻo i nā inoa pahu.

ʻAʻole paʻakikī kēia mau kauoha ʻelua. Akā inā mākou i hoʻohana i kahi "wrapper" ma ke ʻano Makefile, ka mea e hāʻawi mai iā mākou i kahi interface ma ke ʻano o nā kauoha maʻalahi a kāhea ʻo ia i nā kauoha lōʻihi like, a laila hiki ke loaʻa nā hopena like e like me kēia:

make db-shell

He mea maopopo loa ka hoʻohana ʻana Makefile ʻoi aku ka maʻalahi o ka hana ʻana me nā ipu!

Laʻana hana

Ma muli o ke kiʻikuhi papahana ma luna, e hana mākou i kēia faila 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

No ka hoʻokele ʻana i ka hoʻonohonoho Docker Compose a launa pū me nā ipu e wehewehe ai, e hana mākou i kēia faila 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

ʻO ka hapa nui o nā kauoha i wehewehe ʻia ma ʻaneʻi e pili ana i nā pahu āpau, akā hoʻohana i ke koho c= hiki iā ʻoe ke kaupalena i ka laulā o kahi kauoha i hoʻokahi pahu.

Mahope iho Makefile mākaukau, hiki iā ʻoe ke hoʻohana e like me kēia:

  • make help — ka hoopuka ana i ka papa inoa o na kauoha a pau i loaa no make.

Docker Compose: Hoʻomaʻamaʻa i kāu hana me ka hoʻohana ʻana i nā faila
Kōkua i nā kauoha i loaʻa

  • make build - ka hui ʻana i kiʻi mai Dockerfile. I kā mākou laʻana ua hoʻohana mākou i nā kiʻi i loaʻa timescale и ping. Akā ʻo ke kiʻi api makemake mākou e ʻohi ma ka ʻāina. ʻO kēia ka mea e hana ʻia ma hope o ka hoʻokō ʻana i kēia kauoha.

Docker Compose: Hoʻomaʻamaʻa i kāu hana me ka hoʻohana ʻana i nā faila
Ke kūkulu ʻana i kahi pahu Docker

  • make start - hoʻokuʻu i nā pahu a pau. No ka hoʻomaka ʻana i hoʻokahi pahu, hiki iā ʻoe ke hoʻohana i kahi kauoha like make start c=timescale.

Docker Compose: Hoʻomaʻamaʻa i kāu hana me ka hoʻohana ʻana i nā faila
Ke holo nei i ka pahu manawa

Docker Compose: Hoʻomaʻamaʻa i kāu hana me ka hoʻohana ʻana i nā faila
Ke holo nei i kahi pahu ping

  • make login-timescale - e komo i ka hālāwai bash o ka pahu timescale.

Docker Compose: Hoʻomaʻamaʻa i kāu hana me ka hoʻohana ʻana i nā faila
Ke holo nei i ka bash i loko o kahi pahu manawa

  • make db-shell - komo i psql i loko o kahi pahu timescale e hoʻokō i nā nīnau SQL e kūʻē i ka waihona.

Docker Compose: Hoʻomaʻamaʻa i kāu hana me ka hoʻohana ʻana i nā faila
Ke holo nei i ka psql i kahi pahu timescaledb

  • make stop - hoʻokuʻu i nā pahu.

Docker Compose: Hoʻomaʻamaʻa i kāu hana me ka hoʻohana ʻana i nā faila
Ke hooki nei i kahi pahu manawa

  • make down - hoʻokuʻu a wehe i nā pahu. No ka wehe ʻana i kahi pahu kikoʻī, hiki iā ʻoe ke hoʻohana i kēia kauoha e kuhikuhi ana i ka ipu i makemake ʻia. ʻo kahi laʻana - make down c=timescale ai ole ia, make down c=api.

Docker Compose: Hoʻomaʻamaʻa i kāu hana me ka hoʻohana ʻana i nā faila
Hoʻopau a holoi i nā pahu a pau

Nā hopena

ʻOiai ke hāʻawi nei ʻo Docker Compose iā mākou i nā kauoha waiwai no ka mālama ʻana i nā ipu, i kekahi manawa hiki ke lōʻihi a paʻakikī kēia mau kauoha e hoʻomanaʻo.

ʻano hoʻohana Makefile ua kōkua iā mākou e hoʻokumu i ka pilina wikiwiki a me ka maʻalahi me nā pahu mai kahi faila docker-compose.yml. ʻO ia hoʻi, ke kamaʻilio nei mākou e pili ana i kēia:

  • Hoʻopili wale ka mea hoʻomohala me nā pahu papahana i wehewehe ʻia ma docker-compose.yml, ʻaʻole hoʻopilikia ʻia ka hana e nā ipu holo ʻē aʻe.
  • Inā poina kekahi kauoha, hiki iā ʻoe ke hoʻokō i ke kauoha make help a loaʻa ke kōkua ma nā kauoha i loaʻa.
  • ʻAʻole pono ʻoe e hoʻomanaʻo i nā papa inoa lōʻihi o nā hoʻopaʻapaʻa e hana ai i nā hana e like me ka loaʻa ʻana o nā moʻolelo log hou loa a i ʻole ke komo ʻana i kahi ʻōnaehana. No ka laʻana, he kauoha like docker-compose -f docker-compose.yml exec timescale psql -Upostgres huli i loko o make db-shell.
  • waihona Makefile Hiki iā ʻoe ke hoʻololi iā ia i ka ulu ʻana o ka papahana. No ka laʻana, he maʻalahi ke hoʻohui i kahi kauoha e hana i kahi waihona waihona a i ʻole hana i kekahi hana ʻē aʻe.
  • Inā hoʻohana like ka hui nui o nā mea hoʻomohala Makefile, hōʻemi kēia i ka hana like ʻana a hōʻemi i nā hewa.

PS I kā mākou wahi kuai he kii Docker, hiki ke hoʻokomo i hoʻokahi kaomi. Hiki iā ʻoe ke nānā i ka hana o nā ipu ma VPS. Hāʻawi ʻia nā mea kūʻai hou a pau i 3 mau lā o ka hoʻāʻo ʻana me ka uku ʻole.

E nā mea heluhelu aloha! Pehea ʻoe e hana ai i ka Docker Compose?

Docker Compose: Hoʻomaʻamaʻa i kāu hana me ka hoʻohana ʻana i nā faila

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka