डोकर: प्रोजेक्ट में मल्टीपल डॉकफाइल्स


215

जब आप डेटाबेस के लिए एक, अनुप्रयोग सर्वर के लिए एक, और इतने पर एक डॉकफाइल का उपयोग करते हैं, तो आप प्रोजेक्ट से संबंधित डॉकरीफाइल्स को कैसे व्यवस्थित करते हैं? क्या आप स्रोत में किसी प्रकार का पदानुक्रम बनाते हैं? एक बड़ी एंटरप्राइज परियोजना में केवल एक डॉकरीफाइल शामिल नहीं हो सकता है?


15
आप स्वीकार किए गए उत्तर को बदलना चाहते हैं
पोम्बर

3
"आउटवोट" के लिए एक विकल्प होना चाहिए और एक अधिक उपयुक्त उत्तर के लिए स्वतः अप्रचलित `स्वीकृत 'विशेषता को स्थानांतरित करना चाहिए। इस तरह के एक कदम के लिए पात्रता मानदंड 1 हो सकता है) 10, 1 और 2 के वोटों में एक बड़ा अंतर यह है कि प्रश्न लेखक ने एक वर्ष या उससे अधिक समय के लिए लॉग इन नहीं किया है (ऐसा लगता है @LuckyLuke ने SO 4 साल से सेवानिवृत्त कर दिया है। पहले ...)
mirekphd

जवाबों:


6

लेखक नोट

यह उत्तर पुराना है। अंजीर अब मौजूद नहीं है और इसे डॉकर कंपोज द्वारा बदल दिया गया है । स्वीकृत उत्तर नहीं मिटाए जा सकते ...।

Docker Compose प्रोजेक्ट hierachy के निर्माण का समर्थन करता है। इसलिए अब प्रत्येक उप निर्देशिका में डॉकरफाइल का समर्थन करना आसान है।

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

मूल उत्तर

मैं बस प्रत्येक घटक के लिए एक डॉकफाइल युक्त निर्देशिका बनाता हूं। उदाहरण:

कंटेनरों का निर्माण करते समय केवल डायरेक्टरी नाम दें और डॉकर सही डॉकफाइल का चयन करेगा।


3
@ डंकनजोन क्योंकि आप एक स्वीकृत उत्तर नहीं हटा सकते ... कोशिश की गई :-)
मार्क ओ'कॉनर

286

में नए संस्करणों (> = 1.8.0) डोकर की है, तो आप ऐसा कर सकते हैं

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

एक बड़ा जतन।

EDIT: प्रति raksja की टिप्पणी के लिए अद्यतन संस्करण

संपादित करें: @vsevolod से टिप्पणी: फ़ाइलों को देकर वीएस कोड में सिंटैक्स हाइलाइटिंग प्राप्त करना संभव है। डॉकरफाइल एक्सटेंशन (नाम के बजाय) उदाहरण के लिए।


2
कौन सा नया संस्करण?
राक्सजा

4
बस चेक किया गया, github.com/docker/docker/wiki , इसलिए इसका> Docker 1.8.0
raksja

3
यकीन है कि यह काम करता है, लेकिन मेरी आईडीई किसी भी वाक्यविन्यास को उजागर नहीं करेगी, क्योंकि यह फ़ाइल नाम को मान्यता नहीं देता है :(
अलेक्जेंडर मिल्स

3
@AlexanderMills मेरा आईडीई वेबस्टॉर्म Dockerfile.webरन कॉन्फ़िगरेशन के रूप में भी अनुमति नहीं देता है। इसलिए मैंने एक मुद्दा बनाया: youtrack.jetbrains.com/issue/WEB-28185
भाप से चलने वाले

5
आप यह कैसे निर्दिष्ट करते हैं कि डॉकफाइल को docker-compose.ymlफ़ाइल के भीतर परिभाषित प्रत्येक 'सेवा' के लिए किस तरह इस्तेमाल किया जाना चाहिए ?
जोटी डे

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 docker-compose से कुछ क्विक कमांड दिए गए हैं । सुनिश्चित करें कि आप अधिक विवरण के लिए आधिकारिक दस्तावेज देखें।


1
क्या होगा यदि आपको बिल्ड समय (फाई COPY ../package.json /app/package.json) पर डिप्स स्थापित करने के लिए पैकेज मैनेजर फ़ाइल की प्रतिलिपि बनाने की आवश्यकता है ? वह फ़ाइल आमतौर पर रूट स्तर पर होगी और डॉकटर के पास अभिभावक के लिए मनाही है। आप किस दृष्टिकोण का अनुसरण करेंगे?
nass600

1
मैंने उस सीमा को भी मारा है और इस अपवाद के लिए, मैं ( : में ) webसे परियोजना का निर्माण करता हूं । इस तरह, निर्माण करते समय रूट फ़ाइलों तक पहुँच होती है। मैंने इस संबंधित प्रश्न को देखा है: stackoverflow.com/questions/24537340/… और हम कमांड लाइन का उपयोग करते समय इसके बजाय मूल निर्देशिका से बना सकते हैं और यह उत्तर दिखाता है कि docker-compose के साथ ऐसा कैसे करें: stackoverflow.com/a/45354241/ 1092815.docker-compose.ymlbuild: .webdocker
गैबेलरॉक्स

1
यह आपके आईडीई के साथ एक मुद्दा है, डॉकटर के साथ नहीं। @ शुओ का सही उत्तर है।
बेंटऑनकोडिंग

1
दूसरा उत्तर 1 वर्ष पुराना है, लेकिन यह सीधे तौर पर डॉकर के दस्तावेज के रूप में नहीं लिया गया है। -fविकल्प ठीक है, लेकिन मैं docker-composeसबफ़ोल्डर्स के साथ उपयोग करना पसंद करता हूं । मुझे लगता है कि दोनों उत्तर मान्य हैं। ज्यादातर लोग केवल Dockerfileआईडीई को बॉक्स से बाहर का समर्थन करने के लिए डिफ़ॉल्ट नाम रखना पसंद कर सकते हैं । मैं पहले उत्तर को अमान्य नहीं कर रहा हूँ, मैं केवल एक विकल्प प्रदान कर रहा हूँ। मुझे नहीं लगता कि मेरी आईडीई को यह लगता है कि मेरी डॉकरीफाइल एक phpफाइल है जब मैं उपयोग Dockerfile.phpकरता हूं , लेकिन हां, यह काम करता है। मैंने डॉक्यूमेंट डॉक्यूमेंटेशन में कुछ उदाहरण देखे हैं; Dockerfile.build, Dockerfile.debugआदि
गैबेलरॉक्स

3
नामकरण के रूप में example.Dockerfileवाक्यविन्यास हाइलाइटिंग और VSCode पर आइकन रहता है।
vmassuchetto

8

Intellij में, मैंने सरल docker फ़ाइलों का नाम बदलकर * .Dockerfile, और फ़ाइल प्रकार को संबद्ध कर दिया है *। Dockerfile को docker syntax में।


1
इसकी कोशिश की और मुझे एक अच्छा डॉकटर आइकन मिला।
Drumbeg

3

उदाहरण के लिए, एक अमूर्त परत जोड़ें, इस परियोजना की तरह एक YAML फ़ाइल https://github.com/larytet/dockerfile-generator जो दिखती है

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

एक छोटी पायथन लिपि / मेक कॉन्फिगरेशन फाइल से सभी डॉकरीफाइल्स उत्पन्न कर सकती है।


1

जब एक परियोजना पर काम करना होता है जिसमें कई डॉकफाइल्स का उपयोग करने की आवश्यकता होती है, तो बस एक अलग निर्देशिका में प्रत्येक डॉकफाइल बनाएं। उदाहरण के लिए,

ऐप / डीबी /

उपरोक्त प्रत्येक निर्देशिका में उनका डॉकफाइल होगा। जब कोई एप्लिकेशन बनाया जा रहा होता है, तो docker सभी निर्देशिकाओं को खोजेगा और सभी dockerfiles का निर्माण करेगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.