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 hostGNU Make
Suatu program make
pada dasarnya adalah alat untuk mengotomatisasi perakitan program dan perpustakaan dari kode sumber. Secara umum, kita dapat mengatakan bahwa itu make
berlaku 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-compose
akan dikonversi ke tujuan abstrak ( target palsu ).Untuk memberi tahu program make
apa yang kita inginkan darinya, kita memerlukan file Makefile
. Perintahkami Makefile
akan berisi perintah docker
dandocker-compose
yang 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-compose
berisi instruksi untuk mengelola kontainer ini. Setiap wadah akan memiliki titik interaksi yang berbeda. Misalnya, timescale
Anda 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_dump
tabel atau database.
Wadah aplikasi Express.js ,, expressjs
mungkin 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-compose
yang mendukung opsi -f
yang 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 Makefile
yang 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 Makefile
sangat 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 Makefile
siap, Anda dapat menggunakannya seperti ini:make help
- mengeluarkan daftar semua perintah yang tersedia untuk make
.
Perintah yang Tersedia, Bantuanmake build
- perakitan gambar dari Dockerfile
. Dalam contoh kami, kami menggunakan gambar yang ada timescale
dan ping
. Tapi api
kami ingin mengumpulkan gambar secara lokal. Inilah yang akan dilakukan setelah menjalankan perintah ini.
Perakitan kontainer Dockermake start
- Peluncuran semua kontainer. Untuk memulai hanya satu wadah, Anda dapat menggunakan perintah dari formulir make start c=timescale
.
Luncurkan wadah skala waktuLuncurkan wadah pingmake login-timescale
- masuk ke sesi bash wadah timescale
.
Menjalankan bash dalam wadah skala waktumake db-shell
- Masuk psql
ke wadah timescale
untuk menjalankan query SQL ke database.
Menjalankan psql dalam wadah timescaledbmake stop
- Menghentikan kontainer.
Menghentikan wadah skala waktumake down
- berhenti dan lepaskan wadah. Untuk menghapus wadah tertentu, Anda dapat menggunakan perintah ini dengan wadah yang ditentukan. Misalnya - make down c=timescale
atau make down c=api
.
Hentikan dan hapus semua kontainerRingkasan
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 Makefile
membantu 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?