{"id":11031,"date":"2026-04-12T16:37:30","date_gmt":"2026-04-12T16:37:30","guid":{"rendered":"https:\/\/bitep.net\/blog\/2026\/04\/12\/ubuntu-24-04-docker-compose-plugin-tutorial\/"},"modified":"2026-04-12T16:37:30","modified_gmt":"2026-04-12T16:37:30","slug":"ubuntu-24-04-docker-compose-plugin-tutorial","status":"publish","type":"post","link":"https:\/\/bitep.net\/blog\/2026\/04\/12\/ubuntu-24-04-docker-compose-plugin-tutorial\/","title":{"rendered":"Ubuntu 24.04-d\u0259 Docker Compose nec\u0259 qurulur v\u0259 istifad\u0259 olunur?"},"content":{"rendered":"<p>Docker art\u0131q qurulubsa, n\u00f6vb\u0259ti praktik add\u0131mlardan biri <strong>Docker Compose<\/strong> istifad\u0259 etm\u0259kdir. X\u00fcsusil\u0259 bird\u0259n \u00e7ox servis i\u015fl\u0259d\u0259n layih\u0259l\u0259rd\u0259, m\u0259s\u0259l\u0259n web app + database + cache ssenarisind\u0259 Compose idar\u0259ni xeyli sad\u0259l\u0259\u015fdirir. T\u0259k-t\u0259k <code>docker run<\/code> \u0259mrl\u0259ri \u0259v\u0259zin\u0259 b\u00fct\u00fcn stack-i bir YAML fayl\u0131 il\u0259 idar\u0259 etm\u0259k olur.<\/p>\n<p>Bu m\u0259qal\u0259d\u0259 Ubuntu 24.04-d\u0259 Docker Compose plugin-in nec\u0259 quruldu\u011funu, onun d\u00fczg\u00fcn yoxlanmas\u0131n\u0131 v\u0259 sad\u0259 bir <code>compose.yaml<\/code> il\u0259 ilk stack-in nec\u0259 ba\u015flad\u0131ld\u0131\u011f\u0131n\u0131 add\u0131m-add\u0131m g\u00f6st\u0259r\u0259c\u0259y\u0259m.<\/p>\n<h2>Docker Compose n\u0259dir?<\/h2>\n<p>Docker Compose bir ne\u00e7\u0259 container-d\u0259n ibar\u0259t t\u0259tbiql\u0259ri t\u0259k yerd\u0259n idar\u0259 etm\u0259y\u0259 imkan verir. Siz servis konfiqurasiyas\u0131n\u0131 bir <code>compose.yaml<\/code> fayl\u0131nda saxlay\u0131rs\u0131n\u0131z, sonra bir ne\u00e7\u0259 \u0259mr il\u0259 b\u00fct\u00fcn stack-i qald\u0131r\u0131r, s\u00f6nd\u00fcr\u00fcr v\u0259 yenid\u0259n qurursunuz.<\/p>\n<ul>\n<li>bird\u0259n \u00e7ox servisi birlikd\u0259 idar\u0259 edir<\/li>\n<li>port mapping, environment variable v\u0259 volume-l\u0259ri bir yerd\u0259 saxlay\u0131r<\/li>\n<li>local development v\u0259 test \u00fc\u00e7\u00fcn \u00e7ox rahatd\u0131r<\/li>\n<li>sad\u0259 deploy ssenaril\u0259rind\u0259 d\u0259 praktikdir<\/li>\n<\/ul>\n<h2>Bu tutorial kim \u00fc\u00e7\u00fcnd\u00fcr?<\/h2>\n<ul>\n<li>Ubuntu 24.04 istifad\u0259\u00e7il\u0259ri<\/li>\n<li>Docker art\u0131q qura\u015fd\u0131r\u0131lm\u0131\u015f sisteml\u0259r<\/li>\n<li>bir app v\u0259 \u0259lav\u0259 servis, m\u0259s\u0259l\u0259n Redis v\u0259 ya database birlikd\u0259 i\u015fl\u0259tm\u0259k ist\u0259y\u0259nl\u0259r<\/li>\n<\/ul>\n<h2>Ba\u015flamazdan \u0259vv\u0259l n\u0259 haz\u0131r olmal\u0131d\u0131r?<\/h2>\n<ul>\n<li>Ubuntu 24.04<\/li>\n<li>Docker Engine qura\u015fd\u0131r\u0131lm\u0131\u015f olmal\u0131d\u0131r<\/li>\n<li>sudo s\u0259lahiyy\u0259ti<\/li>\n<\/ul>\n<p>\u018fg\u0259r Docker h\u0259l\u0259 qurulmay\u0131bsa, \u0259vv\u0259l onu qurmaq daha do\u011frudur. Compose plugin Docker-in \u00fcst\u00fcn\u0259 g\u0259l\u0259n \u0259lav\u0259 komponentdir.<\/p>\n<h2>Add\u0131m 1: Docker Compose plugin qura\u015fd\u0131r\u0131n<\/h2>\n<p>\u018fg\u0259r siz Docker-i r\u0259smi repository \u00fcz\u0259rind\u0259n qura\u015fd\u0131rm\u0131s\u0131n\u0131zsa, Compose plugin ayr\u0131ca \u00e7ox rahat qurulur:<\/p>\n<pre><code>sudo apt-get update\nsudo apt-get install docker-compose-plugin -y<\/code><\/pre>\n<p>Bu, Ubuntu v\u0259 Debian \u00fc\u00e7\u00fcn r\u0259smi t\u00f6vsiy\u0259 olunan yoldur.<\/p>\n<h2>Add\u0131m 2: Qura\u015fd\u0131rman\u0131 yoxlay\u0131n<\/h2>\n<p>\u0130ndi Compose-un tan\u0131nd\u0131\u011f\u0131n\u0131 yoxlay\u0131n:<\/p>\n<pre><code>docker compose version<\/code><\/pre>\n<p>Burada versiya cavab\u0131 g\u0259lirs\u0259, plugin d\u00fczg\u00fcn qura\u015fd\u0131r\u0131l\u0131b.<\/p>\n<p><strong>Vacib qeyd:<\/strong> m\u00fcasir yana\u015fma <code>docker compose<\/code> \u015f\u0259klind\u0259dir. K\u00f6hn\u0259 <code>docker-compose<\/code> binar\u0131 ayr\u0131ca v\u0259 f\u0259rqli ola bil\u0259r.<\/p>\n<h2>Add\u0131m 3: Sad\u0259 test layih\u0259si yarad\u0131n<\/h2>\n<p>Test \u00fc\u00e7\u00fcn yeni qovluq a\u00e7\u0131n:<\/p>\n<pre><code>mkdir compose-demo\ncd compose-demo<\/code><\/pre>\n<p>Sonra sad\u0259 bir <code>compose.yaml<\/code> yarad\u0131n:<\/p>\n<pre><code>services:\n  web:\n    image: nginx:alpine\n    ports:\n      - \"8080:80\"\n\n  redis:\n    image: redis:alpine<\/code><\/pre>\n<p>Bu konfiqurasiya iki servis qald\u0131r\u0131r:<\/p>\n<ul>\n<li><code>web<\/code> \u00fc\u00e7\u00fcn Nginx<\/li>\n<li><code>redis<\/code> \u00fc\u00e7\u00fcn Redis image<\/li>\n<\/ul>\n<h2>Add\u0131m 4: Stack-i ba\u015flad\u0131n<\/h2>\n<pre><code>docker compose up -d<\/code><\/pre>\n<p>Bu \u0259mrl\u0259 container-l\u0259r background-da qalxacaq.<\/p>\n<p>Sonra statusa bax\u0131n:<\/p>\n<pre><code>docker compose ps<\/code><\/pre>\n<p>Brauzerd\u0259 v\u0259 ya curl il\u0259 yoxlay\u0131n:<\/p>\n<pre><code>curl http:\/\/localhost:8080<\/code><\/pre>\n<p>Nginx default cavab\u0131 g\u0259lirs\u0259, stack i\u015fl\u0259yir.<\/p>\n<h2>Add\u0131m 5: Stack-i dayand\u0131r\u0131n<\/h2>\n<pre><code>docker compose down<\/code><\/pre>\n<p>Bu \u0259mrl\u0259 servis-l\u0259r ba\u011flan\u0131r v\u0259 container-l\u0259r silinir. \u018fg\u0259r volume istifad\u0259 etmisinizs\u0259, onlar ayr\u0131ca qala bil\u0259r.<\/p>\n<h2>Bir az daha praktik compose.yaml n\u00fcmun\u0259si<\/h2>\n<p>Daha real development ssenarisind\u0259 environment variable istifad\u0259 etm\u0259k daha d\u00fczg\u00fcnd\u00fcr:<\/p>\n<pre><code>services:\n  app:\n    image: nginx:alpine\n    ports:\n      - \"${APP_PORT}:80\"\n\n  redis:\n    image: redis:alpine<\/code><\/pre>\n<p>Sonra bir <code>.env<\/code> fayl\u0131 yarad\u0131rs\u0131n\u0131z:<\/p>\n<pre><code>APP_PORT=8080<\/code><\/pre>\n<p>Compose bu d\u0259y\u0259rl\u0259ri avtomatik oxuya bilir.<\/p>\n<h2>Health check niy\u0259 vacibdir?<\/h2>\n<p>\u018fg\u0259r bir servis dig\u0259rind\u0259n as\u0131l\u0131d\u0131rsa, sad\u0259c\u0259 eyni anda qalxmalar\u0131 kifay\u0259t etm\u0259y\u0259 bil\u0259r. M\u0259s\u0259l\u0259n web app Redis haz\u0131r olmadan ba\u015flasa, crash ed\u0259 bil\u0259r. Buna g\u00f6r\u0259 Compose-da health check v\u0259 <code>depends_on<\/code> daha praktik yana\u015fmad\u0131r.<\/p>\n<p>N\u00fcmun\u0259:<\/p>\n<pre><code>services:\n  web:\n    build: .\n    depends_on:\n      redis:\n        condition: service_healthy\n\n  redis:\n    image: redis:alpine\n    healthcheck:\n      test: [\"CMD\", \"redis-cli\", \"ping\"]\n      interval: 5s\n      timeout: 3s\n      retries: 5\n      start_period: 10s<\/code><\/pre>\n<p>Bu yana\u015fma lokal development v\u0259 test m\u00fchitind\u0259 daha stabil n\u0259tic\u0259 verir.<\/p>\n<h2>\u018fn \u00e7ox rast g\u0259lin\u0259n probleml\u0259r<\/h2>\n<h3>1. `docker compose` tan\u0131nm\u0131r<\/h3>\n<p>Plugin qura\u015fd\u0131r\u0131lmay\u0131b v\u0259 ya Docker r\u0259smi repo il\u0259 qurulmay\u0131b. <code>docker-compose-plugin<\/code> paketini yenid\u0259n yoxlay\u0131n.<\/p>\n<h3>2. `docker-compose` i\u015fl\u0259yir, amma `docker compose` yox<\/h3>\n<p>Bu, k\u00f6hn\u0259 binar il\u0259 yeni plugin modelinin qar\u0131\u015fmas\u0131 ola bil\u0259r. Praktik olaraq yeni formatdan istifad\u0259 etm\u0259k daha d\u00fczg\u00fcnd\u00fcr.<\/p>\n<h3>3. Port conflict olur<\/h3>\n<p>Host-da eyni port art\u0131q istifad\u0259 olunursa, m\u0259s\u0259l\u0259n 8080, compose qalxmaya bil\u0259r. Bu halda port mapping d\u0259yi\u015fin.<\/p>\n<h3>4. Servis qalx\u0131r, amma app i\u015fl\u0259mir<\/h3>\n<p>Bu, \u00e7ox vaxt image, environment variable, dependency v\u0259 ya health check problemi olur. <code>docker compose logs<\/code> il\u0259 bax\u0131n:<\/p>\n<pre><code>docker compose logs<\/code><\/pre>\n<h2>T\u0259hl\u00fck\u0259sizlik v\u0259 praktik t\u00f6vsiy\u0259l\u0259r<\/h2>\n<ul>\n<li>production-da compose istifad\u0259 edirsinizs\u0259, secrets-i d\u00fcz idar\u0259 edin<\/li>\n<li><code>.env<\/code> fayl\u0131n\u0131 ehtiyats\u0131z \u015f\u0259kild\u0259 Git-\u0259 g\u00f6nd\u0259rm\u0259yin<\/li>\n<li>named volume-l\u0259r v\u0259 log \u00f6l\u00e7\u00fcs\u00fc bar\u0259d\u0259 \u0259vv\u0259lc\u0259d\u0259n d\u00fc\u015f\u00fcn\u00fcn<\/li>\n<li>internet\u0259 a\u00e7\u0131q port mapping-l\u0259ri diqq\u0259tl\u0259 se\u00e7in<\/li>\n<\/ul>\n<h2>N\u0259tic\u0259<\/h2>\n<p>Ubuntu 24.04-d\u0259 Docker Compose plugin qura\u015fd\u0131rmaq \u00e7ox s\u00fcr\u0259tli, amma \u00e7ox faydal\u0131 add\u0131md\u0131r. X\u00fcsusil\u0259 bir ne\u00e7\u0259 servis i\u015fl\u0259d\u0259n layih\u0259l\u0259rd\u0259 Compose h\u0259m development, h\u0259m d\u0259 sad\u0259 deploy ssenaril\u0259rind\u0259 b\u00f6y\u00fck rahatl\u0131q yarad\u0131r. \u018fn yax\u015f\u0131 ba\u015flan\u011f\u0131c yana\u015fmas\u0131 budur: \u0259vv\u0259l plugin-i r\u0259smi paketl\u0259 qura\u015fd\u0131r\u0131n, <code>docker compose version<\/code> il\u0259 yoxlay\u0131n, sonra ki\u00e7ik bir <code>compose.yaml<\/code> il\u0259 ilk stack-i i\u015f\u0259 sal\u0131n.<\/p>\n<p>N\u00f6vb\u0259ti m\u0259rh\u0259l\u0259d\u0259 ist\u0259s\u0259niz Docker Compose il\u0259 Nginx reverse proxy, app + database stack v\u0259 ya health check-l\u0259rl\u0259 daha dayan\u0131ql\u0131 lokal m\u00fchit qura bil\u0259rsiniz.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Docker art\u0131q qurulubsa, n\u00f6vb\u0259ti praktik add\u0131mlardan biri Docker Compose istifad\u0259 etm\u0259kdir. X\u00fcsusil\u0259 bird\u0259n \u00e7ox servis i\u015fl\u0259d\u0259n layih\u0259l\u0259rd\u0259, m\u0259s\u0259l\u0259n web app + database + cache ssenarisind\u0259 Compose idar\u0259ni xeyli sad\u0259l\u0259\u015fdirir. T\u0259k-t\u0259k docker run \u0259mrl\u0259ri \u0259v\u0259zin\u0259 b\u00fct\u00fcn stack-i bir YAML fayl\u0131 il\u0259 idar\u0259 etm\u0259k olur. Bu m\u0259qal\u0259d\u0259 Ubuntu 24.04-d\u0259 Docker Compose plugin-in nec\u0259 quruldu\u011funu, onun d\u00fczg\u00fcn yoxlanmas\u0131n\u0131 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":11030,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[17,18,41],"tags":[],"class_list":["post-11031","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-hosting","category-technology","category-tutoriallar"],"aioseo_notices":[],"jetpack_featured_media_url":"https:\/\/bitep.net\/blog\/wp-content\/uploads\/2026\/04\/docker-compose-ubuntu-24-04.png","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/bitep.net\/blog\/wp-json\/wp\/v2\/posts\/11031","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bitep.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bitep.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bitep.net\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bitep.net\/blog\/wp-json\/wp\/v2\/comments?post=11031"}],"version-history":[{"count":0,"href":"https:\/\/bitep.net\/blog\/wp-json\/wp\/v2\/posts\/11031\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/bitep.net\/blog\/wp-json\/wp\/v2\/media\/11030"}],"wp:attachment":[{"href":"https:\/\/bitep.net\/blog\/wp-json\/wp\/v2\/media?parent=11031"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bitep.net\/blog\/wp-json\/wp\/v2\/categories?post=11031"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bitep.net\/blog\/wp-json\/wp\/v2\/tags?post=11031"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}