ডকার: প্রকল্পে একাধিক ডকফায়াইল


214

আপনি যখন কোনও ডাটাবেসের জন্য একটি ডকফিলিলে, অ্যাপ্লিকেশন সার্ভারের জন্য একটি ইত্যাদি রেখে থাকেন তখন আপনি কীভাবে কোনও প্রকল্পের সাথে সম্পর্কিত ডকফাইলকে সংগঠিত করবেন? আপনি উত্সে কিছু ধরণের হায়রাচি তৈরি করেন? একটি বড় এন্টারপ্রাইজ প্রকল্পে কেবল একটি ডকফাইফিল থাকতে পারে না?


15
আপনি গৃহীত উত্তরটি পরিবর্তন করতে চাইতে পারেন
পম্বার

3
"আউটভোট" করার একটি বিকল্প থাকতে হবে এবং আরও উপযুক্ত উত্তরের জন্য স্বয়ংক্রিয়ভাবে একটি অপ্রচলিত cep স্বীকৃত 'বৈশিষ্ট্যটি সরানো উচিত। এই ধরনের পদক্ষেপের জন্য যোগ্যতার মানদণ্ড 1) কথার ভোটের একটি বড় পার্থক্য হতে পারে, 10: 1 এবং 2) প্রশ্ন লেখক এক বছর বা তার চেয়ে বেশি সময় ধরে লগ ইন করেন নি (মনে হয় @ লাকিলুক এসও থেকে অবসর নিয়েছেন 4 বছর আগে ...)
mirekphd

উত্তর:


6

লেখক দ্রষ্টব্য

এই উত্তরটি পুরানো। চিত্র এখন আর বিদ্যমান নেই এবং ডকার রচনা দ্বারা প্রতিস্থাপিত হয়েছে । গৃহীত উত্তরগুলি মোছা যাবে না ...

ডকার কম্পোজ প্রকল্প হায়রাচি তৈরির পক্ষে সহায়তা করে। সুতরাং এখন প্রতিটি উপ ডিরেক্টরিতে একটি ডকফরফিল সমর্থন করা সহজ।

├── docker-compose.yml
├── project1
│   └── Dockerfile
└── project2
    └── Dockerfile

আসল উত্তর

আমি কেবল প্রতিটি উপাদানগুলির জন্য একটি ডকফেরিল সমন্বিত একটি ডিরেক্টরি তৈরি করি। উদাহরণ:

কনটেইনারগুলি তৈরি করার সময় কেবল ডিরেক্টরিটির নাম দিন এবং ডকার সঠিক ডকফেরাইল নির্বাচন করবেন।


3
আপনি কজে @DuncanJones একটি গৃহীত উত্তর ... চেষ্টা :-) মুছতে পারবেন না
মার্ক কোনর

285

ইন নতুন সংস্করণে (> = 1.8.0) Docker এর , আপনি এটা করতে পারেন

docker build -f Dockerfile.db .
docker build -f Dockerfile.web .

একটি বড় সংরক্ষণ

সম্পাদনা: রাক্সার মন্তব্য অনুসারে সংস্করণ আপডেট করুন

সম্পাদনা: @vsevolod থেকে মন্তব্য: ফাইলগুলি দিয়ে ভিএস কোডে সিনট্যাক্স হাইলাইট করা সম্ভব।


2
কোন নতুন সংস্করণ?
রকসজ্জা

4
সবেমাত্র পরীক্ষা করা হয়েছে, github.com/docker/docker/wiki , সুতরাং এটির> ডকার
1.8.0

