Docker Compose: Memudahkan Kerja Anda Menggunakan Makefiles

Setiap beberapa tahun, industri pembangunan perisian mengalami anjakan paradigma. Salah satu daripada fenomena ini boleh diiktiraf sebagai minat yang semakin meningkat dalam konsep perkhidmatan mikro. Walaupun perkhidmatan mikro bukanlah teknologi terbaharu, baru-baru ini popularitinya benar-benar meroket.

Perkhidmatan monolitik yang besar kini digantikan oleh perkhidmatan mikro yang bebas dan autonomi. Perkhidmatan mikro boleh dianggap sebagai aplikasi yang berfungsi untuk tujuan tunggal dan sangat khusus. Sebagai contoh, ia boleh menjadi DBMS hubungan, aplikasi Express, perkhidmatan Solr.

Docker Compose: Memudahkan Kerja Anda Menggunakan Makefiles

Hari ini, sukar untuk membayangkan membangunkan sistem perisian baharu tanpa menggunakan perkhidmatan mikro. Dan keadaan ini, seterusnya, membawa kita ke platform Docker.

buruh pelabuhan

Pelantar buruh pelabuhan, dalam pembangunan dan penggunaan perkhidmatan mikro, telah menjadi hampir standard industri. Di tapak web projek, anda boleh mengetahui bahawa Docker ialah satu-satunya platform kontena bebas yang membolehkan organisasi mencipta sebarang aplikasi dengan mudah, serta mengedar dan menjalankannya dalam mana-mana persekitaran - daripada awan hibrid ke sistem tepi.

Docker Compose

ВСхнология Docker Compose direka untuk mengkonfigurasi aplikasi berbilang bekas. Projek Docker Compose boleh mengandungi seberapa banyak bekas Docker yang diperlukan oleh pencipta projek.

Apabila bekerja dengan Docker Compose, fail YAML digunakan untuk mengkonfigurasi perkhidmatan aplikasi dan mengatur interaksi mereka antara satu sama lain. Oleh itu Docker Compose ialah alat untuk menerangkan dan menjalankan aplikasi Docker berbilang bekas.

Docker Compose: Memudahkan Kerja Anda Menggunakan Makefiles
Dua bekas berjalan pada sistem hos

GNU Buat

Program make, pada asasnya adalah alat untuk mengautomasikan pembinaan program dan perpustakaan daripada kod sumber. Secara umum, kita boleh mengatakan bahawa make terpakai kepada sebarang proses yang melibatkan pelaksanaan arahan sewenang-wenangnya untuk mengubah beberapa bahan input kepada beberapa bentuk output, kepada beberapa matlamat. Dalam kes kami, arahan docker-compose akan diubah menjadi matlamat abstrak (Sasaran telefon).

Untuk memberitahu program make tentang apa yang kita mahu daripadanya, kita memerlukan fail Makefile.

Dalam kami Makefile akan mengandungi arahan biasa docker ΠΈ docker-compose, yang direka untuk menyelesaikan banyak masalah. Iaitu, kita bercakap tentang memasang bekas, tentang memulakannya, menghentikannya, memulakannya semula, tentang mengatur log masuk pengguna ke bekas, tentang bekerja dengan log kontena, dan tentang menyelesaikan masalah lain yang serupa.

Kes Penggunaan Biasa untuk Docker Compose

Mari bayangkan aplikasi web biasa yang mempunyai komponen berikut:

  • Pangkalan data TimescaleDB (Postgres).
  • Aplikasi Express.js.
  • Ping (hanya bekas, tidak melakukan sesuatu yang istimewa).

Aplikasi ini memerlukan 3 bekas Docker dan satu fail docker-compose, yang mengandungi arahan untuk menguruskan bekas ini. Setiap bekas akan mempunyai titik sentuh yang berbeza. Contohnya, dengan bekas timescale ia mungkin berfungsi dengan cara yang hampir sama seperti ia berfungsi dengan pangkalan data. Iaitu, ia membolehkan anda melakukan tindakan berikut:

  • Log masuk ke dalam shell Postgres.
  • Import dan eksport jadual.
  • penciptaan pg_dump jadual atau pangkalan data.

bekas aplikasi Express.js, expressjs, mungkin mempunyai keupayaan berikut:

  • Menyediakan data baharu daripada log sistem.
  • Log masuk ke shell untuk melaksanakan arahan tertentu.

Berinteraksi dengan Bekas

Setelah kami menyediakan komunikasi antara bekas menggunakan Docker Compose, tiba masanya untuk berkomunikasi dengan bekas tersebut. Dalam sistem Docker Compose terdapat arahan docker-compose, pilihan sokongan -f, yang membolehkan anda memindahkan fail ke sistem docker-compose.yml.

Menggunakan keupayaan pilihan ini, anda boleh mengehadkan interaksi dengan sistem hanya kepada bekas yang disebut dalam fail docker-compose.yml.

Mari kita lihat bagaimana interaksi dengan bekas apabila menggunakan arahan docker-compose. Jika kita membayangkan bahawa kita perlu log masuk ke dalam shell psql, maka arahan yang sepadan mungkin kelihatan seperti ini:

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

