Docker सर्वर सेटअप
एकल कमांड से डेटाबेस सर्वर शुरू करें
Docker सर्वर सेटअप
ऐतिहासिक नोट: यह 2015 का स्थानीय‑विकास संदर्भ है। यह पुराने वर्कफ़्लो को समझने में मदद करता है, लेकिन इन स्निपेट्स को वर्तमान प्रोडक्शन सलाह के रूप में न लें। आज के सुरक्षित डिफ़ॉल्ट में मॉडर्न Docker Compose फ़ाइलें, कस्टम नेटवर्क, पिन्ड इमेज वर्ज़न, ऑथेंटिकेशन, सीक्रेट्स और अपडेट ऑटोमेशन शामिल हैं।
यह गाइड किसके लिए है?
- क्या आपने कभी ‘थ्रो‑अवे’ डेटाबेस के साथ ऐप टेस्ट करने की इच्छा की है?
- क्या आपको एक संदिग्ध कोडबेस मिला है? मौजूदा डेटाबेस तक पहुंच साझा न करना पसंद करेंगे?
- क्या आप सुरक्षा‑सेंसिटिव क्लाइंट्स के साथ काम करते हैं? क्रॉस‑कंटैमिनेशन का जोखिम न लें! कंटेनर इस्तेमाल करें और डेटा पर्सिस्टेंस को नियंत्रित करें!
- क्या आपका लेगेसी एप्लिकेशन 12 साल पुरानी MySQL वर्ज़न पर निर्भर होने के कारण आप अपने डेव वातावरण को नवीनतम डेटाबेस वर्ज़न में अपग्रेड नहीं कर पा रहे हैं?
इन कारणों को फिर कभी आपके रास्ते में न आने दें!
1‑लाइनर के तेज़ लिंक
यह लेख सबसे लोकप्रिय डेटाबेस को शुरू करने के 1‑लाइन कमांड्स को कवर करता है, जिसमें शामिल हैं:
नोट: ये कमांड्स स्थानीय‑विकास शॉर्टकट के रूप में लिखी गई हैं। यदि आप इन्हें प्रोडक्शन में अपनाते हैं, तो पहले ऑथेंटिकेशन, सीक्रेट मैनेजमेंट, बैकअप, नेटवर्क पॉलिसी, पिन्ड इमेज और अपग्रेड प्लान जोड़ें।
एडवांस्ड Docker उपयोगकर्ता: यदि आप
docker-composeसे परिचित हैं तो नीचे दिए गए शेल कमांड्स को अपनेdocker-compose.ymlफ़ाइलों में बदलने पर विचार करें।
Postgres सर्वर
एक कंटेनर शुरू करें, इसका नाम
pg-localhostरखें
# कंटेनर के बाहर स्थानीय पथ पर DB फ़ाइलें रखेंmkdir -p $HOME/.postgres-data
docker run \ --name pg-localhost \ -p 127.0.0.1:5432:5432 \ -e POSTGRES_PASSWORD=password \ --restart unless-stopped \ -it \ --shm-size=256mb \ postgres:16-alpine \ postgres -c 'listen_addresses=*' \ -c 'password_encryption=scram-sha-256' \ -c 'shared_memory_type=sysv' \ -c 'shared_buffers=256MB' \ -c 'max_connections=200'आवश्यकतानुसार कमांड‑लाइन विकल्प समायोजित करें। (Postgres डेमन के आर्ग्यूमेंट्स
postgres:16-alpineइमेज नाम के बाद शुरू होते हैं। देखेंpostgres -c 'listen_addresses=*'...)
postgresउपयोगकर्ता के रूप मेंpsqlप्रॉम्प्ट तक पहुँचें
docker exec --user postgres -it pg-localhost psqlकंटेनर की शेल को रूट के रूप में खोलें
docker exec -it pg-localhost bashनोट: ऊपर दिया गया कमांड आधिकारिक Alpine Linux बेस इमेज का उपयोग करता है। यह आपका सामान्य Debian वातावरण नहीं है।
Debian/Ubuntu बेस इमेज उपयोग करने के लिए,
postgres:12-alpineकोpostgres:12में बदलें।
MongoDB सर्वर
mkdir -p $HOME/.mongodb/data
docker run -d \ --name mongodb \ --restart on-failure:5 \ -p 127.0.0.1:27017:27017 \ -v $HOME/.mongodb:/data \ mongo:7 \ bash -c 'mongod --bind_ip 0.0.0.0'अब आपका सर्वर सेटअप हो गया है, यह पुष्टि करने के लिए कि डेटा $HOME/.mongodb में है, चलाएँ:
ls -lach $HOME/.mongodbmongosh CLI टूल से सर्वर से कनेक्ट करें। (यदि यह स्थापित नहीं है तो नीचे देखें।)
#> Using default arguments:mongoshऔर आपको कुछ इस तरह दिखना चाहिए:

Mongo CLI टूल सेटअप
brew और OSX का उपयोग
brew tap mongodb/brewbrew install mongodb-community-shellMysql सर्वर
चेतावनी: नीचे
MYSQL_ROOT_PASSWORDमें पासवर्ड बदलें।
mkdir -p $HOME/.mysql
docker run -d \ -v $HOME/.mysql:/var/lib/mysql \ -p 127.0.0.1:3306:3306 \ --name mysql-$USER \ -e MYSQL_DATABASE=$USER \ -e MYSQL_ROOT_HOST='172.*.*.*' \ -e MYSQL_ROOT_PASSWORD='p@ssw0rd' \ mysql/mysql-server:8ElasticSearch सर्वर
mkdir -p $HOME/.elastic
docker run -d \ --name elastic \ -p 127.0.0.1:9200:9200 \ -p 127.0.0.1:9300:9300 \ -v $HOME/.elastic:/data \ docker.elastic.co/elasticsearch/elasticsearch:8.15.5 bash -c 'elasticsearch --cluster.name elastic_cluster --node.name elastic01 --path.data /data/elastic-data --path.logs /data/elastic-logs 'सुरक्षा नोट्स
ध्यान दें:
-p 127.0.0.1:27017:27017‑शैली का पोर्ट विकल्प आपके इंस्टेंस तक पहुँच को केवल Docker सर्वर के localhost नेटवर्क तक सीमित करता है।
एक्सपोज़्ड पोर्ट को “पब्लिश” करने के लिए स्थानीय IP प्रीफ़िक्स हटाएँ:-p 27017:27017। सुनिश्चित करें कि आपने आवश्यक सुरक्षा उपाय अपनाए हैं।
सिफारिश: हमेशा एक पोर्ट स्कैनिंग टूल (जैसे nmap/masscan) का उपयोग करके अपने नेटवर्क कॉन्फ़िगरेशन की पुष्टि करें (किसी अलग नेटवर्क वाले सिस्टम से)।
अब आपके पास डेटाबेस सर्वर शुरू करने के कमांड हैं, अगला कदम है अपने एप्लिकेशन को एक Docker इमेज के रूप में पैकेज करना। भाग 2 नीचे जारी है:
एक NodeJS वेब एप्लिकेशन को पैकेज करना
- अपने प्रोजेक्ट रूट में
Dockerfileनाम की एक खाली फ़ाइल जोड़ें। - (वैकल्पिक, अनुशंसित)
.dockerignoreफ़ाइल जोड़ें और .gitignore नियमों का उपयोग करके बड़े, गैर‑आवश्यक पाथ को बाहर रखें। डिफ़ॉल्ट रूप से सभी प्रोजेक्ट फ़ाइलें शामिल होती हैं।
अपने ऐप रूट में Dockerfile बनाएं
# Example for NodeJSFROM node:22EXPOSE 3000COPY . /app/WORKDIR /appRUN apt-get update && apt-get dist-upgrade -yqqRUN ["npm", "install"]
# Overridable CommandCMD ["npm", "start"]Dockerfile का उपयोग करके शुरू करना और परिणाम कंसोल में दिखाना आसान है (नीचे कमांड देखें)।
टर्मिनल में, cd करके अपने प्रोजेक्ट फ़ोल्डर पर जाएँ और हर बार जब आप बदलाव डिप्लॉय करें — या OS/Env कॉन्फ़िगरेशन बदलना/अपग्रेड करना चाहें — निम्न build कमांड चलाएँ:
docker build -t app-name-here .प्रमुख Docker कमांड संदर्भ
Docker इमेज बनाना
docker build -t app-name-here .वेब ऐप बनाना/चलाना और DB सर्वरों से लिंक करना
docker network create app-localdocker network connect app-local mongodbdocker network connect app-local elasticdocker run -d --name webapp01 --network app-local -p 3000:3000 app-name-here#### इंटरैक्टिव रूप से चलाएँ (नॉन‑डेमन, टर्मिनल में)
```sh
docker run -it --name webapp01 --network app-local -p 3000:3000 app-name-here bashकंटेनर इंस्टेंस या इमेज हटाएँ
महत्वपूर्ण: माउंटेड वॉल्यूम पाथ पर न रखे गए सभी डेटा खो जाएंगे!!
# इमेज हटाएँdocker rmi -f app-name-heredocker rm -f webapp01# अब ऊपर के `docker run...` को फिर से चलाएँ ^^^# उदाहरण के तौर पर, ऊपर की DB इंस्टेंस को मारने के लिए चलाएँ: ( `docker stop {mongo,elastic}` जैसा कुछ शुरू करें )docker rm -f mongo elastic