3
নিশ্চিত যে এটি কাজ করে, তবে আমার আইডিই যদিও কোনও সিনট্যাক্স হাইলাইট করবে না, কারণ এটি ফাইলের নামটি স্বীকৃত নয় :(
আলেকজান্ডার মিলস ২

3
@ আলেকজান্ডারমিলস আমার আইডিই ওয়েবস্টোরম এমনকি Dockerfile.webরান কনফিগারেশন হিসাবে অনুমতি দেয় না । সুতরাং আমি একটি সমস্যা তৈরি করেছি: youtrack.jetbrains.com/issue/WEB-28185
স্টিম্পওয়ার্ড

5
docker-compose.ymlউদাহরণস্বরূপ, কোনও ফাইলের মধ্যে সংজ্ঞায়িত প্রতিটি 'পরিষেবা' এর জন্য কোন ডকফাইফিল ব্যবহার করা উচিত তা আপনি কীভাবে নির্দিষ্ট করবেন ?
জোটিডি 21

127

পৃথক ডিরেক্টরিতে ব্যবহার করুন docker-composeএবং একাধিকDockerfile

পুনঃনামকরণ করা আপনারDockerfile কাছে Dockerfile.dbবা Dockerfile.web, এটি আপনার আইডিই দ্বারা সমর্থিত নাও হতে পারে এবং আপনি সিনট্যাক্স হাইলাইটিং নষ্ট হয়ে যাবে।

কিংসলে উচনোর যেমন বলেছিলেন , আপনার Dockerfileপ্রতি ডিরেক্টরি একাধিক থাকতে পারে যা আপনি তৈরি করতে চান এমন কিছু উপস্থাপন করে।

আমি একটি dockerফোল্ডার রাখতে চাই যা প্রতিটি অ্যাপ্লিকেশন এবং তাদের কনফিগারেশন ধারণ করে। ওয়েব অ্যাপ্লিকেশনটির জন্য একটি ডেটাবেস রয়েছে এমন প্রকল্প ফোল্ডার শ্রেণিবিন্যাসের উদাহরণ এখানে।

docker-compose.yml
docker
├── web
│   └── Dockerfile
└── db
    └── Dockerfile

docker-compose.yml উদাহরণ:

version: '3'
services:
  web:
    # will build ./docker/web/Dockerfile
    build: ./docker/web
    ports:
     - "5000:5000"
    volumes:
     - .:/code
  db:
    # will build ./docker/db/Dockerfile
    build: ./docker/db
    ports:
      - "3306:3306"
  redis:
    # will use docker hub's redis prebuilt image from here:
    # https://hub.docker.com/_/redis/
    image: "redis:alpine"

docker-compose কমান্ড লাইন ব্যবহারের উদাহরণ:

# The following command will create and start all containers in the background
# using docker-compose.yml from current directory
docker-compose up -d

# get help
docker-compose --help

আপনার ডকফাইফিল তৈরি করার সময় আপনার আগের ফোল্ডারগুলির ফাইলগুলি দরকার

আপনি এখনও উপরের সমাধানটি ব্যবহার করতে পারেন এবং আপনার Dockerfileএকটি ডিরেক্টরিতে docker/web/Dockerfileস্থাপন করতে পারেন, আপনার যা দরকার তা হ'ল contextআপনার নিজের docker-compose.ymlমতো করে বিল্ড স্থাপন করুন :

version: '3'
services:
  web:
    build:
      context: .
      dockerfile: ./docker/web/Dockerfile
    ports:
     - "5000:5000"
    volumes:
     - .:/code

এইভাবে, আপনি এই জাতীয় জিনিস রাখতে সক্ষম হবেন:

config-on-root.ini
docker-compose.yml
docker
└── web
    ├── Dockerfile
    └── some-other-config.ini

এবং এর ./docker/web/Dockerfileমতো একটি :

FROM alpine:latest

COPY config-on-root.ini /
COPY docker/web/some-other-config.ini /

এখানে tldr ডকার-রচনা থেকে কিছু দ্রুত কমান্ড রয়েছে । নিশ্চিত হয়ে নিন যে আপনি আরও তথ্যের জন্য অফিসিয়াল ডকুমেন্টেশনটি উল্লেখ করেছেন ।


1
বিল্ড টাইম (ফাই COPY ../package.json /app/package.json) -এ ডেপগুলি ইনস্টল করতে আপনার যদি কোনও প্যাকেজ ম্যানেজার ফাইল অনুলিপি করতে হয় তবে কী হবে ? এই ফাইলটি সাধারণত মূল স্তরে থাকবে এবং ডকার পিতামাতার অ্যাক্সেস নিষিদ্ধ করেছে। আপনি কোন পদ্ধতির অনুসরণ করবেন?
nass600

1
আমি যে সীমাবদ্ধতা খুব আঘাত করে থাকেন এবং এই ব্যতিক্রম জন্য, আমি গড়ে তুলতে webথেকে প্রকল্পের . (ইন docker-compose.yml: build: .)। এইভাবে, webবিল্ডিংয়ের সময় রুট ফাইলগুলিতে অ্যাক্সেস থাকতে পারে। আমি এই সম্পর্কিত প্রশ্নটি দেখেছি: stackoverflow.com/questions/24537340/… এবং আমরা dockerকমান্ড লাইন ব্যবহার করার পরিবর্তে অভিভাবক ডিরেক্টরি থেকে তৈরি করতে পারি এবং এই উত্তরটি কীভাবে ডকার-রচনায় এটি করবেন তা দেখায়: stackoverflow.com/a/45353241/ 1092815
গ্যাবলেউক্স

1
এটি আপনার আইডিই নিয়ে একটি সমস্যা, ডকারের সাথে নয়। @ শুভের সঠিক উত্তর রয়েছে।
বেন্টঅনকোডিং

1
দ্বিতীয় উত্তরটি 1 বছরের পুরানো তবে ডকারের ডকুমেন্টেশনটি সরাসরি রূপে নেওয়া হয়নি। -fবিকল্পটি ভাল, তবে আমি docker-composeসাবফোল্ডারগুলির সাথে ব্যবহার করতে পছন্দ করি । আমি মনে করি উভয় উত্তর বৈধ। বেশিরভাগ লোকেরা বেশিরভাগ Dockerfileআইডিইকে বাক্সের বাইরে রাখতে সমর্থন করতে কেবল ডিফল্ট নামটিই পছন্দ করতে পারেন । আমি প্রথম উত্তরটি বাতিল করছি না, আমি কেবল একটি বিকল্প সরবরাহ করছি। আমি phpযখন ব্যবহার করি তখন আমার ডকফেরফিলটি কোনও ফাইল হিসাবে ভাবার জন্য আমার আইডিই পছন্দ হয় না Dockerfile.phpতবে হ্যাঁ, এটি কার্যকর হয়। আমি ডকার ডকুমেন্টেশনে কয়েকটি উদাহরণ দেখেছি; Dockerfile.build, Dockerfile.debugইত্যাদি ইত্যাদি
গ্যাবেলউক্স

3
নামকরণ যেমন example.Dockerfileসিনট্যাক্স হাইলাইট করে এবং ভিএসকোডে আইকন রাখে।
vmassuchetto

8

ইন্টেলিজে, আমি সাধারণভাবে ডকার ফাইলের নাম * * ডকফেরফায়লে পরিবর্তন করেছি এবং ফাইল টাইপ * .ডোকারফিলকে ডকার সিনট্যাক্সের সাথে যুক্ত করেছি।


1
এটি চেষ্টা করে দেখুন এবং আমি একটি দুর্দান্ত ডকার আইকন পেয়েছি।
ড্রামবেগ

3

একটি বিমূর্ত স্তর স্তর যুক্ত করুন, উদাহরণস্বরূপ, এই প্রকল্পের মতো একটি ওয়াইএএমএল ফাইল https://github.com/larytet/dockerfile- জেনারেটর যা দেখতে দেখতে

centos7:
    base: centos:centos7
    packager: rpm
    install:
      - $build_essential_centos 
      - rpm-build
    run:
      - $get_release
    env:
      - $environment_vars

একটি সংক্ষিপ্ত পাইথন স্ক্রিপ্ট / মেক কনফিগারেশন ফাইল থেকে সমস্ত ডকফায়াইল তৈরি করতে পারে।


1

এমন এক প্রকল্পে কাজ করার জন্য যেখানে একাধিক ডকফায়াইল ব্যবহার করা প্রয়োজন, কেবল প্রতিটি ডকস্পাইলকে একটি পৃথক ডিরেক্টরিতে তৈরি করুন। এই ক্ষেত্রে,

অ্যাপ / ডিবি /

উপরোক্ত ডিরেক্টরিগুলির প্রত্যেকটিতে তাদের ডকস্পাইল থাকবে। যখন কোনও অ্যাপ্লিকেশন তৈরি হচ্ছে, ডকার সমস্ত ডিরেক্টরি অনুসন্ধান করবে এবং সমস্ত ডকফায়াইল তৈরি করবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.