Docker Compose: Simplifying Koj Txoj Haujlwm Siv Makefiles

Txhua txhua ob peb xyoos, kev lag luam kev tsim kho software tau dhau los ua qhov kev hloov pauv. Ib qho ntawm cov xwm txheej no tuaj yeem lees paub tias yog qhov kev txaus siab loj hlob hauv lub tswv yim ntawm microservices. Txawm hais tias microservices tsis yog cov thev naus laus zis tshiab tshaj plaws, tsuas yog tsis ntev los no tau muaj nws cov koob npe nrov tshaj plaws.

Cov kev pabcuam loj monolithic tam sim no tau hloov los ntawm kev ywj pheej, kev tswj hwm microservices. Lub microservice tuaj yeem xav tias yog ib daim ntawv thov uas ua haujlwm rau tib lub hom phiaj thiab tshwj xeeb heev. Piv txwv li, nws tuaj yeem yog DBMS kev sib raug zoo, daim ntawv thov Express, kev pabcuam Solr.

Docker Compose: Simplifying Koj Txoj Haujlwm Siv Makefiles

Niaj hnub no, nws nyuaj rau xav txog kev tsim kho software tshiab yam tsis siv microservices. Thiab qhov xwm txheej no, tig mus, coj peb mus rau Docker platform.

docker

Platform docker, nyob rau hauv kev txhim kho thiab xa mus rau microservices, tau dhau los ua ib qho kev lag luam tus qauv. Hauv qhov project website koj tuaj yeem pom tias Docker yog tib lub chaw ntim khoom ywj pheej uas tso cai rau cov koom haum los tsim txhua daim ntawv thov, nrog rau faib thiab khiav lawv hauv txhua qhov chaw - los ntawm huab cua hybrid mus rau ntug systems.

Docker Compose

Tshuab Docker Compose tsim los rau configuring multi-container daim ntaub ntawv. Qhov project Docker Compose tuaj yeem muaj ntau li Docker ntim raws li qhov project tus tsim xav tau.

Thaum ua haujlwm nrog Docker Compose, cov ntaub ntawv YAML yog siv los teeb tsa cov kev pabcuam hauv daim ntawv thov thiab npaj lawv cov kev sib raug zoo nrog ib leeg. Docker Compose yog li ntawd ib qho cuab yeej los piav qhia thiab ua haujlwm ntau lub thawv Docker daim ntawv thov.

Docker Compose: Simplifying Koj Txoj Haujlwm Siv Makefiles
Ob lub thawv khiav ntawm ib lub host system

GNU Ua

Qhov kev pab cuam make, yog qhov tseem ceeb ntawm cov cuab yeej rau automating lub tsev ntawm cov kev pab cuam thiab cov tsev qiv ntawv los ntawm qhov chaws. Feem ntau, peb tuaj yeem hais qhov ntawd make siv rau txhua tus txheej txheem uas suav nrog kev ua raws li cov lus txib kom hloov qee cov ntaub ntawv nkag mus rau qee daim ntawv tso tawm, rau qee lub hom phiaj. Hauv peb qhov xwm txheej, cov lus txib docker-compose yuav hloov mus rau hauv lub hom phiaj abstract (Xov tooj hom phiaj).

Qhia rau qhov program make txog yam peb xav tau los ntawm nws, peb xav tau ib daim ntawv Makefile.

Ntawm peb Makefile yuav muaj cov lus txib tsis tu ncua docker ΠΈ docker-compose, uas yog tsim los daws ntau yam teeb meem. Namely, peb tab tom tham txog kev sib sau ua ke ib lub thawv, txog kev pib, nres nws, rov pib dua, txog kev teeb tsa cov neeg siv nkag mus rau lub thawv, txog kev ua haujlwm nrog cov thawv ntim, thiab txog kev daws teeb meem lwm yam zoo sib xws.

Hom Kev Siv Case rau Docker Compose

Cia peb xav txog lub vev xaib tsis tu ncua uas muaj cov hauv qab no:

  • TimescaleDB database (Postgres).
  • Daim ntawv thov Express.js.
  • Ping (tsuas yog lub thawv, tsis ua dab tsi tshwj xeeb).