Perintah yang sama yang tidak digunakan untuk melaksanakan docker-composeDan docker, mungkin kelihatan seperti ini:

docker exec -it  edp_timescale_1 psql -Upostgres

Sila ambil perhatian bahawa dalam kes sedemikian adalah lebih baik untuk menggunakan arahan docker, dan perintah docker-compose, kerana ini menghapuskan keperluan untuk mengingati nama bekas.

Kedua-dua arahan di atas tidak begitu sukar. Tetapi jika kita menggunakan "pembungkus" dalam bentuk Makefile, yang akan memberi kita antara muka dalam bentuk arahan mudah dan dengan sendirinya akan memanggil arahan panjang yang serupa, maka hasil yang sama boleh dicapai seperti ini:

make db-shell

Ia agak jelas bahawa penggunaan Makefile menjadikan kerja dengan bekas lebih mudah!

Contoh kerja

Berdasarkan rajah projek di atas, kami akan mencipta fail berikut 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

Untuk mengurus konfigurasi Docker Compose dan berinteraksi dengan bekas yang diterangkannya, kami akan mencipta fail berikut 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

Kebanyakan arahan yang diterangkan di sini digunakan untuk semua bekas, tetapi menggunakan pilihan c= membolehkan anda mengehadkan skop arahan kepada satu bekas.

Selepas Makefile siap, anda boleh menggunakannya seperti ini:

  • make help β€” mengeluarkan senarai semua arahan yang tersedia untuk make.

Docker Compose: Memudahkan Kerja Anda Menggunakan Makefiles
Bantuan pada arahan yang tersedia

  • make build - memasang imej daripada Dockerfile. Dalam contoh kami, kami menggunakan imej sedia ada timescale ΠΈ ping. Tetapi imej api kami ingin mengumpul secara tempatan. Inilah yang akan dilakukan selepas melaksanakan arahan ini.

Docker Compose: Memudahkan Kerja Anda Menggunakan Makefiles
Membina bekas Docker

  • make start β€” melancarkan semua bekas. Untuk melancarkan hanya satu bekas, anda boleh menggunakan arahan seperti make start c=timescale.

Docker Compose: Memudahkan Kerja Anda Menggunakan Makefiles
Menjalankan bekas skala masa

Docker Compose: Memudahkan Kerja Anda Menggunakan Makefiles
Menjalankan bekas ping

  • make login-timescale β€” log masuk ke sesi bash bekas timescale.

Docker Compose: Memudahkan Kerja Anda Menggunakan Makefiles
Menjalankan bash dalam bekas skala masa

  • make db-shell - pintu masuk ke psql dalam bekas timescale untuk melaksanakan pertanyaan SQL terhadap pangkalan data.

Docker Compose: Memudahkan Kerja Anda Menggunakan Makefiles
Menjalankan psql dalam bekas timescaledb

  • make stop - memberhentikan bekas.

Docker Compose: Memudahkan Kerja Anda Menggunakan Makefiles
Menghentikan bekas skala masa

  • make down β€” memberhentikan dan mengeluarkan bekas. Untuk mengalih keluar bekas tertentu, anda boleh menggunakan arahan ini menentukan bekas yang dikehendaki. Sebagai contoh - make down c=timescale atau make down c=api.

Docker Compose: Memudahkan Kerja Anda Menggunakan Makefiles
Menghentikan dan memadam semua bekas

Keputusan

Walaupun Docker Compose memberi kami set perintah yang kaya untuk mengurus bekas, kadangkala arahan ini boleh menjadi panjang dan sukar untuk diingati.

Kaedah penggunaan Makefile membantu kami mewujudkan interaksi yang cepat dan mudah dengan bekas daripada fail docker-compose.yml. Iaitu, kita bercakap tentang perkara berikut:

  • Pembangun berinteraksi hanya dengan bekas projek yang diterangkan dalam docker-compose.yml, kerja tidak diganggu oleh bekas lain yang sedang berjalan.
  • Sekiranya arahan tertentu terlupa, anda boleh melaksanakan arahan itu make help dan dapatkan bantuan pada arahan yang tersedia.
  • Anda tidak perlu mengingati senarai panjang argumen untuk melakukan tindakan seperti mendapatkan entri log terkini atau log masuk ke dalam sistem. Sebagai contoh, arahan seperti docker-compose -f docker-compose.yml exec timescale psql -Upostgres bertukar menjadi make db-shell.
  • fail Makefile Anda boleh menyesuaikannya secara fleksibel apabila projek itu berkembang. Sebagai contoh, adalah mudah untuk menambah arahan untuk membuat sandaran pangkalan data atau melakukan sebarang tindakan lain.
  • Jika sekumpulan besar pembangun menggunakan yang sama Makefile, ini menyelaraskan kerjasama dan mengurangkan ralat.

PS Dalam kami pasaran ada gambar buruh pelabuhan, yang boleh dipasang dalam satu klik. Anda boleh menyemak operasi bekas di VPS. Semua pelanggan baharu diberi 3 hari ujian secara percuma.

Pembaca yang dihormati! Bagaimanakah anda mengautomasikan Docker Compose?

Docker Compose: Memudahkan Kerja Anda Menggunakan Makefiles

Sumber: www.habr.com

Tambah komen