Susunan Docker: Sederhanakan Menggunakan Makefile

Setiap beberapa tahun, perubahan paradigma terjadi dalam industri pengembangan perangkat lunak. Salah satu fenomena ini adalah meningkatnya minat pada konsep layanan-mikro. Meskipun microservices bukan teknologi terbaru, hanya belakangan ini popularitasnya benar-benar meroket.

Layanan monolitik besar hari ini digantikan oleh microservices otonom independen. Sebuah layanan mikro dapat dianggap sebagai aplikasi yang melayani tujuan tunggal dan sangat spesifik. Misalnya, bisa berupa DBMS relasional, aplikasi Express, layanan Solr. Saat ini sulit untuk membayangkan pengembangan sistem perangkat lunak baru tanpa menggunakan layanan microser. Dan situasi ini, pada gilirannya, membawa kita ke platform Docker.





Buruh pelabuhan


Platform Docker , dalam pengembangan dan penyebaran layanan microser, telah menjadi standar industri yang hampir. Di situs web proyek, Anda dapat mengetahui bahwa Docker adalah satu-satunya platform kontainerisasi independen yang memungkinkan organisasi untuk dengan mudah membuat aplikasi apa pun, serta mendistribusikan dan menjalankannya di lingkungan apa pun - dari cloud hybrid hingga sistem perbatasan.

Menulis Docker


Teknologi Docker Compose dirancang untuk mengonfigurasi aplikasi multi-kontainer. Proyek Penulis Docker dapat memasukkan sebanyak mungkin wadah Docker sesuai kebutuhan pembuat proyek ini.

Saat bekerja dengan Docker Compose, file YAML digunakan untuk mengonfigurasi layanan aplikasi dan mengatur interaksi mereka satu sama lain. Docker Compose dengan demikian merupakan alat untuk menggambarkan dan menjalankan aplikasi multi-kontainer Docker.


Dua kontainer berjalan pada sistem host

GNU Make


Suatu program makepada dasarnya adalah alat untuk mengotomatisasi perakitan program dan perpustakaan dari kode sumber. Secara umum, kita dapat mengatakan bahwa itu makeberlaku untuk proses apa pun yang mencakup pelaksanaan perintah sewenang-wenang untuk mengubah bahan sumber tertentu ke bentuk hasil tertentu, ke tujuan tertentu. Dalam kasus kami, tim docker-composeakan dikonversi ke tujuan abstrak ( target palsu ).

Untuk memberi tahu program makeapa yang kita inginkan darinya, kita memerlukan file Makefile. Perintah

kami Makefileakan berisi perintah dockerdandocker-composeyang dirancang untuk menyelesaikan banyak masalah. Yaitu, kita berbicara tentang merakit wadah, tentang memulai, menghentikan, memulai kembali, tentang mengatur login pengguna ke wadah, tentang bekerja dengan log kontainer dan tentang memecahkan masalah serupa lainnya.

Penggunaan Khas untuk Menulis Docker


Bayangkan aplikasi web biasa yang memiliki komponen berikut:

  • Database TimescaleDB (Postgres).
  • Aplikasi Express.js.
  • Ping (hanya sebuah wadah yang tidak melakukan hal khusus).

Aplikasi ini akan membutuhkan 3 kontainer Docker dan file yang docker-composeberisi instruksi untuk mengelola kontainer ini. Setiap wadah akan memiliki titik interaksi yang berbeda. Misalnya, timescaleAnda bisa bekerja dengan wadah dengan cara yang sama seperti Anda bekerja dengan database. Yaitu, memungkinkan Anda untuk melakukan tindakan berikut:

  • Masuk ke shell Postgres.
  • Impor dan ekspor tabel.
  • Buat pg_dumptabel atau database.

Wadah aplikasi Express.js ,, expressjsmungkin memiliki fitur berikut:

  • Output data segar dari log sistem.
  • Masukkan shell untuk menjalankan perintah tertentu.

Interaksi Kontainer


