Ubuntu के साथ Dockerfile: Docker इमेज बनाने के लिए शुरुआती से उन्नत तक का पूर्ण मार्गदर्शक

目次

1. परिचय

डॉकर और डॉकरफाइल क्या हैं?

हाल के वर्षों में, डॉकर ने विकास वातावरणों को सुव्यवस्थित करने और एप्लिकेशन तैनाती को कुशल बनाने के एक प्रभावी तरीके के रूप में तेजी से लोकप्रियता प्राप्त की है। डॉकर एप्लिकेशनों और उनकी निर्भरताओं को एक एकल इकाई में पैकेज करता है जिसे “कंटेनर” कहा जाता है, जो उन्हें विभिन्न वातावरणों में सुसंगत रूप से चलाने की अनुमति देता है।

इन डॉकर कंटेनरों को बनाने के लिए, एक ब्लूप्रिंट की आवश्यकता होती है जिसे डॉकरफाइल कहा जाता है। डॉकरफाइल एक टेक्स्ट फाइल है जो बेस ऑपरेटिंग सिस्टम इमेज, इंस्टॉल किए गए सॉफ्टवेयर, पर्यावरण चर, और अन्य कॉन्फ़िगरेशन विवरणों को परिभाषित करती है। डेवलपर्स इसका उपयोग स्वचालित रूप से अनुकूलित वातावरण बनाने के लिए कर सकते हैं।

उबंटू को बेस इमेज के रूप में क्यों उपयोग करें?

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

उबंटू-आधारित डॉकरफाइल कई लाभ प्रदान करती हैं:

  • व्यापक आधिकारिक और सामुदायिक दस्तावेज़ीकरण, जिसके परिणामस्वरूप कम लर्निंग कर्व
  • APT का उपयोग करके पैकेजों और टूल्स की आसान स्थापना
  • आधिकारिक रूप से प्रदान की गई हल्की और न्यूनतम इमेजें (जैसे ubuntu:20.04 और ubuntu:24.04 )

इस लेख का उद्देश्य और लक्षित दर्शक

यह लेख “डॉकरफाइल उबंटू” कीवर्ड पर केंद्रित है और शुरुआती लोगों के लिए समझने में आसान तरीके से उबंटू-आधारित डॉकरफाइल कैसे बनाएं, इसकी व्याख्या करता है।

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

यह लेख निम्नलिखित के लिए अनुशंसित है:

  • जो लोग पहली बार डॉकरफाइल का उपयोग करके वातावरण बनाने की इच्छा रखते हैं
  • डेवलपर्स जो उबंटू पर पुनरुत्पादनीय विकास वातावरण बनाना चाहते हैं
  • कोई भी व्यक्ति जो अपनी समझ को गहरा करना चाहता है, जिसमें समस्या निवारण तकनीकें शामिल हैं

2. डॉकरफाइल की बुनियादी संरचना

डॉकरफाइल क्या है और इसकी भूमिका क्या है?

डॉकरफाइल डॉकर इमेज बनाने के लिए एक रेसिपी की तरह है। यह परिभाषित करती है कि कौन सा बेस ऑपरेटिंग सिस्टम उपयोग करें, कौन सा सॉफ्टवेयर इंस्टॉल करें, और वातावरण को कैसे कॉन्फ़िगर करें।

इस फाइल के आधार पर docker build कमांड चलाने से, आप अत्यधिक पुनरुत्पादनीय विकास और रनटाइम वातावरण आसानी से बना सकते हैं।

डॉकरफाइल का उपयोग करने के लाभ:

  • स्वचालित वातावरण सेटअप (मैनुअल दोहराव की आवश्यकता नहीं)
  • टीम विकास में वातावरण असंगतियों को समाप्त करता है
  • CI/CD पाइपलाइनों में आसान एकीकरण

सामान्यतः उपयोग की जाने वाली डॉकरफाइल निर्देश

डॉकरफाइल कई निर्देशों (डायरेक्टिव्स) से बनी होती है। निम्नलिखित कुछ सबसे सामान्यतः उपयोग की जाने वाली हैं। इन्हें उचित रूप से जोड़कर, आप उबंटू-आधारित डॉकरफाइल बना सकते हैं।