Daim ntawv thov no yuav xav tau 3 Docker ntim thiab cov ntaub ntawv docker-compose, uas muaj cov lus qhia rau kev tswj cov ntim khoom no. Txhua lub thawv yuav muaj qhov sib txawv. Piv txwv li, nrog lub thawv timescale nws yuav muaj peev xwm ua hauj lwm kwv yees li ib yam li lawv ua hauj lwm nrog databases. Namely, nws tso cai rau koj ua cov haujlwm hauv qab no:

  • Nkag mus rau hauv lub plhaub Postgres.
  • Ntshuam thiab export ntawm rooj.
  • creation pg_dump rooj los yog databases.

Express.js daim ntawv thov ntim, expressjs, tej zaum yuav muaj peev xwm hauv qab no:

  • Muab cov ntaub ntawv tshiab los ntawm qhov system log.
  • Nkag mus rau lub plhaub kom ua tiav qee cov lus txib.

Kev sib tham nrog Containers

Thaum peb tau teeb tsa kev sib txuas lus ntawm cov ntim khoom siv Docker Compose, nws yog lub sijhawm los sib txuas lus nrog cov ntim khoom. Hauv Docker Compose system muaj ib qho lus txib docker-compose, txhawb kev xaiv -f, uas tso cai rau koj hloov cov ntaub ntawv mus rau qhov system docker-compose.yml.

Siv lub peev xwm ntawm qhov kev xaiv no, koj tuaj yeem txwv kev cuam tshuam nrog lub kaw lus tsuas yog rau cov thawv uas tau hais hauv cov ntaub ntawv docker-compose.yml.

Cia peb saib seb qhov kev sib cuam tshuam nrog cov thawv zoo li cas thaum siv cov lus txib docker-compose. Yog tias peb xav tias peb yuav tsum tau nkag mus rau hauv lub plhaub psql, ces cov lus txib yuav zoo li no:

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

Tib lo lus txib uas tsis siv los ua docker-composethiab docker, tej zaum yuav zoo li no:

docker exec -it  edp_timescale_1 psql -Upostgres

Thov nco ntsoov tias nyob rau hauv cov ntaub ntawv no nws yog ib txwm nyiam siv cov lus txib docker, thiab cov lus txib docker-compose, raws li qhov no tshem tawm qhov xav tau kom nco qab cov npe ntim.

Ob qho ntawm cov lus txib saum toj no tsis yog qhov nyuaj. Tab sis yog tias peb siv "wrapper" hauv daim ntawv Makefile, uas yuav muab rau peb ib tug interface nyob rau hauv daim ntawv ntawm cov lus txib yooj yim thiab nws tus kheej yuav hu zoo xws li cov lus txib ntev, ces tib cov txiaj ntsig tuaj yeem ua tiav zoo li no:

make db-shell

Nws yog qhov pom tseeb tias kev siv Makefile ua haujlwm nrog cov ntim khoom yooj yim dua!

Piv txwv ua haujlwm

Raws li cov duab kos duab saum toj no, peb yuav tsim cov ntaub ntawv hauv qab no 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

Txhawm rau tswj hwm Docker Compose configuration thiab cuam tshuam nrog cov thawv uas nws piav qhia, peb yuav tsim cov ntaub ntawv hauv qab no 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

Feem ntau ntawm cov lus txib tau piav qhia ntawm no siv rau txhua lub thawv, tab sis siv qhov kev xaiv c= tso cai rau koj txwv qhov kev txwv ntawm ib qho kev hais kom ua rau ib lub thawv.

Tom qab Makefile npaj txhij, koj tuaj yeem siv nws zoo li no:

  • make help - tshaj tawm cov npe ntawm tag nrho cov lus txib muaj rau make.

Docker Compose: Simplifying Koj Txoj Haujlwm Siv Makefiles
Pab ntawm cov lus txib muaj

  • make build - assembling ib daim duab los ntawm Dockerfile. Hauv peb qhov piv txwv peb siv cov duab uas twb muaj lawm timescale ΠΈ ping. Tab sis daim duab api peb xav sau hauv zos. Qhov no yog qhov yuav ua tiav tom qab ua tiav cov lus txib no.

