ಡಾಕರ್: ಕೆಟ್ಟ ಸಲಹೆ

ಡಾಕರ್: ಕೆಟ್ಟ ಸಲಹೆ

ನಾನು ಕಾರನ್ನು ಓಡಿಸಲು ಕಲಿಯುತ್ತಿದ್ದಾಗ, ಮೊದಲ ಪಾಠದಲ್ಲಿ ಬೋಧಕನು ಹಿಮ್ಮುಖವಾಗಿ ಛೇದಕಕ್ಕೆ ಓಡಿಸಿದನು ಮತ್ತು ನಂತರ ನೀವು ಅದನ್ನು ಮಾಡಬಾರದು ಎಂದು ಹೇಳಿದರು - ಎಂದಿಗೂ. ನಾನು ಈ ನಿಯಮವನ್ನು ತಕ್ಷಣ ಮತ್ತು ನನ್ನ ಜೀವನದುದ್ದಕ್ಕೂ ನೆನಪಿಸಿಕೊಂಡೆ.

ನೀವು ಮಕ್ಕಳಿಗೆ ಗ್ರಿಗರಿ ಓಸ್ಟರ್ ಅವರ "ಕೆಟ್ಟ ಸಲಹೆ" ಯನ್ನು ಓದುತ್ತೀರಿ ಮತ್ತು ಅವರು ಇದನ್ನು ಮಾಡಬಾರದು ಎಂದು ಅವರಿಗೆ ಎಷ್ಟು ಸುಲಭವಾಗಿ ಮತ್ತು ಸ್ವಾಭಾವಿಕವಾಗಿ ಹೊಳೆಯುತ್ತದೆ ಎಂಬುದನ್ನು ನೀವು ನೋಡುತ್ತೀರಿ.

ಡಾಕರ್‌ಫೈಲ್ ಅನ್ನು ಸರಿಯಾಗಿ ಬರೆಯುವುದು ಹೇಗೆ ಎಂಬುದರ ಕುರಿತು ಬಹಳಷ್ಟು ಲೇಖನಗಳನ್ನು ಬರೆಯಲಾಗಿದೆ. ಆದರೆ ತಪ್ಪಾದ ಡಾಕರ್‌ಫೈಲ್‌ಗಳನ್ನು ಹೇಗೆ ಬರೆಯುವುದು ಎಂಬುದರ ಕುರಿತು ನನಗೆ ಸೂಚನೆಗಳು ಬರಲಿಲ್ಲ. ನಾನು ಈ ಕೊರತೆಯನ್ನು ತುಂಬುತ್ತಿದ್ದೇನೆ. ಮತ್ತು ಬಹುಶಃ ನಾನು ಬೆಂಬಲವನ್ನು ಪಡೆಯುವ ಯೋಜನೆಗಳಲ್ಲಿ, ಅಂತಹ ಕಡಿಮೆ ಡಾಕರ್‌ಫೈಲ್‌ಗಳು ಇರುತ್ತವೆ.

ಎಲ್ಲಾ ಪಾತ್ರಗಳು, ಸನ್ನಿವೇಶಗಳು ಮತ್ತು ಡಾಕರ್‌ಫೈಲ್ ಕಾಲ್ಪನಿಕವಾಗಿದೆ. ನೀವು ನಿಮ್ಮನ್ನು ಗುರುತಿಸಿದರೆ, ಕ್ಷಮಿಸಿ.

ಡಾಕರ್‌ಫೈಲ್ ಅನ್ನು ರಚಿಸುವುದು, ಅಶುಭ ಮತ್ತು ಭಯಾನಕ

ಪೀಟರ್ (ಹಿರಿಯ ಜಾವಾ/ರುಬ್ಬಿ/ಪಿಎಚ್‌ಪಿ ಡೆವಲಪರ್): ಸಹೋದ್ಯೋಗಿ ವಾಸಿಲಿ, ನೀವು ಈಗಾಗಲೇ ಡಾಕರ್‌ಗೆ ಹೊಸ ಮಾಡ್ಯೂಲ್ ಅನ್ನು ಅಪ್‌ಲೋಡ್ ಮಾಡಿದ್ದೀರಾ?
ವಾಸಿಲಿ (ಜೂನಿಯರ್): ಇಲ್ಲ, ನನಗೆ ಸಮಯವಿಲ್ಲ, ಈ ಡಾಕರ್‌ನೊಂದಿಗೆ ನನಗೆ ಅದನ್ನು ಕಂಡುಹಿಡಿಯಲು ಸಾಧ್ಯವಿಲ್ಲ. ಅದರ ಮೇಲೆ ಹಲವಾರು ಲೇಖನಗಳಿವೆ, ಅದು ತಲೆತಿರುಗುತ್ತದೆ.

ಪೀಟರ್: ನಮಗೆ ಒಂದು ವರ್ಷದ ಹಿಂದೆ ಗಡುವು ಇತ್ತು. ನಾನು ನಿಮಗೆ ಸಹಾಯ ಮಾಡೋಣ, ನಾವು ಪ್ರಕ್ರಿಯೆಯಲ್ಲಿ ಅದನ್ನು ಲೆಕ್ಕಾಚಾರ ಮಾಡುತ್ತೇವೆ. ನಿಮಗೆ ಯಾವುದು ಕೆಲಸ ಮಾಡುವುದಿಲ್ಲ ಎಂದು ಹೇಳಿ.

ವಾಸಿಲಿ: ನಾನು ಮೂಲಭೂತ ಚಿತ್ರವನ್ನು ಆಯ್ಕೆ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ ಆದ್ದರಿಂದ ಅದು ಕಡಿಮೆಯಾಗಿದೆ, ಆದರೆ ನಿಮಗೆ ಬೇಕಾದ ಎಲ್ಲವನ್ನೂ ಹೊಂದಿದೆ.
ಪೀಟರ್: ಉಬುಂಟು ಚಿತ್ರವನ್ನು ತೆಗೆದುಕೊಳ್ಳಿ, ಅದು ನಿಮಗೆ ಬೇಕಾದ ಎಲ್ಲವನ್ನೂ ಹೊಂದಿದೆ. ಮತ್ತು ಅನಗತ್ಯವಾದ ಬಹಳಷ್ಟು ಸಂಗತಿಗಳು ನಂತರ ಸೂಕ್ತವಾಗಿ ಬರುತ್ತವೆ. ಮತ್ತು ಇತ್ತೀಚಿನ ಟ್ಯಾಗ್ ಅನ್ನು ಹಾಕಲು ಮರೆಯಬೇಡಿ ಇದರಿಂದ ಆವೃತ್ತಿಯು ಯಾವಾಗಲೂ ಇತ್ತೀಚಿನದು.

ಮತ್ತು ಮೊದಲ ಸಾಲು ಡಾಕರ್‌ಫೈಲ್‌ನಲ್ಲಿ ಕಾಣಿಸಿಕೊಳ್ಳುತ್ತದೆ:

FROM ubuntu:latest

ಪೀಟರ್: ಮುಂದೇನು, ನಮ್ಮ ಮಾಡ್ಯೂಲ್ ಅನ್ನು ಬರೆಯಲು ನಾವು ಏನು ಬಳಸಿದ್ದೇವೆ?
ವಾಸಿಲಿ: ಆದ್ದರಿಂದ ರೂಬಿ, ವೆಬ್ ಸರ್ವರ್ ಇದೆ ಮತ್ತು ಒಂದೆರಡು ಸೇವಾ ಡೀಮನ್‌ಗಳನ್ನು ಪ್ರಾರಂಭಿಸಬೇಕು.
ಪೀಟರ್: ಹೌದು, ನಮಗೆ ಏನು ಬೇಕು: ಮಾಣಿಕ್ಯ, ಬಂಡ್ಲರ್, ನೋಡ್‌ಗಳು, ಇಮೇಜ್‌ಮ್ಯಾಜಿಕ್ ಮತ್ತು ಇನ್ನೇನು... ಮತ್ತು ಅದೇ ಸಮಯದಲ್ಲಿ, ಖಂಡಿತವಾಗಿಯೂ ಹೊಸ ಪ್ಯಾಕೇಜ್‌ಗಳನ್ನು ಪಡೆಯಲು ಅಪ್‌ಗ್ರೇಡ್ ಮಾಡಿ.
ವಾಸಿಲಿ: ಮತ್ತು ನಾವು ಬಳಕೆದಾರರನ್ನು ರಚಿಸುವುದಿಲ್ಲ ಆದ್ದರಿಂದ ನಾವು ರೂಟ್ ಅಡಿಯಲ್ಲಿರುವುದಿಲ್ಲವೇ?
ಪೀಟರ್: ಅದನ್ನು ಫಕ್ ಮಾಡಿ, ನಂತರ ನೀವು ಇನ್ನೂ ಹಕ್ಕುಗಳೊಂದಿಗೆ ಮೂರ್ಖರಾಗಬೇಕು.
ವಾಸಿಲಿ: ನನಗೆ ಸಮಯ ಬೇಕು, ಸುಮಾರು 15 ನಿಮಿಷಗಳು, ಎಲ್ಲವನ್ನೂ ಒಂದೇ ಆಜ್ಞೆಗೆ ಸೇರಿಸಲು, ನಾನು ಅದನ್ನು ಓದಿದ್ದೇನೆ ...
(ಪೀಟರ್ ಒರಟಾಗಿ ನಿಖರವಾದ ಮತ್ತು ಅತ್ಯಂತ ಸ್ಮಾರ್ಟ್ ಜೂನಿಯರ್ ಅನ್ನು ಅಡ್ಡಿಪಡಿಸುತ್ತಾನೆ.)
ಪೀಟರ್: ಪ್ರತ್ಯೇಕ ಆಜ್ಞೆಗಳಲ್ಲಿ ಬರೆಯಿರಿ, ಅದನ್ನು ಓದಲು ಸುಲಭವಾಗುತ್ತದೆ.

ಡಾಕರ್‌ಫೈಲ್ ಬೆಳೆಯುತ್ತದೆ:

FROM ubuntu:latest
RUN apt-get update
RUN apt-get upgrade
RUN apt-get -y install libpq-dev imagemagick gsfonts ruby-full
RUN gem install bundler
RUN curl -sL https://deb.nodesource.com/setup_9.x | sudo bash -
RUN apt-get install -y nodejs
RUN bundle install --without development test --path vendor/bundle
RUN rm -rf /usr/local/bundle/cache/*.gem 
RUN apt-get clean 
RUN rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

ನಂತರ ಇಗೊರ್ ಇವನೊವಿಚ್, ಡೆವೊಪ್ಸ್ (ಆದರೆ ದೇವ್‌ಗಿಂತ ಹೆಚ್ಚು ಓಪ್‌ಗಳು), ಕೂಗುತ್ತಾ ಕಚೇರಿಗೆ ನುಗ್ಗುತ್ತಾರೆ:

AI: ಪೆಟ್ಯಾ, ನಿಮ್ಮ ಡೆವಲಪರ್‌ಗಳು ಆಹಾರದ ಡೇಟಾಬೇಸ್ ಅನ್ನು ಮತ್ತೆ ಮುರಿದಿದ್ದಾರೆ, ಇದು ಯಾವಾಗ ಕೊನೆಗೊಳ್ಳುತ್ತದೆ...

ಸಣ್ಣ ಚಕಮಕಿಯ ನಂತರ, ಇಗೊರ್ ಇವನೊವಿಚ್ ತಣ್ಣಗಾಗುತ್ತಾನೆ ಮತ್ತು ತನ್ನ ಸಹೋದ್ಯೋಗಿಗಳು ಇಲ್ಲಿ ಏನು ಮಾಡುತ್ತಿದ್ದಾರೆಂದು ಕಂಡುಹಿಡಿಯಲು ಪ್ರಾರಂಭಿಸುತ್ತಾನೆ.

AI: ನೀವು ಏನು ಮಾಡುತ್ತಿದ್ದೀರಿ?
ವಾಸಿಲಿ: ಹೊಸ ಮಾಡ್ಯೂಲ್‌ಗಾಗಿ ಡಾಕರ್‌ಫೈಲ್ ರಚಿಸಲು ಪೀಟರ್ ನನಗೆ ಸಹಾಯ ಮಾಡುತ್ತಿದ್ದಾನೆ.
AI: ನಾನು ನೋಡೋಣ ... ನೀವು ಇಲ್ಲಿ ಏನು ಬರೆದಿದ್ದೀರಿ, ನೀವು ಪ್ರತ್ಯೇಕ ಆಜ್ಞೆಯೊಂದಿಗೆ ರೆಪೊಸಿಟರಿಯನ್ನು ಸ್ವಚ್ಛಗೊಳಿಸುತ್ತೀರಿ, ಇದು ಹೆಚ್ಚುವರಿ ಲೇಯರ್ ಆಗಿದೆ ... ಆದರೆ ನೀವು ಜೆಮ್‌ಫೈಲ್ ಅನ್ನು ನಕಲಿಸದಿದ್ದರೆ ನೀವು ಅವಲಂಬನೆಗಳನ್ನು ಹೇಗೆ ಸ್ಥಾಪಿಸುತ್ತೀರಿ! ಮತ್ತು ಸಾಮಾನ್ಯವಾಗಿ, ಇದು ಒಳ್ಳೆಯದಲ್ಲ.
ಪೀಟರ್: ದಯವಿಟ್ಟು ನಿಮ್ಮ ವ್ಯವಹಾರದ ಬಗ್ಗೆ ಹೋಗಿ, ನಾವು ಅದನ್ನು ಹೇಗಾದರೂ ಲೆಕ್ಕಾಚಾರ ಮಾಡುತ್ತೇವೆ.

ಇಗೊರ್ ಇವನೊವಿಚ್ ದುಃಖದಿಂದ ನಿಟ್ಟುಸಿರು ಬಿಡುತ್ತಾನೆ ಮತ್ತು ಡೇಟಾಬೇಸ್ ಅನ್ನು ಯಾರು ಮುರಿದರು ಎಂದು ಲೆಕ್ಕಾಚಾರ ಮಾಡಲು ಹೊರಟರು.

ಪೀಟರ್: ಹೌದು, ಆದರೆ ಅವರು ಕೋಡ್ ಬಗ್ಗೆ ಸರಿಯಾಗಿದ್ದರು, ನಾವು ಅದನ್ನು ಚಿತ್ರಕ್ಕೆ ತಳ್ಳಬೇಕಾಗಿದೆ. ಮತ್ತು ತಕ್ಷಣವೇ ssh ಮತ್ತು ಮೇಲ್ವಿಚಾರಕವನ್ನು ಸ್ಥಾಪಿಸೋಣ, ಇಲ್ಲದಿದ್ದರೆ ನಾವು ಡೀಮನ್ಗಳನ್ನು ಪ್ರಾರಂಭಿಸುತ್ತೇವೆ.

ವಾಸಿಲಿ: ನಂತರ ನಾನು ಮೊದಲು Gemfile ಮತ್ತು Gemfile.lock ಅನ್ನು ನಕಲಿಸುತ್ತೇನೆ, ನಂತರ ನಾನು ಎಲ್ಲವನ್ನೂ ಸ್ಥಾಪಿಸುತ್ತೇನೆ ಮತ್ತು ನಂತರ ನಾನು ಸಂಪೂರ್ಣ ಯೋಜನೆಯನ್ನು ನಕಲಿಸುತ್ತೇನೆ. Gemfile ಬದಲಾಗದಿದ್ದರೆ, ಸಂಗ್ರಹದಿಂದ ಪದರವನ್ನು ತೆಗೆದುಕೊಳ್ಳಲಾಗುತ್ತದೆ.
ಪೀಟರ್: ನೀವೆಲ್ಲರೂ ಈ ಪದರಗಳೊಂದಿಗೆ ಏಕೆ ಇದ್ದೀರಿ, ಎಲ್ಲವನ್ನೂ ಒಂದೇ ಬಾರಿಗೆ ನಕಲಿಸಿ. ಈಗಿನಿಂದಲೇ ನಕಲಿಸಿ. ಮೊದಲ ಸಾಲು.

ಡಾಕರ್‌ಫೈಲ್ ಈಗ ಈ ರೀತಿ ಕಾಣುತ್ತದೆ:

FROM ubuntu:latest
COPY ./ /app
WORKDIR /app
RUN apt-get update
RUN apt-get upgrade
RUN apt-get -y install libpq-dev imagemagick gsfonts ruby-full ssh supervisor
RUN gem install bundler
RUN curl -sL https://deb.nodesource.com/setup_9.x | sudo bash -
RUN apt-get install -y nodejs

RUN bundle install --without development test --path vendor/bundle
RUN rm -rf /usr/local/bundle/cache/*.gem 
RUN apt-get clean 
RUN rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* 

ಪೀಟರ್: ಹಾಗಾದರೆ, ಮುಂದೆ ಏನು? ಮೇಲ್ವಿಚಾರಕರಿಗಾಗಿ ನೀವು ಸಂರಚನೆಗಳನ್ನು ಹೊಂದಿದ್ದೀರಾ?
ವಾಸಿಲಿ: ಇಲ್ಲ, ಇಲ್ಲ. ಆದರೆ ನಾನು ಅದನ್ನು ಬೇಗನೆ ಮಾಡುತ್ತೇನೆ.
ಪೀಟರ್: ನಂತರ ನೀವು ಅದನ್ನು ಮಾಡುತ್ತೀರಿ. ಈಗ ಎಲ್ಲವನ್ನೂ ಪ್ರಾರಂಭಿಸುವ init ಸ್ಕ್ರಿಪ್ಟ್ ಅನ್ನು ಸ್ಕೆಚ್ ಮಾಡೋಣ. ಸರಿ, ಆದ್ದರಿಂದ ನೀವು ssh ಅನ್ನು nohup ನೊಂದಿಗೆ ಪ್ರಾರಂಭಿಸಿ, ಇದರಿಂದ ನಾವು ಕಂಟೇನರ್‌ಗೆ ಸಂಪರ್ಕಿಸಬಹುದು ಮತ್ತು ಏನು ತಪ್ಪಾಗಿದೆ ಎಂದು ನೋಡಬಹುದು. ನಂತರ ಮೇಲ್ವಿಚಾರಕರನ್ನು ಅದೇ ರೀತಿಯಲ್ಲಿ ಚಲಾಯಿಸಿ. ಸರಿ, ನಂತರ ನೀವು ಕೇವಲ ಪ್ರಯಾಣಿಕ ರನ್.
ಪ್ರಶ್ನೆ: ಆದರೆ ಒಂದು ಪ್ರಕ್ರಿಯೆ ಇರಬೇಕು ಎಂದು ನಾನು ಓದಿದ್ದೇನೆ, ಆದ್ದರಿಂದ ಡಾಕರ್ ಏನೋ ತಪ್ಪಾಗಿದೆ ಎಂದು ತಿಳಿಯುತ್ತದೆ ಮತ್ತು ಕಂಟೇನರ್ ಅನ್ನು ಮರುಪ್ರಾರಂಭಿಸಬಹುದು.
ಪಿ: ಅಸಂಬದ್ಧತೆಯಿಂದ ನಿಮ್ಮ ತಲೆಯನ್ನು ತೊಂದರೆಗೊಳಿಸಬೇಡಿ. ಮತ್ತು ಸಾಮಾನ್ಯವಾಗಿ, ಹೇಗೆ? ಒಂದು ಪ್ರಕ್ರಿಯೆಯಲ್ಲಿ ನೀವು ಎಲ್ಲವನ್ನೂ ಹೇಗೆ ನಡೆಸುತ್ತೀರಿ? ಇಗೊರ್ ಇವನೊವಿಚ್ ಸ್ಥಿರತೆಯ ಬಗ್ಗೆ ಯೋಚಿಸಲಿ, ಅವನು ಸಂಬಳ ಪಡೆಯುವುದು ಯಾವುದಕ್ಕೂ ಅಲ್ಲ. ಕೋಡ್ ಬರೆಯುವುದು ನಮ್ಮ ಕೆಲಸ. ಮತ್ತು ಸಾಮಾನ್ಯವಾಗಿ, ನಾವು ಅವರಿಗೆ ಡಾಕ್‌ಫೈಲ್ ಅನ್ನು ಬರೆದಿದ್ದೇವೆ ಎಂದು ಅವರು ಧನ್ಯವಾದ ಹೇಳಲಿ.

10 ನಿಮಿಷಗಳು ಮತ್ತು ಬೆಕ್ಕುಗಳ ಬಗ್ಗೆ ಎರಡು ವೀಡಿಯೊಗಳು ನಂತರ.

ಪ್ರಶ್ನೆ: ನಾನು ಎಲ್ಲವನ್ನೂ ಮಾಡಿದ್ದೇನೆ. ನಾನು ಹೆಚ್ಚಿನ ಕಾಮೆಂಟ್‌ಗಳನ್ನು ಸೇರಿಸಿದ್ದೇನೆ.
ಪಿ: ನನಗೆ ತೋರಿಸು!

ಡಾಕರ್‌ಫೈಲ್‌ನ ಇತ್ತೀಚಿನ ಆವೃತ್ತಿ:

FROM ubuntu:latest

# Копируем исходный код
COPY ./ /app
WORKDIR /app

# Обновляем список пакетов
RUN apt-get update 

# Обновляем пакеты
RUN apt-get upgrade

# Устанавливаем нужные пакеты
RUN apt-get -y install libpq-dev imagemagick gsfonts ruby-full ssh supervisor

# Устанавливаем bundler
RUN gem install bundler

# Устанавливаем nodejs используется для сборки статики
RUN curl -sL https://deb.nodesource.com/setup_9.x | sudo bash -
RUN apt-get install -y nodejs

# Устанавливаем зависимости
RUN bundle install --without development test --path vendor/bundle

# Чистим за собой кэши
RUN rm -rf /usr/local/bundle/cache/*.gem 
RUN apt-get clean 
RUN rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* 

# Запускаем скрипт, при старте контейнера, который запустит все остальное.
CMD [“/app/init.sh”]

ಪಿ: ಅದ್ಭುತವಾಗಿದೆ, ನಾನು ಅದನ್ನು ಇಷ್ಟಪಡುತ್ತೇನೆ. ಮತ್ತು ಕಾಮೆಂಟ್‌ಗಳು ರಷ್ಯನ್ ಭಾಷೆಯಲ್ಲಿವೆ, ಅನುಕೂಲಕರ ಮತ್ತು ಓದಬಲ್ಲವು, ಪ್ರತಿಯೊಬ್ಬರೂ ಹಾಗೆ ಕೆಲಸ ಮಾಡುತ್ತಾರೆ. ನಾನು ನಿಮಗೆ ಎಲ್ಲವನ್ನೂ ಕಲಿಸಿದೆ, ಉಳಿದದ್ದನ್ನು ನೀವೇ ಮಾಡಬಹುದು. ಕಾಫಿ ಕುಡಿಯಲು ಹೋಗೋಣ...

ಸರಿ, ಈಗ ನಾವು ಸಂಪೂರ್ಣವಾಗಿ ಭಯಾನಕ ಡಾಕರ್‌ಫೈಲ್ ಅನ್ನು ಹೊಂದಿದ್ದೇವೆ, ಅದರ ನೋಟವು ಇಗೊರ್ ಇವನೊವಿಚ್ ಅವರನ್ನು ತೊರೆಯಲು ಬಯಸುತ್ತದೆ ಮತ್ತು ಅವನ ಕಣ್ಣುಗಳು ಇನ್ನೊಂದು ವಾರದವರೆಗೆ ನೋಯಿಸುತ್ತವೆ. Dockerfile, ಸಹಜವಾಗಿ, ಇನ್ನೂ ಕೆಟ್ಟದಾಗಿರಬಹುದು, ಪರಿಪೂರ್ಣತೆಗೆ ಯಾವುದೇ ಮಿತಿಯಿಲ್ಲ. ಆದರೆ ಪ್ರಾರಂಭಕ್ಕಾಗಿ, ಇದು ಮಾಡುತ್ತದೆ.

ನಾನು ಗ್ರಿಗರಿ ಓಸ್ಟರ್ ಅವರ ಉಲ್ಲೇಖದೊಂದಿಗೆ ಕೊನೆಗೊಳಿಸಲು ಬಯಸುತ್ತೇನೆ:

ನೀವು ಇನ್ನೂ ಖಚಿತವಾಗಿಲ್ಲದಿದ್ದರೆ
ನಾವು ಜೀವನದ ಮಾರ್ಗವನ್ನು ಆರಿಸಿದ್ದೇವೆ,
ಮತ್ತು ಏಕೆ ಎಂದು ನಿಮಗೆ ತಿಳಿದಿಲ್ಲ
ನಿಮ್ಮ ಕಾರ್ಮಿಕ ಪ್ರಯಾಣವನ್ನು ಪ್ರಾರಂಭಿಸಿ,
ಹಜಾರಗಳಲ್ಲಿ ಬೆಳಕಿನ ಬಲ್ಬ್ಗಳನ್ನು ಮುರಿಯಿರಿ -
ಜನರು ನಿಮಗೆ "ಧನ್ಯವಾದಗಳು" ಎಂದು ಹೇಳುತ್ತಾರೆ.
ನೀವು ಜನರಿಗೆ ಸಹಾಯ ಮಾಡುತ್ತೀರಿ
ವಿದ್ಯುತ್ ಉಳಿಸಿ.

ಮೂಲ: www.habr.com

ಕಾಮೆಂಟ್ ಅನ್ನು ಸೇರಿಸಿ