Tôi muốn tạo luồng cơ sở hạ tầng sau:
Làm thế nào để đạt được điều đó bằng Docker?
Tôi muốn tạo luồng cơ sở hạ tầng sau:
Làm thế nào để đạt được điều đó bằng Docker?
Câu trả lời:
Trước tiên, bạn cần cài đặt một máy chủ SSH trong các hình ảnh mà bạn muốn chuyển vào. Bạn có thể sử dụng hình ảnh cơ sở cho tất cả vùng chứa của mình khi đã cài đặt máy chủ ssh. Sau đó, bạn chỉ phải chạy từng vùng chứa ánh xạ cổng ssh (mặc định là 22) đến một cổng của máy chủ lưu trữ (Máy chủ từ xa trong hình ảnh của bạn), bằng cách sử dụng -p <hostPort>:<containerPort>
. I E:
docker run -p 52022:22 container1
docker run -p 53022:22 container2
Sau đó, nếu cổng 52022 và 53022 của máy chủ lưu trữ có thể truy cập từ bên ngoài, bạn có thể trực tiếp ssh đến các vùng chứa bằng cách sử dụng ip của máy chủ lưu trữ (Máy chủ từ xa) chỉ định cổng trong ssh với -p <port>
. I E:
ssh -p 52022 myuser@RemoteServer
-> SSH đến container1
ssh -p 53022 myuser@RemoteServer
-> SSH đến container2
Lưu ý : câu trả lời này quảng cáo một công cụ tôi đã viết.
Câu trả lời được chọn ở đây đề nghị cài đặt máy chủ SSH vào mọi hình ảnh. Về mặt khái niệm, đây không phải là cách tiếp cận đúng ( https://docs.docker.com/articles/dockerfile_best-practices/ ).
Tôi đã tạo một máy chủ SSH được chứa trong vùng chứa mà bạn có thể 'dính' vào bất kỳ vùng chứa nào đang chạy. Bằng cách này, bạn có thể tạo các tác phẩm với mọi vùng chứa. Yêu cầu duy nhất là vùng chứa có bash.
Ví dụ sau sẽ khởi động một máy chủ SSH được hiển thị trên cổng 2222 của máy cục bộ.
$ 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
Để biết thêm các gợi ý và tài liệu, hãy xem: https://github.com/jeroenpeeters/docker-ssh
Điều này không chỉ đánh bại ý tưởng về một quy trình trên mỗi vùng chứa mà còn là một cách tiếp cận rườm rà khi sử dụng hình ảnh từ Docker Hub vì chúng thường không (và không nên) chứa máy chủ SSH.
Các tệp này sẽ mở thành công sshd và chạy dịch vụ để bạn có thể ssh trong cục bộ. (bạn đang sử dụng cyberduck phải không?)
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
để xây dựng / chạy bắt đầu daemon / nhảy vào trình bao.
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
Tôi đoán nó là có thể. Bạn chỉ cần cài đặt một máy chủ SSH trong mỗi vùng chứa và hiển thị một cổng trên máy chủ. Sự khó chịu chính sẽ là duy trì / ghi nhớ ánh xạ từ cảng đến container.
Tuy nhiên, tôi phải đặt câu hỏi tại sao bạn muốn làm điều này. SSH vào vùng chứa phải đủ hiếm để không gặp rắc rối khi ssh vào máy chủ sau đó sử dụng trình điều khiển docker để vào vùng chứa.
Tạo hình ảnh docker với openssh-server
cài đặt sẵn:
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"]
Xây dựng hình ảnh bằng cách sử dụng:
$ docker build -t eg_sshd .
Chạy một vùng test_sshd
chứa:
$ docker run -d -P --name test_sshd eg_sshd
$ docker port test_sshd 22
0.0.0.0:49154
Ssh vào vùng chứa của bạn:
$ ssh root@192.168.1.2 -p 49154
# The password is ``screencast``.
root@f38c87f2a42d:/#
Nguồn: https://docs.docker.com/engine/examples/running_ssh_service/#build-an-eg_sshd-image
ssh root@localhost -p <ssh_host_port>
theo hướng dẫn tại đây