Docker Compose: Simplifying Koj Txoj Haujlwm Siv Makefiles
Tsim ib lub thawv Docker

  • make start - tso tawm tag nrho cov ntim. Txhawm rau tso ib lub thawv xwb, koj tuaj yeem siv cov lus txib zoo li make start c=timescale.

Docker Compose: Simplifying Koj Txoj Haujlwm Siv Makefiles
Khiav lub sijhawm ntsuas lub thawv

Docker Compose: Simplifying Koj Txoj Haujlwm Siv Makefiles
Khiav lub thawv ping

  • make login-timescale - nkag mus rau qhov kev sib tham bash ntawm lub thawv timescale.

Docker Compose: Simplifying Koj Txoj Haujlwm Siv Makefiles
Kev khiav bash nyob rau hauv lub thawv ntim sijhawm

  • make db-shell - nkag mus psql hauv ib lub thawv timescale los ua SQL queries tawm tsam database.

Docker Compose: Simplifying Koj Txoj Haujlwm Siv Makefiles
Khiav psql hauv lub thawv timescaledb

  • make stop - nres ntim.

Docker Compose: Simplifying Koj Txoj Haujlwm Siv Makefiles
Nres lub thawv ntim sijhawm

  • make down - nres thiab tshem cov thawv. Txhawm rau tshem tawm ib lub thawv tshwj xeeb, koj tuaj yeem siv cov lus txib no qhia txog lub thawv uas xav tau. Piv txwv li - make down c=timescale los yog make down c=api.

Docker Compose: Simplifying Koj Txoj Haujlwm Siv Makefiles
Nres thiab tshem tawm tag nrho cov ntim khoom

Cov txiaj ntsim tau los

Txawm hais tias Docker Compose muab cov lus txib nplua nuj rau kev tswj cov thawv, qee zaum cov lus txib no tuaj yeem ua ntev thiab nyuaj rau nco ntsoov.

Txoj kev siv Makefile pab peb tsim kom muaj kev sib cuam tshuam sai thiab yooj yim nrog ntim ntawm cov ntaub ntawv docker-compose.yml. Namely, peb tab tom tham txog cov hauv qab no:

  • Tus tsim tawm tsuas cuam tshuam nrog cov thawv ntim khoom tau piav qhia hauv docker-compose.yml, kev ua haujlwm tsis cuam tshuam nrog lwm cov ntim khoom.
  • Nyob rau hauv cov kev tshwm sim uas ib tug tej yam hais kom ua tsis nco qab lawm, koj muaj peev xwm ua kom tiav cov lus txib make help thiab tau txais kev pab ntawm cov lus txib uas muaj.
  • Koj tsis tas yuav nco ntsoov cov npe ntev ntawm cov lus sib cav los ua cov haujlwm xws li tau txais cov ntawv teev npe tshiab lossis nkag mus rau hauv lub kaw lus. Piv txwv li, ib qho lus txib zoo li docker-compose -f docker-compose.yml exec timescale psql -Upostgres dhau mus make db-shell.
  • cov ntaub ntawv Makefile Koj tuaj yeem hloov kho kom haum rau nws thaum qhov project loj tuaj. Piv txwv li, nws yog ib qho yooj yim mus ntxiv ib qho lus txib los tsim cov ntaub ntawv thaub qab lossis ua lwm yam haujlwm.
  • Yog ib pab neeg loj ntawm cov neeg tsim khoom siv tib yam Makefile, qhov no txhawb kev sib koom tes thiab txo qhov yuam kev.

PS Ntawm peb khw muaj ib daim duab docker, uas tuaj yeem ntsia tau rau hauv ib qho nias. Koj tuaj yeem tshawb xyuas cov kev ua haujlwm ntawm cov ntim khoom ntawm VPS. Txhua tus neeg siv khoom tshiab tau muab 3 hnub ntawm kev kuaj dawb dawb.

Nyob zoo nyeem! Yuav ua li cas koj automate Docker Compose?

Docker Compose: Simplifying Koj Txoj Haujlwm Siv Makefiles

Tau qhov twg los: www.hab.com

Ntxiv ib saib