برنامه نویسی

ظروف mutliple را با آهنگسازی dockerize کنید

از مورد استفاده کنید – آنچه را که حل می کند

بنابراین اگر تاکنون با ظروف داکر آشنا هستید (اگر اینطور نیست ، دو مقاله قبلی من را در این مورد بخوانید) ،

هنگامی که بیش از 1 ظرف وجود دارد و آنها باید در تعامل باشند ، مواردی وجود دارد که باید آنها را تکرار کنید ، مانند:

  • کشیدن تصویر و ایجاد یک ظرف.
  • تخصیص حجم ، گذر از env و غیره به کانتینر
  • تمام ظروف را در همان شبکه اجرا کنید

بشر

حال اگر 3،4،5 ، .. یا بیشتر وجود داشته باشد ، شدیدتر می شود ، ببینید این به کجا می رود؟ Docker آهنگسازی را حل می کند ، با “آهنگسازی” پیکربندی ظروف خود را در یک نوع فایل به نام “یام” (مشابه آن به JSON – یک قالب داده ، معمولاً برای پیکربندی ها).

شما هنوز مواردی مانند Dockerfile دارید و مفاهیم ظروف یکسان هستند ، فقط فرایندی که ساده تر است.


بیایید آن را تنظیم کنیم

یک نمونه سریع از 3 ظروف که با استفاده از آهنگسازی Docker در حال چرخش هستند.

بنابراین این چیزی است که ما می خواهیم تنظیم کنیم:

سیستم docker-compose

  • یک سرور گره JS که کلید تصادفی را می نویسد ، مقادیر Redis DB
  • سپس تغییرات را از Redis Insight بررسی می کنیم.

بیایید با نوشتن کد برای این سرور node.js شروع کنیم:

یک بسته NPM را اولیه کنید:

npm init -y
npm install express redis
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

کد برای سرور Node.js:

const express = require("express");
const redis = require("redis");

const app = express();
const client = redis.createClient({ url: process.env.REDIS_URL });
client.connect();

app.get("/", async (req, res) => {
  const randomKey = `key_${Math.floor(Math.random() * 1000)}`;
  const randomValue = `value_${Math.floor(Math.random() * 1000)}`;

  await client.set(randomKey, randomValue);

  res.send(`stored random K-V pair: ${randomKey} = ${randomValue}`);
});

app.listen(3000, () => console.log("Server running on port 3000"));
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید


سپس نوشتن یک dockerfile برای ایجاد این ظرف در یک ظرف:

FROM node:18
WORKDIR /app
COPY . .
RUN npm install
CMD ["node", "server.js"]
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید


در نهایت ، یک پرونده “docker-compose.yaml” تهیه کنید:

version: "3.8"

services:
  api:
    build: .
    ports:
      - "3000:3000"
    depends_on:
      - redis
    environment:
      REDIS_URL: redis://redis:6379

  redis:
    image: redis:latest
    ports:
      - "6379:6379"

  redisinsight:
    image: redis/redisinsight:latest
    ports:
      - "5540:5540"
    restart: unless-stopped
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

از این طریق بخوانید ، متوجه خواهید شد که هنوز مفاهیم مشابهی مانند Dockerfile ، Ports و محیط زیست را دارید.

و شبکه بین این ظروف چیست؟ از آنجا که ما مجبور شدیم این کار را به صورت دستی انجام دهیم ، Docker-Compose همه اینها را در یک شبکه قرار می دهد ، بنابراین لازم نیست با آن مقابله کنید.

روشی که یک ظرف به دیگری اشاره دارد هنوز یکسان است ، به عنوان مثالبا Redis-Insight به Redis Contaner به عنوان redis اشاره خواهد کرد: // 6379

سپس این کار را با دستور اجرا کنید:

docker compose up -d  #d means run in background (detached mode)
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید


حالا بیایید این را آزمایش کنیم:

curl http://localhost:3000 #via curl
wget http://localhost:3000 #via wget
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

یا فقط از مرورگر خود استفاده کنید

  • سپس در Redis-Insight بررسی کنید:

با نمونه Redis ارتباط برقرار کنید:

Redis-Insight اضافه کردن redis db

به جفت های ارزش کلید تصادفی اضافه شده مراجعه کنید:

نمای بینش redis


برای مراجعه بیشتر به پیکربندی YAML Docker-Compose ، این را بررسی کنید

سعی کنید ظروف بیشتری را با آهنگسازی Docker بسازید ، تا بتوانید تجربه خود را تجربه کنید ، می توانید سعی کنید:

  • یک برنامه CRUD: یک برنامه Node.js + React را با مقداری DB (PG ، MySQL ، Redis) بسازید
  • مانیتور DB: PG DB ، از صادر کننده PG برای پرومتئوس ، با پرومتئوس و گرافانا استفاده کنید. بنابراین pg -> صادر کننده -> prometheus -> grafana (و برخی از سرور برای نوشتن به PG)

به هر حال ، این در مورد آن است.
شاید من با چند نمونه چیزهای بیشتری را با Docker بپوشانم ، یا در مورد Docker Swarm در مورد بعدی صحبت کنم!

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا