DanLevy.net

Docker सर्वर सेटअप

एकल कमांड से डेटाबेस सर्वर शुरू करें

Hero image for Docker सर्वर सेटअप

Docker सर्वर सेटअप

ऐतिहासिक नोट: यह 2015 का स्थानीय‑विकास संदर्भ है। यह पुराने वर्कफ़्लो को समझने में मदद करता है, लेकिन इन स्निपेट्स को वर्तमान प्रोडक्शन सलाह के रूप में न लें। आज के सुरक्षित डिफ़ॉल्ट में मॉडर्न Docker Compose फ़ाइलें, कस्टम नेटवर्क, पिन्ड इमेज वर्ज़न, ऑथेंटिकेशन, सीक्रेट्स और अपडेट ऑटोमेशन शामिल हैं।

यह गाइड किसके लिए है?

इन कारणों को फिर कभी आपके रास्ते में न आने दें!

1‑लाइनर के तेज़ लिंक

यह लेख सबसे लोकप्रिय डेटाबेस को शुरू करने के 1‑लाइन कमांड्स को कवर करता है, जिसमें शामिल हैं:

PostgreSQL icon Postgres

MongoDB icon MongoDB

MySQL icon MySQL

Elastic icon ElasticSearch

नोट: ये कमांड्स स्थानीय‑विकास शॉर्टकट के रूप में लिखी गई हैं। यदि आप इन्हें प्रोडक्शन में अपनाते हैं, तो पहले ऑथेंटिकेशन, सीक्रेट मैनेजमेंट, बैकअप, नेटवर्क पॉलिसी, पिन्ड इमेज और अपग्रेड प्लान जोड़ें।

एडवांस्ड 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/.mongodb

mongosh CLI टूल से सर्वर से कनेक्ट करें। (यदि यह स्थापित नहीं है तो नीचे देखें।)

#> Using default arguments:
mongosh

और आपको कुछ इस तरह दिखना चाहिए:

Preview of mongo shell output

Mongo CLI टूल सेटअप

brew और OSX का उपयोग
brew tap mongodb/brew
brew install mongodb-community-shell

Mysql सर्वर

चेतावनी: नीचे 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:8

ElasticSearch सर्वर

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 वेब एप्लिकेशन को पैकेज करना

  1. अपने प्रोजेक्ट रूट में Dockerfile नाम की एक खाली फ़ाइल जोड़ें।
  2. (वैकल्पिक, अनुशंसित) .dockerignore फ़ाइल जोड़ें और .gitignore नियमों का उपयोग करके बड़े, गैर‑आवश्यक पाथ को बाहर रखें। डिफ़ॉल्ट रूप से सभी प्रोजेक्ट फ़ाइलें शामिल होती हैं।

अपने ऐप रूट में Dockerfile बनाएं

# Example for NodeJS
FROM node:22
EXPOSE 3000
COPY . /app/
WORKDIR /app
RUN apt-get update && apt-get dist-upgrade -yqq
RUN ["npm", "install"]

# Overridable Command
CMD ["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-local
docker network connect app-local mongodb
docker network connect app-local elastic
docker 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-here
docker rm -f webapp01
# अब ऊपर के `docker run...` को फिर से चलाएँ ^^^
# उदाहरण के तौर पर, ऊपर की DB इंस्टेंस को मारने के लिए चलाएँ: ( `docker stop {mongo,elastic}` जैसा कुछ शुरू करें )
docker rm -f mongo elastic