Docker Compose: Menyederhanakan Pekerjaan Anda Menggunakan Makefiles

Setiap beberapa tahun, industri pengembangan perangkat lunak mengalami perubahan paradigma. Salah satu fenomena ini dapat dilihat dari meningkatnya minat terhadap konsep layanan mikro. Meskipun layanan mikro bukanlah teknologi terbaru, popularitasnya baru saja meroket akhir-akhir ini.

Layanan monolitik besar kini digantikan oleh layanan mikro yang independen dan otonom. Layanan mikro dapat dianggap sebagai aplikasi yang melayani satu tujuan yang sangat spesifik. Misalnya, DBMS relasional, aplikasi Express, layanan Solr.

Docker Compose: Menyederhanakan Pekerjaan Anda Menggunakan Makefiles

Saat ini, sulit membayangkan mengembangkan sistem perangkat lunak baru tanpa menggunakan layanan mikro. Dan situasi ini, pada gilirannya, membawa kita ke platform Docker.

Buruh pelabuhan

Panggung Buruh pelabuhan, dalam pengembangan dan penerapan layanan mikro, hampir menjadi standar industri. Di situs web proyek, Anda dapat mengetahui bahwa Docker adalah satu-satunya platform containerisasi independen yang memungkinkan organisasi dengan mudah membuat aplikasi apa pun, serta mendistribusikan dan menjalankannya di lingkungan apa pun - mulai dari cloud hybrid hingga sistem edge.

Docker Tulis

ВСхнология Docker Tulis dirancang untuk mengonfigurasi aplikasi multi-kontainer. Proyek Docker Compose dapat berisi container Docker sebanyak yang dibutuhkan pembuat proyek.

Saat bekerja dengan Docker Compose, file YAML digunakan untuk mengonfigurasi layanan aplikasi dan mengatur interaksinya satu sama lain. Oleh karena itu, Docker Compose adalah alat untuk mendeskripsikan dan menjalankan aplikasi Docker multi-kontainer.

Docker Compose: Menyederhanakan Pekerjaan Anda Menggunakan Makefiles
Dua kontainer berjalan pada sistem host

GNU Membuat

Program make, pada dasarnya adalah alat untuk mengotomatiskan pembuatan program dan perpustakaan dari kode sumber. Secara umum, kita dapat mengatakan demikian make berlaku untuk setiap proses yang melibatkan pelaksanaan perintah sewenang-wenang untuk mengubah beberapa bahan masukan menjadi beberapa bentuk keluaran, ke beberapa tujuan. Dalam kasus kami, perintahnya docker-compose akan diubah menjadi tujuan abstrak (Target telepon).

Untuk memberitahu programnya make tentang apa yang kita inginkan darinya, kita memerlukan file Makefile.

Di kami Makefile akan berisi perintah reguler docker ΠΈ docker-compose, yang dirancang untuk memecahkan banyak masalah. Yaitu, kita berbicara tentang merakit sebuah wadah, tentang memulainya, menghentikannya, memulai kembali, tentang mengatur login pengguna ke wadah, tentang bekerja dengan log wadah, dan tentang memecahkan masalah serupa lainnya.

Kasus Penggunaan Umum untuk Docker Compose

Bayangkan sebuah aplikasi web biasa yang memiliki komponen berikut:

  • Basis data TimescaleDB (Postgres).
  • Aplikasi Express.js.
  • Ping (hanya sebuah wadah, tidak melakukan sesuatu yang istimewa).

Aplikasi ini membutuhkan 3 container Docker dan sebuah file docker-compose, yang berisi petunjuk untuk mengelola kontainer ini. Setiap kontainer akan memiliki titik kontak yang berbeda. Misalnya dengan wadah timescale akan dimungkinkan untuk bekerja dengan cara yang kira-kira sama seperti mereka bekerja dengan database. Yaitu, ini memungkinkan Anda untuk melakukan tindakan berikut:

  • Masuk ke shell Postgres.
  • Impor dan ekspor tabel.
  • penciptaan pg_dump tabel atau database.

wadah aplikasi Express.js, expressjs, mungkin memiliki kemampuan berikut:

  • Memberikan data baru dari log sistem.
  • Masuk ke shell untuk menjalankan perintah tertentu.

Berinteraksi dengan Kontainer

Setelah kita mengatur komunikasi antar container menggunakan Docker Compose, sekarang saatnya berkomunikasi dengan container tersebut. Di dalam sistem Docker Compose ada perintah docker-compose, opsi pendukung -f, yang memungkinkan Anda mentransfer file ke sistem docker-compose.yml.

Dengan menggunakan kemampuan opsi ini, Anda dapat membatasi interaksi dengan sistem hanya pada container yang disebutkan dalam file docker-compose.yml.

Mari kita lihat seperti apa interaksi dengan container saat menggunakan perintah docker-compose. Jika kita membayangkan bahwa kita perlu login ke shell psql, maka perintah terkait akan terlihat seperti ini:

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

Perintah yang sama yang tidak digunakan untuk mengeksekusi docker-composeDan docker, mungkin terlihat seperti ini:

docker exec -it  edp_timescale_1 psql -Upostgres

Harap dicatat bahwa dalam kasus seperti itu selalu lebih baik menggunakan perintah docker, dan perintah docker-compose, karena ini menghilangkan kebutuhan untuk mengingat nama kontainer.

Kedua perintah di atas tidak terlalu sulit. Namun jika kita menggunakan β€œpembungkus” pada formulir tersebut Makefile, yang akan memberi kita antarmuka dalam bentuk perintah sederhana dan akan memanggil perintah panjang serupa, maka hasil yang sama dapat dicapai seperti ini:

make db-shell

Sangat jelas kegunaannya Makefile membuat bekerja dengan kontainer menjadi lebih mudah!

Contoh kerja

Berdasarkan diagram proyek di atas, kami akan membuat file 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 mengelola konfigurasi Docker Compose dan berinteraksi dengan container yang dijelaskannya, kami akan membuat file 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

Sebagian besar perintah yang dijelaskan di sini berlaku untuk semua kontainer, tetapi menggunakan opsi c= memungkinkan Anda membatasi cakupan perintah ke satu wadah.

Setelah Makefile siap, Anda dapat menggunakannya seperti ini:

  • make help β€” mengeluarkan daftar semua perintah yang tersedia untuk make.

Docker Compose: Menyederhanakan Pekerjaan Anda Menggunakan Makefiles
Bantuan tentang perintah yang tersedia

  • make build - merakit gambar dari Dockerfile. Dalam contoh kami, kami menggunakan gambar yang sudah ada timescale ΠΈ ping. Tapi gambarnya api kami ingin mengumpulkan secara lokal. Inilah yang akan dilakukan setelah menjalankan perintah ini.

Docker Compose: Menyederhanakan Pekerjaan Anda Menggunakan Makefiles
Membangun wadah Docker

  • make start β€” meluncurkan semua kontainer. Untuk meluncurkan satu container saja, Anda dapat menggunakan perintah seperti make start c=timescale.

Docker Compose: Menyederhanakan Pekerjaan Anda Menggunakan Makefiles
Menjalankan wadah skala waktu

Docker Compose: Menyederhanakan Pekerjaan Anda Menggunakan Makefiles
Menjalankan wadah ping

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

Docker Compose: Menyederhanakan Pekerjaan Anda Menggunakan Makefiles
Menjalankan bash dalam wadah skala waktu

  • make db-shell - pintu masuk ke psql dalam wadah timescale untuk mengeksekusi query SQL terhadap database.

Docker Compose: Menyederhanakan Pekerjaan Anda Menggunakan Makefiles
Menjalankan psql dalam wadah timescaledb

  • make stop β€” menghentikan kontainer.

Docker Compose: Menyederhanakan Pekerjaan Anda Menggunakan Makefiles
Menghentikan kontainer skala waktu

  • make down β€” menghentikan dan mengeluarkan kontainer. Untuk menghapus kontainer tertentu, Anda dapat menggunakan perintah ini untuk menentukan kontainer yang diinginkan. Misalnya - make down c=timescale ΠΈΠ»ΠΈ make down c=api.

Docker Compose: Menyederhanakan Pekerjaan Anda Menggunakan Makefiles
Menghentikan dan menghapus semua container

Hasil

Meskipun Docker Compose memberi kita beragam perintah untuk mengelola container, terkadang perintah ini menjadi panjang dan sulit untuk diingat.

Metode penggunaan Makefile membantu kami membangun interaksi yang cepat dan mudah dengan container dari sebuah file docker-compose.yml. Yaitu, kita berbicara tentang hal berikut:

  • Pengembang hanya berinteraksi dengan wadah proyek yang dijelaskan dalam docker-compose.yml, pekerjaan tidak terganggu oleh container lain yang sedang berjalan.
  • Jika ada perintah tertentu yang terlupakan, Anda dapat menjalankan perintah tersebut make help dan dapatkan bantuan tentang perintah yang tersedia.
  • Anda tidak perlu mengingat daftar argumen yang panjang untuk melakukan tindakan seperti mendapatkan entri log terbaru atau masuk ke sistem. Misalnya perintah seperti docker-compose -f docker-compose.yml exec timescale psql -Upostgres berubah menjadi make db-shell.
  • berkas Makefile Anda dapat secara fleksibel beradaptasi seiring berkembangnya proyek. Misalnya, mudah untuk menambahkan perintah untuk membuat cadangan database atau melakukan tindakan lainnya.
  • Jika tim pengembang besar menggunakan hal yang sama Makefile, ini menyederhanakan kolaborasi dan mengurangi kesalahan.

PS Di kami pasar ada gambar Buruh pelabuhan, yang dapat diinstal dalam satu klik. Anda dapat memeriksa pengoperasian kontainer di VPS. Semua klien baru diberikan 3 hari pengujian gratis.

Pembaca yang terhormat Bagaimana Anda mengotomatiskan Docker Compose?

Docker Compose: Menyederhanakan Pekerjaan Anda Menggunakan Makefiles

Sumber: www.habr.com

Tambah komentar