docker-compose ट्यूटोरियल
डॉकटर-कंपोज़ के साथ शुरुआत करना
खोज…
टिप्पणियों
कम्पोज मल्टी-कंटेनर डॉकटर अनुप्रयोगों को परिभाषित करने और चलाने के लिए एक उपकरण है। Compose के साथ, आप अपने एप्लिकेशन की सेवाओं को कॉन्फ़िगर करने के लिए एक Compose फ़ाइल का उपयोग करते हैं। फिर, एक एकल आदेश का उपयोग करके, आप अपने कॉन्फ़िगरेशन से सभी सेवाओं को बनाते हैं और शुरू करते हैं। कम्पोज़ की सभी विशेषताओं के बारे में अधिक जानने के लिए सुविधाओं की सूची देखें।
कंपोज़ का उपयोग करना मूल रूप से एक तीन-चरणीय प्रक्रिया है।
- अपने ऐप के वातावरण को
Dockerfile
साथ परिभाषित करें ताकि इसे कहीं भी पुन: पेश किया जा सके। - उन सेवाओं को परिभाषित करें जो आपके ऐप को
docker-compose.yml
ताकि उन्हें एक अलग वातावरण में एक साथ चलाया जा सके। - अंत में,
docker-compose up
चलाएं और कंपोज़ अपना संपूर्ण ऐप शुरू और चलाएगा।
स्थापना
यदि आप ओएस एक्स या विंडोज पर डॉकर चला रहे हैं, तो डॉकटर-कंपोज को आपके डॉकर में विंडोज या डॉकर टूलबॉक्स इंस्टालेशन के लिए शामिल किया जाना चाहिए।
लिनक्स पर आप GitHub रिलीज़ पेज से सीधे नवीनतम बायनेरिज़ प्राप्त कर सकते हैं: https://github.com/docker/comit/iteases
आप निम्न आदेशों के साथ विशिष्ट रिलीज़ स्थापित कर सकते हैं:
curl -L https://github.com/docker/compose/releases/download/1.7.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
अधिक जानकारी के लिए कृपया दस्तावेज़ पृष्ठ देखें
एक साधारण एप्लिकेशन बनाएं
यह उदाहरण आधिकारिक दस्तावेज से आया है। मान लें कि आपके पास बैकेंड के रूप में रेडिस का उपयोग करके एक अजगर आवेदन है। Dockerfile
लिखने के बाद, इस तरह एक docker-compose.yml
फ़ाइल docker-compose.yml
:
version: '2'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
depends_on:
- redis
redis:
image: redis
फिर रन docker-compose up
डॉक-कंपोज़ करें पूरे एप्लिकेशन को सेटअप करेगा: अजगर ऐप और रेडिस।
-
version: '2'
डॉकटर-कम्पोज़ फ़ाइल सिंटैक्स का संस्करण है -
services:
एक अनुभाग है जो सेवाओं को चलाने के बारे में बताता है -
web:
औरredis:
शुरू करने के लिए सेवाओं के नाम हैं, उनकी सामग्री का वर्णन है कि उन सेवाओं के लिए कंटेनर को कैसे शुरू करना चाहिए -
depends_on
अर्थ है वेब की एक निर्भरता रेडिस के लिए और उसके बादredis
रचना पहलेredis
कंटेनर और फिर वेब कंटेनर शुरू करता है। फिर भी करता हैdocker-compose
तक इंतजार नहींredis
कंटेनर शुरू करने से पहले तैयार हैweb
कंटेनर। इसे प्राप्त करने के लिए आपको एक स्क्रिप्ट का उपयोग करना होगा जो एप्लिकेशन सर्वर की शुरुआत में देरी करता है या जब तक किredis
कंटेनर अनुरोध नहीं कर सकता।
एक वॉल्यूम और नेटवर्क सेक्शन को भी जोड़ा जा सकता है। वॉल्यूम सेक्शन का उपयोग करने से डिस्कनेक्ट किए गए वॉल्यूम के लिए अनुमति मिलती है जो कि स्वतंत्र रूप से डॉक कंपोज़ सर्विसेज सेक्शन में रह सकते हैं। नेटवर्क अनुभाग का एक समान परिणाम है।
सेवाओं के रिडिस खंड को इस तरह समायोजित करना होगा:
redis:
image: redis
volumes:
- redis-data:/code
networks:
-back-tier
इसके बाद, डॉकटर वर्जन 2 फाइल के नीचे निम्नलिखित सेक्शन को जोड़ें।
volumes:
# Named volume
redis-data:
driver: local
networks:
back-tier:
driver: bridge
redis-data
सेवा अनुभाग से एक सुलभ लेबल प्रदान करता है। driver:local
मात्रा को स्थानीय फ़ाइल सिस्टम में सेट करता है।
back-tier
नेटवर्क सेक्शन लेबल को सर्विस सेक्शन में पहुँच योग्य होने के लिए सेट करता है।
डॉकटर-कम्पोज़ सेवा में कमांड चलाएँ
docker-compose run service-name command
यदि, उदाहरण के लिए, आप rake db:create
चलाना चाहते हैं rake db:create
अपनी web
सेवा में rake db:create
, तो आप निम्न कमांड का उपयोग करेंगे:
docker-compose run web rake db:create
डॉकर कम्पोज़ स्थापित करें
यदि आपको एक
Permission denied
त्रुटि मिलती है, तो नीचे दिए गए दो आदेशों से पहलेsudo -i
चलाएँ, फिर बाहर निकलें।
- पुल डॉकटर कम्पोज
/usr/local/bin/docker-compose
।
curl -L https://github.com/docker/compose/releases/download/1.7.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
आप अपने वांछित संस्करण से मिलान करने के लिए संस्करण
1.7.1
बदल सकते हैं। Https://github.com/docker/compose/releases से संस्करण प्राप्त करने का प्रयास करें
- बाइनरी के लिए निष्पादन योग्य अनुमतियों को लागू करें।
chmod +x /usr/local/bin/docker-compose
- स्थापना का परीक्षण करें।
docker-compose --version
अपेक्षित डॉक-कम्पोज़ संस्करण 1.7.1, 0a9ab35 का निर्माण करें
डॉकर कम्पोज हैलो दुनिया
एक बहुत ही बुनियादी docker-compose.yml
इस तरह दिखता है:
version: '2'
services:
hello_world:
image: ubuntu
command: [/bin/echo, 'Hello world']
यह फ़ाइल इसलिए बना रही है कि इसमें एक hello_world
सेवा है, जिसे ubuntu:latest
से आरंभ किया गया है ubuntu:latest
चित्र और वह, जब इसे चलाया जाता है, तो यह केवल echo 'Hello world'
आप कर रहे हैं तो folder
निर्देशिका (और यह इस में शामिल है docker-compose.yml
फ़ाइल), आप कर सकते हैं docker-compose up
और आप देखना चाहिए
Creating folder_hello_world_1
Attaching to folder_hello_world_1
hello_world_1 | Hello world
folder_hello_world_1 exited with code 0
इसने ubuntu छवि से कंटेनर बनाया, और कमांड को चलाया जो docker-compose.yml
पर निर्दिष्ट किया गया था
Docker-Compose
फ़ोल्डर नाम का उपयोग प्रोजेक्ट नाम के रूप में उपसर्ग कंटेनर और नेटवर्क के लिए करता है। किसी अन्य प्रोजेक्ट का नाम सेट करने के लिए, आप या तो docker-compose --project-name NAME {up|down|...}
कॉल कर सकते हैं या आप अपने docker-compose --project-name NAME {up|down|...}
.env
आगे .env
नामक फ़ाइल docker-compose.yml
और COMPOSE_PROJECT_NAME=name
लिख COMPOSE_PROJECT_NAME=name
। यह। हाइफ़न (-) के साथ लंबे प्रोजेक्ट नामों से बेहतर बचें क्योंकि डॉकटर इस तरह के नामों के साथ अजीब तरह से रचना करते हैं।
नोट: डॉकटर-कंपोज आपको एक ही होस्ट पर कई डॉकटर कंटेनर चलाने की अनुमति देता है। यदि आप एक से अधिक नोड पर कई कंटेनर चलाना चाहते हैं, तो कृपया समाधान जैसे कि झुंड / कुबेरनेट का संदर्भ लें।
रूबी ऑन रेलक-कंपोज़ के साथ रूबी
यदि आप रेल एप्लिकेशन के लिए docker का उपयोग करना चाहते हैं, और डेटाबेस का उपयोग करना चाहते हैं, तो आपको यह जानना होगा कि docker कंटेनर का सारा डेटा नष्ट हो जाएगा (जब तक कि आप विशेष रूप से डेटा रखने के लिए कंटेनर को कॉन्फ़िगर नहीं करते हैं) कभी-कभी, आपको docker कंटेनर बनाने की आवश्यकता होती है एक आवेदन और एक डेटाबेस के साथ एक पुराने कंटेनर में संलग्न करें।
रेल अनुप्रयोग के एक उदाहरण के रूप में, मैंने एक साधारण ऐप का उपयोग किया। आप इसे कमांड से बना सकते हैं:
rails new compose-app --database=postgresql
बेशक, आपको पहले से रेल, माणिक, आदि स्थापित करने की आवश्यकता है।
फिर, अपने प्रोजेक्ट में Dockerfile बनाएं, और इस डेटा को उसमें सेट करें:
FROM ruby:2.3.1
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
RUN mkdir /compose-app
WORKDIR /compose-app
ADD Gemfile /compose-app/Gemfile
ADD Gemfile.lock /compose-app/Gemfile.lock
RUN bundle install
ADD . /compose-app
अगला चरण - डेटा के साथ docker-compose.yml बनाएं:
version: '2'
services:
db:
image: postgres
web:
build: .
command: bundle exec rails s -e development -p 80 -b '0.0.0.0'
volumes:
- .:/compose-app
ports:
- "80:80"
depends_on:
- db
आप 80 पोर्ट (-p 80) को दूसरे से बदल सकते हैं।
Database.yml config के सेक्शन को डेवलप किया जाना चाहिए:
development: &default
adapter: postgresql
encoding: unicode
database: postgres
pool: 5
username: postgres
password:
host: db
अब आप कमांड से चित्र बना सकते हैं:
docker-compose build
(परियोजना निर्देशिका में इसे चलाएं)
और सभी से शुरू करें:
docker-compose up
यदि सब कुछ सही ढंग से किया जाता है, तो आप कंसोल में रेल से लॉग देख पाएंगे।
कंसोल बंद करें। यह काम कर जाएगा।
यदि आप डेटाबेस के बिना रेल एप्लिकेशन के साथ केवल कंटेनर हटाना चाहते हैं, तो आपको प्रोजेक्ट निर्देशिका में चलाने की आवश्यकता है:
docker-compose stop web
docker-compose build web
docker-compose up -d --no-deps web
रेल एप्लिकेशन के साथ नया कंटेनर बनाया और लॉन्च किया जाएगा।