Saya ingin membuat aliran infrastruktur berikut:
Bagaimana itu bisa dicapai dengan menggunakan Docker?
Saya ingin membuat aliran infrastruktur berikut:
Bagaimana itu bisa dicapai dengan menggunakan Docker?
Jawaban:
Pertama, Anda perlu menginstal server SSH di gambar yang ingin Anda ssh-in. Anda dapat menggunakan gambar dasar untuk semua penampung Anda dengan server ssh terpasang. Kemudian Anda hanya perlu menjalankan setiap kontainer yang memetakan port ssh (default 22) ke satu port host (Server Jarak Jauh di gambar Anda), menggunakan -p <hostPort>:<containerPort>
. yaitu:
docker run -p 52022:22 container1
docker run -p 53022:22 container2
Kemudian, jika port 52022 dan 53022 host dapat diakses dari luar, Anda dapat langsung ssh ke container menggunakan ip host (Server Jarak Jauh) yang menentukan port di ssh dengan -p <port>
. Yaitu:
ssh -p 52022 myuser@RemoteServer
-> SSH ke container1
ssh -p 53022 myuser@RemoteServer
-> SSH ke container2
Perhatian : jawaban ini mempromosikan alat yang saya tulis.
Jawaban yang dipilih di sini menyarankan untuk menginstal server SSH ke setiap gambar. Secara konseptual, ini bukanlah pendekatan yang tepat ( https://docs.docker.com/articles/dockerfile_best-practices/ ).
Saya telah membuat server SSH dalam container yang dapat Anda 'tempel' ke container apa pun yang sedang berjalan. Dengan cara ini Anda dapat membuat komposisi dengan setiap penampung. Satu-satunya persyaratan adalah wadah tersebut memiliki bash.
Contoh berikut akan memulai server SSH yang diekspos pada port 2222 mesin lokal.
$ 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
Untuk petunjuk dan dokumentasi lebih lanjut, lihat: https://github.com/jeroenpeeters/docker-ssh
Ini tidak hanya mengalahkan gagasan satu proses per kontainer, ini juga merupakan pendekatan yang rumit saat menggunakan gambar dari Docker Hub karena mereka sering tidak (dan seharusnya) tidak berisi server SSH.
File-file ini akan berhasil membuka sshd dan menjalankan layanan sehingga Anda dapat melakukan ssh secara lokal. (Anda menggunakan cyberduck bukan?)
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
untuk membangun / menjalankan mulai daemon / melompat ke shell.
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
Saya kira itu mungkin. Anda hanya perlu menginstal server SSH di setiap penampung dan mengekspos porta pada host. Gangguan utama akan mempertahankan / mengingat pemetaan port to container.
Namun, saya harus mempertanyakan mengapa Anda ingin melakukan ini. SSH'ng ke dalam container seharusnya cukup langka sehingga tidak merepotkan untuk melakukan ssh ke host kemudian gunakan docker exec untuk masuk ke dalam container.
Buat gambar buruh pelabuhan dengan openssh-server
prainstal:
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"]
Bangun gambar menggunakan:
$ docker build -t eg_sshd .
Jalankan test_sshd
wadah:
$ docker run -d -P --name test_sshd eg_sshd
$ docker port test_sshd 22
0.0.0.0:49154
Ssh ke penampung Anda:
$ ssh root@192.168.1.2 -p 49154
# The password is ``screencast``.
root@f38c87f2a42d:/#
Sumber: https://docs.docker.com/engine/examples/running_ssh_service/#build-an-eg_sshd-image
ssh root@localhost -p <ssh_host_port>
mengikuti petunjuk di sini