আমি কীভাবে ডকার-রচনা দিয়ে নির্মিত চিত্রটির নাম সংজ্ঞায়িত করব


202

আমি আমার বিকাশের পরিবেশ তৈরি করতে ডকার-কম্পোজ ব্যবহার করছি । আমি একটি নির্দিষ্ট চিত্র তৈরি করতে চাই, তবে কীভাবে সেই চিত্রটির জন্য কোনও নাম সেট করতে হয় তা আমি জানি না।

wildfly:
  build: /path/to/dir/Dockerfile
  container_name: wildfly_server
  ports:
   - 9990:9990
   - 80:8080
  environment:
   - MYSQL_HOST=mysql_server
   - MONGO_HOST=mongo_server
   - ELASTIC_HOST=elasticsearch_server
  volumes:
   - /Volumes/CaseSensitive/development/wildfly/deployments/:/opt/jboss/wildfly/standalone/deployments/
  links:
   - mysql:mysql_server
   - mongo:mongo_server
   - elasticsearch:elasticsearch_server

যখন আমি কার্যকর করি docker-composeসবকিছু ঠিক থাকে তবে আমি নতুন চিত্রের জন্য একটি এলোমেলো নাম পাই। বিল্ড ইমেজে একটি নাম সেট করা সম্ভব?


17
আপনি যদি চিত্রটি তৈরি করতে ডকার-কমপোজ ব্যবহার করছেন তবে চিত্রটির নামটি সর্বদা হতে চলেছে <project>_<service>, যেখানে <service>এই উদাহরণে wildflyএবং আপনার ডিরেক্টরিতে থাকা ডিরেক্টরিটির নামের জন্য প্রকল্পের ডিফল্ট থাকে that আপনি এটি পরিবর্তন করতে পারেন -pবা COMPOSE_PROJECT_NAMEপরিবেশের পরিবর্তনশীল। কোনও কাস্টম চিত্রের নাম সেট করার কোনও উপায় নেই।
dnephin

1
কোন গ্রহণযোগ্য উত্তর আছে?
আমানিকা

docs.docker.com/docker-cloud/apps/service-links - এই বিষয় সম্পর্কে অফিসিয়াল ডকুমেন্ট
ইভান আরাকি