Setelah kami mengonfigurasi koneksi antara kontainer menggunakan Docker Compose, saatnya untuk menjalin interaksi dengan kontainer ini. Sebagai bagian dari sistem Menulis Docker, ada perintah docker-composeyang mendukung opsi -fyang memungkinkan Anda untuk mentransfer file ke sistem docker-compose.yml.

Menggunakan kemampuan opsi ini, Anda dapat membatasi interaksi dengan sistem hanya untuk wadah yang disebutkan dalam file docker-compose.yml.

Lihatlah bagaimana interaksi wadah terlihat saat menggunakan perintah docker-compose. Jika kita membayangkan bahwa kita perlu memasukkan shell psql, maka perintah yang sesuai mungkin terlihat seperti ini:

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

Perintah yang sama untuk yang tidak docker-compose, tetapi digunakan docker, mungkin terlihat seperti ini:

docker exec -it  edp_timescale_1 psql -Upostgres

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

Kedua perintah di atas tidak begitu rumit. Tetapi jika kita menggunakan "wrapper" dalam bentuk Makefileyang akan memberi kita antarmuka dalam bentuk perintah sederhana dan memanggil sendiri perintah yang panjang, maka hasil yang sama dapat dicapai seperti ini:

make db-shell

Jelas bahwa penggunaannya Makefilesangat menyederhanakan pekerjaan dengan wadah!

Contoh kerja


Berdasarkan diagram proyek di atas, buat 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 Susunan Docker dan untuk berinteraksi dengan wadah yang dijelaskannya, buat 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 wadah, tetapi menggunakan opsi ini c=memungkinkan Anda membatasi ruang lingkup perintah ke satu wadah.

Setelah Makefilesiap, Anda dapat menggunakannya seperti ini:

  • make help- mengeluarkan daftar semua perintah yang tersedia untuk make.


Perintah yang Tersedia, Bantuan

  • make build- perakitan gambar dari Dockerfile. Dalam contoh kami, kami menggunakan gambar yang ada timescaledan ping. Tapi apikami ingin mengumpulkan gambar secara lokal. Inilah yang akan dilakukan setelah menjalankan perintah ini.


Perakitan kontainer Docker

  • make start- Peluncuran semua kontainer. Untuk memulai hanya satu wadah, Anda dapat menggunakan perintah dari formulir make start c=timescale.


Luncurkan wadah skala waktu


Luncurkan wadah ping

  • make login-timescale- masuk ke sesi bash wadah timescale.


Menjalankan bash dalam wadah skala waktu

  • make db-shell- Masuk psqlke wadah timescaleuntuk menjalankan query SQL ke database.


Menjalankan psql dalam wadah timescaledb

  • make stop - Menghentikan kontainer.


Menghentikan wadah skala waktu

  • make down- berhenti dan lepaskan wadah. Untuk menghapus wadah tertentu, Anda dapat menggunakan perintah ini dengan wadah yang ditentukan. Misalnya - make down c=timescaleatau make down c=api.


Hentikan dan hapus semua kontainer

Ringkasan


Terlepas dari kenyataan bahwa sistem penulisan Docker memberi kita seperangkat perintah luas yang dirancang untuk mengelola wadah, kadang-kadang perintah ini menjadi panjang, dan akibatnya sulit untuk diingat.

Metodologi penggunaan Makefilemembantu kami menjalin interaksi yang cepat dan mudah dengan wadah dari file docker-compose.yml. Yaitu, kita berbicara tentang hal berikut:

  • , docker-compose.yml, .
  • , , make help .
  • , . , docker-compose -f docker-compose.yml exec timescale psql -Upostgres make db-shell.
  • Makefile , , . , .
  • Makefile, .

PS Di pasar kami ada gambar Docker , yang dipasang dalam satu klik. Anda dapat memeriksa pengoperasian wadah di VPS . Semua pelanggan baru diberikan 3 hari gratis untuk pengujian.

Pembaca yang budiman! Bagaimana Anda mengotomatiskan pekerjaan dengan Docker Compose?

Source: https://habr.com/ru/post/undefined/


All Articles