मैं निम्नलिखित इंफ्रास्ट्रक्चर फ्लो बनाना चाहता हूँ:
डॉकर का उपयोग करके इसे कैसे प्राप्त किया जा सकता है?
मैं निम्नलिखित इंफ्रास्ट्रक्चर फ्लो बनाना चाहता हूँ:
डॉकर का उपयोग करके इसे कैसे प्राप्त किया जा सकता है?
जवाबों:
सबसे पहले आपको उन छवियों में एक SSH सर्वर स्थापित करना होगा जो आप ssh-में चाहते हैं। आप स्थापित किए गए ssh सर्वर के साथ अपने सभी कंटेनर के लिए आधार छवि का उपयोग कर सकते हैं। तब आपको केवल होस्ट के बंदरगाहों (आपकी छवि में दूरस्थ सर्वर) का उपयोग करके प्रत्येक कंटेनर को ssh पोर्ट (डिफ़ॉल्ट 22) को मैप करना होगा -p <hostPort>:<containerPort>
। अर्थात:
docker run -p 52022:22 container1
docker run -p 53022:22 container2
तब, यदि होस्ट से 52022 और 53022 पोर्ट बाहर से पहुँच योग्य हैं, तो आप सीधे होस्ट (रिमोट सर्वर) के आईपी का उपयोग करके कंटेनरों में ssh को पोर्ट के साथ निर्दिष्ट कर सकते हैं -p <port>
। अर्थात:
ssh -p 52022 myuser@RemoteServer
-> SSH से लेकर कंटेनर 1 तक
ssh -p 53022 myuser@RemoteServer
-> SSH से लेकर कंटेनर 2 तक
सूचना : यह उत्तर मेरे द्वारा लिखे गए टूल को बढ़ावा देता है।
यहां चयनित उत्तर हर छवि में एक SSH सर्वर स्थापित करने का सुझाव देता है। वैचारिक रूप से यह सही तरीका नहीं है ( https://docs.docker.com/articles/dockerfile_best-practices/ )।
मैंने एक कंटेनरीकृत SSH सर्वर बनाया है जिसे आप किसी भी चल रहे कंटेनर से 'स्टिक' कर सकते हैं। इस तरह आप हर कंटेनर के साथ रचनाएँ बना सकते हैं। केवल आवश्यकता यह है कि कंटेनर में बैश हो।
निम्न उदाहरण स्थानीय मशीन के पोर्ट 2222 पर उजागर एक एसएसएच सर्वर शुरू करेगा।
$ docker run -d -p 2222:22 \
-v /var/run/docker.sock:/var/run/docker.sock \
-e CONTAINER=my-container -e AUTH_MECHANISM=noAuth \
jeroenpeeters/docker-ssh
$ ssh -p 2222 localhost
अधिक पॉइंटर्स और डॉक्यूमेंटेशन के लिए देखें: https://github.com/jeroenpeeters/docker-ssh
न केवल यह प्रति कंटेनर एक प्रक्रिया के विचार को पराजित करता है, यह डॉकटर हब से छवियों का उपयोग करते समय एक बोझिल दृष्टिकोण भी है क्योंकि वे अक्सर एसएसएच सर्वर को शामिल नहीं करते (और नहीं करना चाहिए)।
ये फाइलें सफलतापूर्वक sshd और रन सर्विस खोलेंगी ताकि आप स्थानीय स्तर पर ssh कर सकें। (आप साइबरबक का उपयोग कर रहे हैं आप नहीं हैं?)
Dockerfile
FROM swiftdocker/swift
MAINTAINER Nobody
RUN apt-get update && apt-get -y install openssh-server supervisor
RUN mkdir /var/run/sshd
RUN echo 'root:password' | chpasswd
RUN sed -i 's/PermitRootLogin without-password/PermitRootLogin yes/' /etc/ssh/sshd_config
# SSH login fix. Otherwise user is kicked off after login
RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd
ENV NOTVISIBLE "in users profile"
RUN echo "export VISIBLE=now" >> /etc/profile
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
EXPOSE 22
CMD ["/usr/bin/supervisord"]
supervisord.conf
[supervisord]
nodaemon=true
[program:sshd]
command=/usr/sbin/sshd -D
प्रारंभ डेमॉन बनाने / चलाने / शेल में कूदने के लिए।
docker build -t swift3-ssh .
docker run -p 2222:22 -i -t swift3-ssh
docker ps # find container id
docker exec -i -t <containerid> /bin/bash
मुझे लगता है कि यह संभव है। आपको बस प्रत्येक कंटेनर में एक एसएसएच सर्वर स्थापित करने और होस्ट पर एक पोर्ट को उजागर करने की आवश्यकता है। कंटेनर को पोर्ट की मैपिंग को याद रखने पर मुख्य झुंझलाहट बनी रहेगी।
हालाँकि, मुझे यह सवाल करना होगा कि आप ऐसा क्यों करना चाहते हैं। कंटेनरों में SSH'ng काफी दुर्लभ होना चाहिए कि यह मेजबान को बोने के लिए एक परेशानी नहीं है, फिर कंटेनर में जाने के लिए डॉक निष्पादित का उपयोग करें।
openssh-server
पूर्वस्थापित के साथ डॉक चित्र बनाएँ :
FROM ubuntu:16.04
RUN apt-get update && apt-get install -y openssh-server
RUN mkdir /var/run/sshd
RUN echo 'root:screencast' | chpasswd
RUN sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
# SSH login fix. Otherwise user is kicked off after login
RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd
ENV NOTVISIBLE "in users profile"
RUN echo "export VISIBLE=now" >> /etc/profile
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]
छवि का उपयोग कर बनाएँ:
$ docker build -t eg_sshd .
एक test_sshd
कंटेनर चलाएँ :
$ docker run -d -P --name test_sshd eg_sshd
$ docker port test_sshd 22
0.0.0.0:49154
आपके कंटेनर में Ssh:
$ ssh root@192.168.1.2 -p 49154
# The password is ``screencast``.
root@f38c87f2a42d:/#
स्रोत: https://docs.docker.com/engine/examples/running_ssh_service/#build-an-eg_sshd-image
ssh root@localhost -p <ssh_host_port>
निर्देशों का