2
আপনার কাছে সেট করতে পারেন COMPOSE_PROJECT_NAME=xমধ্যে .envএবং আপনার পাত্রে বলা হবে{x}_{service}_{#}
eMPee584

উত্তর:


181

ডকার-রচনা সংস্করণ 2 ফাইল ফর্ম্যাটের জন্য, আপনি একটি পরিষেবার জন্য একটি চিত্র তৈরি এবং ট্যাগ করতে পারেন এবং তারপরে একই পরিষেবাটি অন্য পরিষেবার জন্য ব্যবহার করতে পারেন।

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

version: '2'

services:
  es-master:
    build: ./elasticsearch
    image: porter/elasticsearch
    ports:
      - "9200:9200"
    container_name: es_master

  es-node:
    image: porter/elasticsearch
    depends_on:
      - es-master
    ports:
      - "9200"
    command: elasticsearch --discovery.zen.ping.unicast.hosts=es_master

আপনি দেখতে পাচ্ছেন যে প্রথম পরিষেবা সংজ্ঞা "এস-মাস্টার" তে, আমি ডকফর্মিল থেকে। / ইলেস্টিকসার্কে একটি চিত্র তৈরি করতে "বিল্ড" বিকল্পটি ব্যবহার করি। আমি "পোর্টার / ইলাস্টিকসার্ক" নামটি "চিত্র" বিকল্পের সাহায্যে ছবিটি ট্যাগ করি। আমি তখন এই ইমেজটিকে "ইএস-নোড" পরিষেবা সংজ্ঞা "চিত্র" বিকল্পের সাথে উল্লেখ করি এবং অন্যান্য কনটেইনার "এস-মাস্টার" নির্মিত এবং প্রথমে চালিত হয় তা নিশ্চিত করতে একটি "depend_on" ব্যবহার করুন।


55
বিকল্পটি container_name:সত্যই সহায়তা করেছে।
ব্রুনো বিয়েরি

2
আপনি কি নিশ্চিত যে এটি কাজ করে? buildএবং imageপারস্পরিক একচেটিয়া। আমি পেয়েছি "সার্ভিস এক্সএক্সএক্সএক্স উভয়ই একটি চিত্র এবং বিল্ড পাথ নির্দিষ্ট করে দিয়েছে A একটি পরিষেবা হয় চিত্রের জন্য নির্মিত হতে পারে বা বিদ্যমান চিত্র ব্যবহার করতে পারে, উভয়ই নয়" "
বুরহান আলী

3
ওহ কিছু মনে করো না. এই দু'জনকে একসাথে ভি 2 ফর্ম্যাট এবং এর পরে ব্যবহার করা যেতে পারে। আমি যা যা পরীক্ষা করছি তা কোনও সংস্করণ নির্দিষ্ট করে নি তাই আমার অনুমান করা হয় যে এটি ভি 1 হবে।
বুরহান আলী

3
বিকল্প ধারক_নাম: সত্যই আমাকে ধন্যবাদ জানাতে
ল্যানি 654321

2
@ ব্রুনোবিয়েরি ফাইলগুলিতে depends_onপরিষেবার নাম ব্যবহার করে doker-compose, কোনও ধারক নাম নির্দিষ্ট করার দরকার নেই। এমনকি উদাহরণটি এটি দেখায় depends_on: es-masterএবং নাdepends_on: es_master
ব্লুফাস্ট

65

অনুযায়ী Docker-রচনা 1.6.0 :

আপনি যদি নতুন ফাইল ফর্ম্যাট ব্যবহার করছেন তবে আপনি এখন একটি বিল্ড এবং একটি চিত্র কী উভয়ই নির্দিষ্ট করতে পারবেন। docker-compose buildচিত্রটি তৈরি করবে এবং আপনার নির্দিষ্ট করা নামটির সাথে ট্যাগ করবে, যখন docker-compose pullএটি টানার চেষ্টা করবে।

সুতরাং আপনার docker-compose.ymlহবে

version: '2'
services:
  wildfly:
      build: /path/to/dir/Dockerfile
      image: wildfly_server
      ports:
       - 9990:9990
       - 80:8080

ডকার-রচনা আপডেট করতে

sudo pip install -U docker-compose==1.6.0

1
ত্রুটি: বৈধকরণ ব্যর্থ হয়েছে, কারণ (গুলি): কর্নসাপে একটি চিত্র এবং বিল্ড পাথ উভয়ই নির্দিষ্ট রয়েছে। কোনও পরিষেবা চিত্রের জন্য নির্মিত হতে পারে বা বিদ্যমান চিত্র ব্যবহার করতে পারে, উভয়ই নয়। (ডকার-রচনা 1.6.2)
zx1986

@ zx1986 এর জন্য আপনাকে ডকার-কমপোজ.আইএমএল ফাইলের নতুন সংস্করণ ব্যবহার করতে হবে এই ডক্স.ডকার / কমপোজ / কমপোজ- ফাইল / # আপগ্রেড করা আমার উত্তরটির আপডেটের ভিত্তিতে
arulraj.net

50

বিকল্প 1: ডিফল্ট ইমেজের নাম ইঙ্গিত করা

ডকার-কমপোজ দ্বারা উত্পন্ন চিত্রটির নাম ডিফল্টরূপে ফোল্ডারের নামের উপর নির্ভর করে তবে আপনি এটি --project-nameযুক্তি ব্যবহার করে ওভাররাইড করতে পারেন :

$ docker-compose --project-name foo build bar
$ docker images foo_bar

বিকল্প 2: চিত্রের নাম উল্লেখ করা

একবার Docker-রচনা 1.6.0 আউট হয়, তাহলে আপনি উল্লেখ করতে পারেন build:এবং image:একটি সুনির্দিষ্ট ইমেজ নাম আছে (দেখুন arulraj.net এর উত্তর )।

বিকল্প 3: ধারক থেকে চিত্র তৈরি করুন

তৃতীয়টি হ'ল ধারক থেকে একটি চিত্র তৈরি করা:

$ docker-compose up -d bar
$ docker commit $(docker-compose ps -q bar) foo_bar
$ docker-compose rm -f bar

1
--project-nameআর গ্রহণযোগ্য বলে মনে হচ্ছে না। 1.23.2 ব্যবহার করে
স্টিভেন ওয়াচন

21

আপনার ব্যবহারের ক্ষেত্রে উপর নির্ভর করে আপনি ইতিমধ্যে তৈরি করা একটি চিত্র ব্যবহার করতে পারেন এবং এর নামটি নির্দিষ্ট করতে পারেন docker-compose

আমাদের একটি উত্পাদন ব্যবহারের কেস রয়েছে যেখানে আমাদের সিআই সার্ভার একটি নামকৃত ডকার চিত্র তৈরি করে। ( docker build -t <specific_image_name> .)। একবার নামযুক্ত চিত্রটি নির্দিষ্ট হয়ে গেলে, আমাদের docker-composeসর্বদা নির্দিষ্ট চিত্রটি তৈরি হয়। এটি বেশ কয়েকটি বিভিন্ন সম্ভাবনার অনুমতি দেয়:

1- আপনি নিশ্চিত করতে পারেন যে আপনি যেখান docker-composeথেকে চালাচ্ছেন , আপনি সর্বদা সেই নির্দিষ্ট চিত্রটির সর্বশেষতম সংস্করণ ব্যবহার করবেন।

2- আপনি নিজের docker-composeফাইলে একাধিক নামযুক্ত চিত্র নির্দিষ্ট করতে পারেন এবং পূর্ববর্তী বিল্ড পদক্ষেপের মাধ্যমে সেগুলি স্বয়ংক্রিয়ভাবে ওয়্যার্ড হতে দিন।

সুতরাং, যদি আপনার চিত্রটি ইতিমধ্যে নির্মিত হয়, তবে আপনি ছবিটির সাথে নামটি দিতে পারেন docker-compose। সরান buildএবং নির্দিষ্ট করুনimage:

wildfly:
  image: my_custom_wildfly_image
  container_name: wildfly_server
  ports:
   - 9990:9990
   - 80:8080
  environment:
   - MYSQL_HOST=mysql_server
   - MONGO_HOST=mongo_server
   - ELASTIC_HOST=elasticsearch_server
  volumes:
   - /Volumes/CaseSensitive/development/wildfly/deployments/:/opt/jboss/wildfly/standalone/deployments/
  links:
   - mysql:mysql_server
   - mongo:mongo_server
   - elasticsearch:elasticsearch_server

10

আপনি নিজের ইমেজ তৈরির পরে নিম্নলিখিতগুলি করুন:

docker tag <image id> mynewtag:version

এর পরে আপনি দেখতে পাবেন আপনার ছবিটির আর নামকরণ করা <none>হবে না docker images


3
ডকার-কমপোজ সহ ট্যাগগুলি নির্দিষ্ট করা সম্ভব?
রবার্ট

ট্যাগগুলি এই মুহুর্তে সমর্থিত বলে মনে হচ্ছে না।
GHETTO.CHiLD

1
তাই আমাকে ছবিটি তৈরি করতে হবে এবং পরে এটি আবার ট্যাগ করতে হবে? আসলেই কার্যকর নয়, আমি আশা করি ডকার-রচনাটি এই সমস্যাটি দ্রুত সমাধান করবে?
রবার্ট

1
আপনি যদি একটি বহু পাত্রে পরিবেশ তৈরি করেন তবে হ্যাঁ। যদি আপনি একটি একক ধারক পরিবেশ তৈরি করে থাকেন তবে আপনি সর্বদা যেতে পারেনdocker build -t mytag:version .
GHETTO.CHiLD
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.