ডিটারমিনিস্টিক পোর্ট বাইন্ডিং সহ ডকার স্কেল


14

আমি একটি wildflyধারককে স্কেল করতে চাই যেগুলি একাধিক পোর্টকে ডিটারমিনিস্টিক ফলাফল সহ প্রকাশ করে।

Docker-compose.yml

version: '3'
services:
  wildfly-server:
    build:
      context: .
      dockerfile: Dockerfile
      args:
        admin_user: admin
        admin_password: admin
    deploy:
      resources:
          limits:
            memory: 1.5G
            cpus: "1.5"
    restart: always
    ports:
      - "8000-8099:8080"
      - "8100-8199:9990"
      - "8200-8299:8787"
    expose:
      - "8080"
      - "9990"
      - "8787"

Dockerfile

FROM jboss/wildfly:16.0.0.Final

# DOCKER ENV VARIABLES
ENV WILDFLY_HOME /opt/jboss/wildfly
ENV STANDALONE_DIR ${WILDFLY_HOME}/standalone
ENV DEPLOYMENT_DIR ${STANDALONE_DIR}/deployments
ENV CONFIGURATION_DIR ${STANDALONE_DIR}/configuration

RUN ${WILDFLY_HOME}/bin/add-user.sh ${admin_user} ${admin_password} --silent

# OPENING DEBUG PORT
RUN rm ${WILDFLY_HOME}/bin/standalone.conf
ADD standalone.conf ${WILDFLY_HOME}/bin/

# SET JAVA ENV VARS
RUN rm ${CONFIGURATION_DIR}/standalone.xml
ADD standalone.xml ${CONFIGURATION_DIR}/

কমান্ড শুরু করার জন্য

docker-compose up --build --force-recreate --scale wildfly-server=10

এটি আমি যেমন চাই তেমন কাজ করে তবে কিছু বন্দরের তাত্পর্য রয়েছে। আমি যখন পাত্রে তৈরি করি, আমি চাই যে প্রতিটি কন্টেইনারটি নিম্নরূপে প্রকাশিত হওয়ার জন্য তাদের বর্ধিত পোর্ট থাকবে:

machine_1 8001, 8101, 82001
machine_2 8002, 8102, 82002
machine_3 8003, 8103, 82003 

তবে ফলস্বরূপ আমি যা পাই তা হতাশাবোধমূলক নয় এবং এর মতো দেখায়:

machine_1 8001, 8102, 82003
machine_2 8002, 8101, 82001
machine_3 8003, 8103, 82002 

সমস্যাটি হ'ল প্রতিবার আমি কম্পোজ আপ কমান্ডটি চালাচ্ছি, প্রতিটি পাত্রে পোর্টগুলি আলাদা।

উদাহরণ আউটপুট:

CONTAINER ID  COMMAND                  CREATED             STATUS              PORTS                                                                    NAMES
0232f24fbca4  "/opt/jboss/wildfly/…"   5 minutes ago       Up 5 minutes        0.0.0.0:8028->8080/tcp, 0.0.0.0:8231->8787/tcp, 0.0.0.0:8126->9990/tcp   wildfly-server_7
13a6a365a552  "/opt/jboss/wildfly/…"   5 minutes ago       Up 5 minutes        0.0.0.0:8031->8080/tcp, 0.0.0.0:8230->8787/tcp, 0.0.0.0:8131->9990/tcp   wildfly-server_10
bf8260d9874d  "/opt/jboss/wildfly/…"   5 minutes ago       Up 5 minutes        0.0.0.0:8029->8080/tcp, 0.0.0.0:8228->8787/tcp, 0.0.0.0:8129->9990/tcp   wildfly-server_6
3d58f2e9bdfe  "/opt/jboss/wildfly/…"   5 minutes ago       Up 5 minutes        0.0.0.0:8030->8080/tcp, 0.0.0.0:8229->8787/tcp, 0.0.0.0:8130->9990/tcp   wildfly-server_9
7824a73a09f5  "/opt/jboss/wildfly/…"   5 minutes ago       Up 5 minutes        0.0.0.0:8027->8080/tcp, 0.0.0.0:8227->8787/tcp, 0.0.0.0:8128->9990/tcp   wildfly-server_3
85425462259d  "/opt/jboss/wildfly/…"   5 minutes ago       Up 5 minutes        0.0.0.0:8024->8080/tcp, 0.0.0.0:8224->8787/tcp, 0.0.0.0:8124->9990/tcp   wildfly-server_2
5be5bbe8e577  "/opt/jboss/wildfly/…"   5 minutes ago       Up 5 minutes        0.0.0.0:8026->8080/tcp, 0.0.0.0:8226->8787/tcp, 0.0.0.0:8127->9990/tcp   wildfly-server_8
2512fc0643a3  "/opt/jboss/wildfly/…"   5 minutes ago       Up 5 minutes        0.0.0.0:8023->8080/tcp, 0.0.0.0:8223->8787/tcp, 0.0.0.0:8123->9990/tcp   wildfly-server_5
b156de688dcb  "/opt/jboss/wildfly/…"   5 minutes ago       Up 5 minutes        0.0.0.0:8025->8080/tcp, 0.0.0.0:8225->8787/tcp, 0.0.0.0:8125->9990/tcp   wildfly-server_4
3e9401552b0a  "/opt/jboss/wildfly/…"   5 minutes ago       Up 5 minutes        0.0.0.0:8022->8080/tcp, 0.0.0.0:8222->8787/tcp, 0.0.0.0:8122->9990/tcp   wildfly-server_1

প্রশ্ন

বন্দর বিতরণকে নির্বিচারে করার কোনও উপায় আছে কি? উপলব্ধ পোর্ট বা অন্য কোনও পদ্ধতিতে সিরিয়াল চেক করতে সমান্তরাল চলমান অক্ষম করার মতো? আমি খুঁজে পেল একমাত্র বিকল্প হ'ল একটি yml টেমপ্লেট রয়েছে এবং সমস্ত প্রয়োজনীয় ফাইলগুলি তৈরি করা (যেমন 10 যদি আমার 10 টি ধারক প্রয়োজন হয় তবে 10)। কোন বিকল্প সমাধান আছে?


আপনি যদি
জিনকিনের

পরিবেশ কোনও স্থির নয়। লক্ষ্যটি মূলত এটি যে কোনও জায়গায় প্রয়োজন হিসাবে পপআপ করা। আমি উল্লিখিত ymlটেমপ্লেটটি বিভিন্ন পরিবেশের ভেরিয়েবলগুলির সাথে সমাধান করতে পারি , তবে এটি করার কোনও উপায় আছে কিনা তা সম্পর্কে আমি আগ্রহী --scale
হ্যাশ

ঝাঁক মোড ব্যবহার করতে বাধা দেওয়ার কোনও কারণ আছে কি?
eez0

ক্রমবর্ধমান পোর্টগুলি এবং ডিটারমিনিস্টিক পোর্ট বাইন্ডিং সহ একাধিক উদাহরণ তৈরি করতে আপনি কীভাবে ঝাঁক মোড ব্যবহার করবেন?
হ্যাশ

আপনি একাধিক উদাহরণ চালাতে চান, আপনি যখন কোনও অনুরোধ প্রেরণ করেন তখন এটি উপলব্ধ যে কোনও একটিতে চলে যাবে। আপনি কি চান এমন আচরণ?
কিজ

উত্তর:


3

না, আপনি বর্তমানে (10/14/19) ডকার-রচনা ফাইলটিতে পোর্ট নির্বাচন নির্ধারণকারী করতে পারবেন না। এই আচরণটি গিথুব # 722 এবং # 1247 ইস্যুতে অনুরোধ করা হয়েছিল , তবে সমস্যাটি কার্যকর না করেই এই সমস্যাগুলি বন্ধ করে দেওয়া হয়েছিল।

আপনি যদি কোনও অ্যাপ্লিকেশনটি আধা-গতিসম্পন্নভাবে স্কেল করতে চান যা আপনার মনে হয়, তবে আপনাকে এটি অন্যভাবে সমাধান করতে হবে। আপনার .ymlটেম্প্লেটিং ধারণাটি সবচেয়ে পরিষ্কার সমাধান আইএমওর মতো মনে হচ্ছে।

আপনি কি নিশ্চিত যে আপনার পোর্টগুলি ডিটারমিনিস্টিক হওয়ার দরকার? আপনি যদি কোনও নিমিনেক্সের মতো বিপরীত প্রক্সি ব্যবহার করেন যা একটি হোস্ট পোর্টে শোনে এবং আপনার সমস্ত ডকারের ধারকগুলির মধ্যে ভার ভারসাম্য বজায় রাখে, তবে এটি কি আপনার ব্যবহারের ক্ষেত্রে কাজ করবে? ডকার পাত্রে একটি এনজিঙ্ক্স লোড ব্যালেন্সার সেট আপ করা বেশ সোজা is আমি আপনাকে এটি সন্ধান করার পরামর্শ দিই, এবং যদি এখনও একজন কলারের কাছে পরিষেবাটির বন্দরটি জানতে আপনার যদি কোনও নিয়ন্ত্রকের .ymlউপায়ের প্রয়োজন হয় তবে এটি বারবার একটি নির্দিষ্ট সার্ভারে একটি অনুরোধ প্রেরণ করতে পারে, তারপরে আপনার টেম্প্লেটিং সমাধান বা কোনও ধরণের পরিষেবা আবিষ্কারের প্রক্রিয়া থেকে পৃথক হয়ে যান with ডকার-রচনা কনফিগারেশন।


লিঙ্কগুলির জন্য আপনাকে ধন্যবাদ, আমি কিছুটা হতাশ হয়েছি যে তারা এমনকি সমস্যার সমাধান করেনি ... আমি স্বয়ংক্রিয়ভাবে পুরোপুরি স্কেল করতে চাই। :) কনটেইনারগুলি প্রস্তুত হওয়ার আগে কিছু ফাইল উত্পন্ন করার জন্য আমার ডিটারিমেন্টিক পোর্ট দরকার (প্রতিটি বন্দরটি আলাদা ব্যবহারকারীর জন্য হওয়া উচিত যাতে লোড ব্যালেন্সিং কোনও বিকল্প না হওয়ার আগে আমি মন্তব্য করেছি)। সুতরাং আপনার ভাগ করা তথ্যগুলি একটি মন্তব্যের মতো, কোনও উত্তর নয়।
হ্যাশ

সুতরাং সেই ক্ষেত্রে, আপনি ডকর-রচনা এবং ডকার হ্যান্ডেল করতে সজ্জিত এমন উপায়ে সত্যিই "গতিশীল স্কেলিং" নন। তারা আপনার পরিষেবাদির উদাহরণগুলি পুরোপুরি বিনিময়যোগ্য হওয়ার প্রত্যাশা করছে এবং আপনার ক্ষেত্রে সেগুলি নয় ... আপনার হয় হয় .ymlকোনওরকম সার্ভিস আবিষ্কার পদ্ধতি বা বন্দরগুলির নির্বাহী কার্যনির্বাহী প্রয়োজন, এবং আমি মনে করি যে আপনার চিত্তাকর্ষক পদ্ধতিটি দ্রুততম, সহজতম সমাধান। এবং বিটিডব্লিউ, আমি আপনার প্রশ্নের "প্রযুক্তিগতভাবে উত্তর দিয়েছি" "বন্দর বিতরণকে নির্বিচারক করার কোনও উপায় আছে কি?" :) তবে আমি ক্ষমাপ্রার্থী যে আমি আরও সহায়ক সমাধানের পরামর্শ দিতে পারিনি।
ব্রেন্ডন গগগিন 21
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.