Je souhaite créer le flux d'infrastructure suivant:
Comment cela peut-il être réalisé avec Docker?
Je souhaite créer le flux d'infrastructure suivant:
Comment cela peut-il être réalisé avec Docker?
Réponses:
Tout d'abord, vous devez installer un serveur SSH dans les images dans lesquelles vous souhaitez ssh-into. Vous pouvez utiliser une image de base pour tous vos conteneurs avec le serveur ssh installé. Ensuite, il vous suffit d'exécuter chaque conteneur mappant le port ssh (par défaut 22) à l'un des ports de l'hôte (serveur distant dans votre image), en utilisant -p <hostPort>:<containerPort>
. c'est à dire:
docker run -p 52022:22 container1
docker run -p 53022:22 container2
Ensuite, si les ports 52022 et 53022 de l'hôte sont accessibles de l'extérieur, vous pouvez directement ssh vers les conteneurs en utilisant l'adresse IP de l'hôte (serveur distant) en spécifiant le port dans ssh avec -p <port>
. C'est à dire:
ssh -p 52022 myuser@RemoteServer
-> SSH vers container1
ssh -p 53022 myuser@RemoteServer
-> SSH vers container2
Remarque : cette réponse fait la promotion d'un outil que j'ai écrit.
La réponse sélectionnée ici suggère d'installer un serveur SSH dans chaque image. Conceptuellement, ce n'est pas la bonne approche ( https://docs.docker.com/articles/dockerfile_best-practices/ ).
J'ai créé un serveur SSH conteneurisé que vous pouvez «coller» à n'importe quel conteneur en cours d'exécution. De cette façon, vous pouvez créer des compositions avec chaque conteneur. La seule exigence est que le conteneur ait bash.
L'exemple suivant démarrerait un serveur SSH exposé sur le port 2222 de la machine locale.
$ 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
Pour plus de pointeurs et de documentation, voir: https://github.com/jeroenpeeters/docker-ssh
Non seulement cela va à l'encontre de l'idée d'un processus par conteneur, mais c'est également une approche lourde lors de l'utilisation d'images du Docker Hub car elles ne contiennent souvent pas (et ne devraient pas) contenir de serveur SSH.
Ces fichiers ouvriront avec succès sshd et exécuteront le service afin que vous puissiez ssh localement. (vous utilisez cyberduck n'est-ce pas?)
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
pour construire / exécuter le démon de démarrage / sauter dans le 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
Je suppose que c'est possible. Il vous suffit d'installer un serveur SSH dans chaque conteneur et d'exposer un port sur l'hôte. Le principal inconvénient serait de maintenir / se souvenir de la cartographie du port au conteneur.
Cependant, je dois me demander pourquoi vous voudriez faire cela. SSH'ng dans les conteneurs devrait être suffisamment rare pour que ce ne soit pas un problème de ssh vers l'hôte, puis d'utiliser docker exec pour entrer dans le conteneur.
Créer une image docker avec openssh-server
préinstallé:
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"]
Construisez l'image en utilisant:
$ docker build -t eg_sshd .
Exécutez un test_sshd
conteneur:
$ docker run -d -P --name test_sshd eg_sshd
$ docker port test_sshd 22
0.0.0.0:49154
Ssh dans votre conteneur:
$ ssh root@192.168.1.2 -p 49154
# The password is ``screencast``.
root@f38c87f2a42d:/#
Source: https://docs.docker.com/engine/examples/running_ssh_service/#build-an-eg_sshd-image
ssh root@localhost -p <ssh_host_port>
suivre les instructions ici