InstructionDescription
FROMSpecifies the base Docker image (e.g., FROM ubuntu:24.04)
RUNExecutes shell commands, typically for installing packages
COPYCopies local files into the image
ADDSimilar to COPY, but also supports URLs and archive extraction
WORKDIRSets the working directory
ENVDefines environment variables
CMDDefines the default command executed at container startup (can be overridden)
ENTRYPOINTDefines a command that is always executed at container startup

न्यूनतम उबंटू-आधारित डॉकरफाइल उदाहरण

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

FROM ubuntu:24.04

RUN apt-get update && apt-get install -y \
    curl \
    vim

CMD ["/bin/bash"]

यह डॉकरफाइल उबंटू 24.04 को बेस इमेज के रूप में उपयोग करती है, curl और vim उपयोगिताओं को इंस्टॉल करती है, और कंटेनर शुरू होने पर एक बाश शेल लॉन्च करती है।

उचित उबंटू टैग का चयन

उबंटू डॉकर इमेज आधिकारिक डॉकर हब रिपॉजिटरी में प्रकाशित की जाती हैं। ubuntu:latest निर्दिष्ट करने से सबसे हाल की संस्करण का उपयोग होगा, लेकिन संस्करण को स्पष्ट रूप से पिन करना अनुशंसित है

उदाहरण के लिए:

  • ubuntu:22.04 (LTS: लॉन्ग-टर्म सपोर्ट, स्थिरता पर केंद्रित)
  • ubuntu:24.04 (नवीनतम LTS, नई सुविधाओं पर केंद्रित)

स्थिरता या नई सुविधाओं को प्राथमिकता देने के आधार पर संस्करण चुनें।

3. व्यावहारिक: उबंटू-आधारित डॉकरफाइल बनाना

उबंटू वातावरण में आवश्यक पैकेजों की स्थापना

.जब आप Dockerfile का उपयोग करके Ubuntu वातावरण बनाते हैं, तो अक्सर अतिरिक्त पैकेज स्थापित करने की आवश्यकता होती है। उदाहरण के लिए, विकास वातावरण सेटअप करते समय निम्नलिखित उपयोगिताएँ आम तौर पर उपयोग की जाती हैं:

  • curl : फ़ाइलें डाउनलोड करने और API का परीक्षण करने के लिए
  • vim : एक हल्का टेक्स्ट एडिटर
  • git : संस्करण नियंत्रण प्रणाली
  • build-essential : C/C++ प्रोग्राम बनाने के लिए आवश्यक टूल्स

इन पैकेजों को Dockerfile में स्थापित करने के लिए RUN निर्देश का उपयोग करें।

FROM ubuntu:24.04

RUN apt-get update && apt-get install -y \
    curl \
    vim \
    git \
    build-essential

apt-get update को पहले चलाकर आप सुनिश्चित करते हैं कि स्थापना से पहले नवीनतम पैकेज सूचियाँ प्राप्त हो गई हैं।

गैर‑इंटरैक्टिव इंस्टॉलेशन का कॉन्फ़िगरेशन

Ubuntu में apt-get install कभी‑कभी उपयोगकर्ता इनपुट की मांग कर सकता है। लेकिन Docker बिल्ड के दौरान इंटरैक्टिव ऑपरेशन संभव नहीं होते। इसे रोकने के लिए, एक पर्यावरण चर सेट करना और गैर‑इंटरैक्टिव मोड को सक्षम करना अनुशंसित है।

ENV DEBIAN_FRONTEND=noninteractive

यह locale या timezone चयन जैसे प्रॉम्प्ट को दबा देता है और इंस्टॉलेशन को सुगमता से आगे बढ़ने देता है।

अनावश्यक कैश हटाकर इमेज आकार कम करना

APT का उपयोग करते समय, डाउनलोड किए गए अस्थायी फ़ाइलें (कैश) इमेज में रह सकती हैं, जिससे अंतिम आकार बढ़ जाता है। नीचे दिखाए अनुसार कैश को हटाकर आप इमेज आकार घटा सकते हैं:

RUN apt-get update && apt-get install -y \
    curl \
    vim \
    && rm -rf /var/lib/apt/lists/*

कई कमांड्स को एक ही RUN निर्देश में मिलाना भी अनावश्यक लेयर वृद्धि को रोकने में मदद करता है।

Dockerfile लिखने के सर्वोत्तम अभ्यास

वास्तविक विकास वातावरण में, निम्नलिखित Dockerfile सर्वोत्तम अभ्यास व्यापक रूप से अनुशंसित हैं:

  • लेयर की संख्या कम करने के लिए RUN निर्देशों को यथासंभव मिलाएँ
  • ENV का उपयोग करके संस्करण और सेटिंग्स को स्पष्ट रूप से परिभाषित करें
  • प्रत्येक चरण के उद्देश्य को स्पष्ट करने के लिए टिप्पणी (comments) जोड़ें
  • rm और --no-install-recommends का उपयोग करके अनावश्यक फ़ाइलों को हटाएँ

उदाहरण:

RUN apt-get update && apt-get install -y --no-install-recommends \
    curl \
    git \
    && rm -rf /var/lib/apt/lists/*

यह दृष्टिकोण हल्का और अधिक रखरखाव योग्य Dockerfile बनाता है।

4. Docker इमेज बनाना और सत्यापित करना

Dockerfile से Docker इमेज बनाना

एक बार आपका Dockerfile तैयार हो जाने पर, अगला कदम Docker इमेज बनाना है। यह docker build कमांड से किया जाता है। अपने Dockerfile वाले डायरेक्टरी में निम्नलिखित कमांड चलाएँ:

docker build -t my-ubuntu-image .
  • -t विकल्प इमेज को एक नाम (टैग) देता है। इस उदाहरण में इमेज का नाम my-ubuntu-image है।
  • . (डॉट) वर्तमान डायरेक्टरी को दर्शाता है जिसमें Dockerfile स्थित है।

Docker Dockerfile में लिखे निर्देशों को क्रमशः पढ़ेगा और इमेज बनाता रहेगा।

बनी हुई Docker इमेज की जाँच

इमेज सफलतापूर्वक बन जाने के बाद, आप इसे निम्न कमांड से सत्यापित कर सकते हैं:

docker images

यह स्थानीय रूप से संग्रहीत Docker इमेजों की सूची दिखाता है, जिसमें निम्न जानकारी शामिल होती है:

  • REPOSITORY (इमेज का नाम)
  • TAG
  • IMAGE ID (विशिष्ट पहचानकर्ता)
  • CREATED (निर्माण तिथि)
  • SIZE

उदाहरण:

REPOSITORY        TAG       IMAGE ID       CREATED          SIZE
my-ubuntu-image   latest    abcd1234abcd   5 minutes ago    189MB

यह पुष्टि करता है कि इमेज सही ढंग से पंजीकृत हो गई है।

सत्यापन के लिए Docker कंटेनर चलाना

यह सुनिश्चित करने के लिए कि बनाई गई इमेज अपेक्षित रूप से काम करती है, निम्न कमांड से Docker कंटेनर शुरू करें:

docker run -it my-ubuntu-image
  • -it विकल्प एक इंटरैक्टिव टर्मिनल सत्र शुरू करता है।
  • यदि सफल रहा, तो एक Bash प्रॉम्प्ट दिखाई देगा, जो दर्शाता है कि आप Ubuntu कंटेनर के भीतर हैं।

कंटेनर के भीतर, आप स्थापित टूल्स को निम्न कमांड से सत्यापित कर सकते हैं:

curl --version
vim --version

.यदि ये कमांड सही ढंग से काम करते हैं, तो आपका Dockerfile सही तरीके से कॉन्फ़िगर किया गया है।

अनउपयोगी इमेज़ और कंटेनर को साफ़ करना

बार-बार बिल्ड और प्रयोग आपके सिस्टम पर अनउपयोगी Docker इमेज़ और कंटेनर छोड़ सकते हैं। इन्हें समय-समय पर नीचे दिए गए कमांड्स का उपयोग करके साफ़ करना अनुशंसित है:

  • बंद किए गए कंटेनर हटाएँ:
    docker container prune
    
  • अनउपयोगी इमेज़ हटाएँ:
    docker image prune
    
  • सभी अनउपयोगी डेटा हटाएँ (सावधानी से उपयोग करें):
    docker system prune
    

ये ऑपरेशन्स डिस्क स्पेस बचाने और संभावित समस्याओं को रोकने में मदद करते हैं।

5. उन्नत: Python पर्यावरण बनाना

Ubuntu-आधारित Dockerfile में Python सक्षम करना

जब आप Dockerfile का उपयोग करके Ubuntu पर्यावरण बनाते हैं, तो Python रनटाइम पर्यावरण जोड़ने से विकास, परीक्षण, और मशीन लर्निंग सहित कई उपयोग मामलों को सक्षम किया जा सकता है। यद्यपि Python डिफ़ॉल्ट रूप से Ubuntu पर पहले से स्थापित हो सकता है, बेहतर संस्करण और पैकेज प्रबंधन के लिए इसे स्पष्ट रूप से कॉन्फ़िगर करना सामान्य प्रथा है।

APT का उपयोग करके Python स्थापित करना

सबसे सरल तरीका APT पैकेजों का उपयोग करके Python स्थापित करना है। नीचे एक उदाहरण दिया गया है:

FROM ubuntu:24.04

RUN apt-get update && apt-get install -y \
    python3 \
    python3-pip \
    && rm -rf /var/lib/apt/lists/*

यह विधि एक स्थिर सिस्टम Python संस्करण प्रदान करती है (जैसे Ubuntu रिलीज़ के अनुसार Python 3.10 या 3.12)। आप pip कमांड का उपयोग करके अतिरिक्त Python पैकेज भी स्थापित कर सकते हैं।

pyenv के साथ Python संस्करण प्रबंधन

यदि आपको कोई विशिष्ट Python संस्करण चाहिए या कई संस्करणों के बीच स्विच करना चाहते हैं, तो pyenv का उपयोग अत्यधिक अनुशंसित है।

निम्न उदाहरण दिखाता है कि Dockerfile में pyenv का उपयोग करके Python 3.11.6 कैसे स्थापित किया जाए:

FROM ubuntu:24.04

ENV DEBIAN_FRONTEND=noninteractive

RUN apt-get update && apt-get install -y \
    git \
    curl \
    make \
    build-essential \
    libssl-dev \
    zlib1g-dev \
    libbz2-dev \
    libreadline-dev \
    libsqlite3-dev \
    wget \
    llvm \
    libncurses5-dev \
    libncursesw5-dev \
    xz-utils \
    tk-dev \
    libffi-dev \
    liblzma-dev \
    && rm -rf /var/lib/apt/lists/*

# Install pyenv
RUN git clone https://github.com/pyenv/pyenv.git ~/.pyenv

ENV PYENV_ROOT="$HOME/.pyenv"
ENV PATH="$PYENV_ROOT/bin:$PATH"

RUN echo 'eval "$(pyenv init --path)"' >> ~/.bashrc

# Install a specific Python version
RUN pyenv install 3.11.6 && pyenv global 3.11.6

यह सेटअप एक लचीला और अच्छी तरह नियंत्रित Python पर्यावरण प्रदान करता है।

requirements.txt के साथ पैकेज प्रबंधन

अधिकांश वास्तविक प्रोजेक्ट्स को कई Python लाइब्रेरीज़ की आवश्यकता होती है। इन निर्भरताओं को आमतौर पर requirements.txt फ़ाइल का उपयोग करके प्रबंधित किया जाता है।

पहले, अपने प्रोजेक्ट रूट में एक requirements.txt फ़ाइल बनाएँ:

flask==2.3.2
requests>=2.25.1
pandas

फिर इसे अपने Dockerfile में इस प्रकार संदर्भित करें:

COPY requirements.txt /app/requirements.txt
WORKDIR /app

RUN pip install --no-cache-dir -r requirements.txt

यह सभी आवश्यक लाइब्रेरीज़ को एक साथ स्थापित करने की अनुमति देता है और पर्यावरण की पुनरुत्पादनशीलता को काफी सुधारता है।

सर्वोत्तम प्रथाएँ

  • Python का उपयोग करते समय, virtualenv या venv के साथ एक वर्चुअल एनवायरनमेंट बनाना निर्भरताओं के टकराव को रोकने में मदद करता है।
  • --no-cache-dir जैसे कैश दमन विकल्पों का उपयोग Docker इमेज़ का आकार कम करता है।
  • पैकेज स्थापित करने से पहले pip install --upgrade pip चलाने से इंस्टॉलेशन त्रुटियों से बचा जा सकता है।

6. सामान्य समस्याएँ और ट्रबलशूटिंग

अनुमति त्रुटियाँ

उदाहरण:

Permission denied

यह त्रुटि तब होती है जब कॉपी की गई फ़ाइलों में निष्पादन अनुमति नहीं होती या फ़ाइल की स्वामित्व और निष्पादन उपयोगकर्ता गलत कॉन्फ़िगर होते हैं।

समाधान:

  • फ़ाइल को निष्पादन योग्य बनाएँ:
    RUN chmod +x script.sh
    
  • आवश्यक होने पर फ़ाइल का स्वामित्व बदलें:
    RUN chown root:root /path/to/file
    

पैकेज नहीं मिला या इंस्टॉलेशन विफलता

उदाहरण:

E: Unable to locate package xxx

translation.यह त्रुटि आमतौर पर तब आती है जब apt-get update नहीं चलाया गया हो या पैकेज का नाम गलत हो।

समाधान:

  • पैकेज स्थापित करने से पहले हमेशा apt-get update चलाएँ:
    RUN apt-get update && apt-get install -y curl
    
  • पैकेज नामों की जाँच करें और टाइपो की जांच करें

नेटवर्क‑संबंधी त्रुटियाँ

उदाहरण:

Temporary failure resolving 'deb.debian.org'

यह त्रुटि बिल्ड प्रक्रिया के दौरान DNS रिज़ॉल्यूशन समस्या को दर्शाती है।

समाधान:

  • Docker डेमन को पुनः आरंभ करने से समस्या हल हो सकती है:
    sudo systemctl restart docker
    
  • /etc/docker/daemon.json में DNS सर्वर जोड़कर Docker DNS सेटिंग्स की समीक्षा करें:
    {
      "dns": ["8.8.8.8", "8.8.4.4"]
    }
    

पुरानी कैश के साथ बिल्ड करना

Docker लेयर‑आधारित कैशिंग का उपयोग करता है ताकि बिल्ड तेज़ हो सके। परिणामस्वरूप, Dockerfile में किए गए परिवर्तन हमेशा तुरंत परिलक्षित नहीं होते।

समाधान:

  • कैश के बिना पुनः बिल्ड करें:
    docker build --no-cache -t my-image .
    

कंटेनर तुरंत बंद हो जाता है या स्टार्टअप कमांड नहीं चलता

कारण:

  • CMD या ENTRYPOINT में निर्दिष्ट कमांड में त्रुटि है
  • इंटरैक्टिव मोड के बिना CMD ["/bin/bash"] का उपयोग करने से तुरंत समाप्ति हो जाती है

समाधान:

  • कंटेनर को डिबग मोड में शुरू करें:
    docker run -it my-image /bin/bash
    
  • CMD और ENTRYPOINT के बीच अंतर समझें और उनका उचित उपयोग करें

इन समस्याओं का सामना करके और उन्हें हल करके, आपका Dockerfile डिज़ाइन कौशल क्रमशः सुधरेगा। जब त्रुटियाँ आती हैं, तो त्रुटि संदेशों को ध्यान से पढ़ें और पहचानें कि कौन‑सी निर्देश और लेयर ने समस्या उत्पन्न की।

7. सारांश

Ubuntu‑आधारित Dockerfiles बनाने के मुख्य बिंदु

यह लेख Dockerfiles के माध्यम से Ubuntu वातावरण बनाने की चरण‑दर‑चरण व्याख्या प्रदान करता है, जिसमें बुनियादी और उन्नत दोनों विषय शामिल हैं। आइए मुख्य बिंदुओं को पुनः देखें:

  • Dockerfile मूलभूत समझ पहला कदम है – FROM, RUN, CMD, और ENV जैसी निर्देशों से स्वचालित वातावरण निर्माण संभव होता है।
  • Ubuntu एक स्थिर और लचीला बेस इमेज है – इसका विस्तृत पैकेज इकोसिस्टम, बड़ी उपयोगकर्ता आधार, और LTS रिलीज़ इसे विकास वातावरण के लिए आदर्श बनाते हैं।
  • व्यावहारिक पैकेज प्रबंधन आवश्यक टूल और लाइब्रेरी स्थापित करने में मदद करता है – apt-get का सही उपयोग, कैश सफ़ाई, और नॉन‑इंटरैक्टिव इंस्टॉलेशन आवश्यक हैं।
  • Python जैसे व्यावहारिक वातावरण बनाना Dockerfiles द्वारा पूरी तरह समर्थित है – pyenv, pip, और requirements.txt जैसी टूल्स पुनरुत्पादक सेटअप सुनिश्चित करती हैं।
  • ट्रबलशूटिंग कौशल सीधे स्थिर संचालन को प्रभावित करते हैं – अनुमतियों, नेटवर्किंग, और बिल्ड कैश व्यवहार को समझना उत्पादकता को काफी बढ़ाता है।

Dockerfile सीखने में अगले कदम

एक बार जब आप Dockerfiles में सहज हो जाएँ, तो आप अपने कौशल को विकास से परे परीक्षण और प्रोडक्शन डिप्लॉयमेंट तक विस्तारित कर सकते हैं। निम्नलिखित विषयों का अन्वेषण करने पर विचार करें:

  • Docker Compose के साथ मल्टी‑कंटेनर सेटअप का प्रबंधन
  • CI/CD टूल्स जैसे GitHub Actions और GitLab CI के साथ एकीकरण
  • Kubernetes जैसे कंटेनर ऑर्केस्ट्रेशन प्लेटफ़ॉर्म के साथ काम करना

आधिकारिक दस्तावेज़ और संदर्भ लिंक

8. अक्सर पूछे जाने वाले प्रश्न (FAQ)

Q1. Dockerfile में मुझे कौन‑सी Ubuntu संस्करण चुननी चाहिए?

A1. अधिकांश मामलों में स्थिरता और दीर्घकालिक रखरखाव के लिए LTS (Long Term Support) रिलीज़ चुनना अनुशंसित है। ubuntu:22.04 और ubuntu:20.04 जैसी संस्करण व्यापक रूप से उपयोग की जाती हैं और पाँच वर्षों तक समर्थित रहती हैं।

यदि आपको नवीनतम पैकेज या भाषा संस्करण चाहिए, तो आप ubuntu:24.04 जैसी नई रिलीज़ चुन सकते हैं, लेकिन पूरी तरह परीक्षण करना आवश्यक है।

Q2. apt-get install “package not found” क्यों रिपोर्ट करता है?

markdown.A2. सबसे आम कारण यह है कि पहले apt-get update नहीं चलाया गया। पैकेज सूची को अपडेट किए बिना, APT अनुरोधित पैकेजों को नहीं ढूँढ सकता।

सही उदाहरण:

RUN apt-get update && apt-get install -y curl

साथ ही यह सुनिश्चित करें कि पैकेज नाम सही हों और अप्रचलित न हों (उदाहरण के लिए, python के बजाय python3 का उपयोग करें)।

Q3. Dockerfile में पर्यावरण वेरिएबल्स कैसे सेट करें?

A3. ENV निर्देश का उपयोग करके पर्यावरण वेरिएबल्स परिभाषित करें जो निर्माण समय और कंटेनर रनटाइम दोनों में उपलब्ध हों।

उदाहरण:

ENV DEBIAN_FRONTEND=noninteractive

यह आमतौर पर APT इंस्टॉलेशन के दौरान इंटरैक्टिव प्रॉम्प्ट को दबाने के लिए उपयोग किया जाता है। पर्यावरण वेरिएबल्स एप्लिकेशन कॉन्फ़िगरेशन और API कुंजियों के लिए भी उपयोगी होते हैं।

Q4. CMD और ENTRYPOINT में क्या अंतर है?

A4. दोनों कंटेनर शुरू होने पर चलने वाले कमांड को निर्दिष्ट करते हैं, लेकिन उनका व्यवहार अलग होता है।

ItemCMDENTRYPOINT
OverridableCan be overridden by docker runGenerally not overridden (treated as fixed command)
Use CaseDefine a default commandDefine a command that must always run

उदाहरण:

CMD ["python3", "app.py"]
# vs
ENTRYPOINT ["python3"]
CMD ["app.py"]

दूसरे मामले में, आप docker run my-image another_script.py का उपयोग करके तर्क पास कर सकते हैं।

Q5. मेरे Dockerfile में किए गए परिवर्तन क्यों नहीं दिख रहे हैं?

A5. Docker बिल्ड कैश का उपयोग करता है, जिससे अपरिवर्तित लेयर्स को फिर से उपयोग किया जा सकता है, भले ही Dockerfile को संपादित किया गया हो।

समाधान:

docker build --no-cache -t my-image .

यह पूरी रीबिल्ड को मजबूर करता है और सुनिश्चित करता है कि सभी परिवर्तन लागू हों।