(2020/09/25) La partie dépannage a été séparée dans les articles suivants. Impossible de se connecter à la VM avec le conteneur Docker connectable SSH
J'ai été un peu intéressé par Docker ces derniers temps, mais je n'ai pas eu la chance d'entrer en contact avec Docker au travail jusqu'à présent, j'ai donc décidé d'étudier par moi-même. Les enseignants et les ancêtres de Google présenteront de nombreux articles à construire autour de CentOS 7, mais puisque CentOS 8 est sorti depuis un certain temps (assez?), C'est un nouveau, donc c'est un processus d'essais et d'erreurs. Jouons un peu avec les connaissances. [^ 1] Cette fois, l'objectif est de créer un conteneur qui autorise la connexion SSH et autorise l'accès SSH de l'hôte au conteneur.
[^ 1]: CentOS 8 semble être livré en standard avec un système compatible Docker appelé Podman, vous n'aurez donc peut-être pas besoin d'utiliser Docker.
--Windows10 Home (1909) (hôte)
Il peut être facile à installer par défaut, mais pour le moment, j'ai décidé d'essayer jusqu'où il peut être construit avec Minimal (configuration minimale). CentOS 8 utilise une image en taille réelle, et il y a un endroit pour sélectionner la configuration lors de l'installation, alors sélectionnez-y la configuration minimale. La procédure de construction avec VirtualBox est omise. J'ai évoqué les articles suivants.
Référence: Build CentOS8 dans l'environnement Virtualbox Référence: CentOS8 à première vue
Après avoir installé le système d'exploitation, apportez-le de TeraTerm côté hôte vers un endroit où la connexion SSH est possible.
Tout d'abord, définissez la redirection de port côté VirtualBox. Ce serait bien si l'accès SSH était possible, mais avec l'image ci-dessous, j'aimerais pouvoir accéder à la VM invitée en spécifiant le port 2222 et le conteneur en spécifiant le port 22222 lors de la connexion.
Hôte --- Invité --- Conteneur 2222 ----- 22 22222 --- 2222 --- 22
Par conséquent, dans VirtualBox, définissez pour associer 2222 et 22 et 22222 et 2222. L'association entre la VM invité n ° 2222 et le conteneur n ° 22 sera effectuée ultérieurement dans les paramètres liés à Docker.
Passez aux paramètres du côté de la VM invitée. Tout d'abord, configurez le pare-feu pour autoriser les connexions SSH.
# firewall-cmd --add-service=ssh --permanent
# firewall-cmd --reload
Activez l'interface réseau.
# nmcli connection up enp0s3
# nmcli connection modify enp0s3 connection.autoconnect yes
# nmcli connection show enp0s3
Désactivez SELinux et redémarrez.
# vi /etc/selinux/config
SELINUX=disabled
# reboot
Vous pouvez maintenant utiliser SSH du TeraTerm hôte vers la VM invitée. Lors de la connexion, spécifiez l'adresse IP du nom d'hôte (192.168.11.4 dans notre environnement) et spécifiez le port comme défini pour la redirection de port dans Virtual Box (2222 cette fois).
~~ Cette fois, je vais l'essayer en supposant qu'il sera construit dans un environnement hors ligne. ~~ </ font> Je pensais le construire dans un environnement hors ligne jusqu'au milieu du processus, mais j'ai fini par travailler dans un environnement en ligne car la communication externe était absolument nécessaire lors du démarrage du conteneur Docker dans cette dernière étape. Par conséquent, veuillez me pardonner si je prends des mesures inutiles pour le mode hors connexion vers le milieu. (Peut-être que toutes les étapes sont réécrites en ligne)
L'article suivant a été utile pour la procédure d'installation hors ligne.
Tout d'abord, téléchargez les documents nécessaires du côté hôte.
Docker 19.03.8 https://download.docker.com/linux/static/stable/x86_64/docker-19.03.8.tgz Docker Compose 1.25.4 https://github.com/docker/compose/releases/download/1.25.4/docker-compose-Linux-x86_64
Envoyez les matériaux à la machine virtuelle invitée avec WinSCP, etc.
$ tar zxvf docker-19.03.8.tgz
-bash: tar:Commande non trouvée
…… Je vois, il n'y a pas de commande tar
dans l'installation de configuration minimale.
Tout en me demandant pourquoi tar
n'est pas inclus, j'ai introduit la commande et essayé à nouveau.
Référence: Liste des choses ridicules après l'installation de CentOS8 (minimum)
$ sudo yum install tar
$ tar zxvf docker-19.03.8.tgz
Étant donné que le matériel téléchargé lui-même est un fichier exécutable pour Docker Compose, vous pouvez le renommer, le placer dans une position prédéterminée et le rendre exécutable.
$ sudo mv docker-compose-Linux-x86_64 /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
$ sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
A partir de maintenant, il est gênant d'ajouter sudo
et de taper la commande docker
, alors donnez la permission.
$ sudo usermod -aG docker $USER
Créez Dockerfile
et docker-compose.yml
dans le répertoire personnel de la VM invitée pour exécuter ssh
dans le conteneur.
Alpine Linux, un système d'exploitation léger, est utilisé pour le fichier image du conteneur.
Pour la méthode de création de «ssh» résident dans le conteneur, reportez-vous à l'article suivant.
Référence: SSH sans systemd dans le conteneur Docker
Dockerfile
FROM alpine
#Présentation de ssh et autres
RUN set -x && apk update && apk upgrade \
&& apk add --no-cache openssh openrc \
&& apk add --no-cache bash \
&& apk add --update busybox-suid
RUN rc-update add sshd && rc-status
RUN mkdir -p /run/openrc/ && touch /run/openrc/softlevel
#paramètres sshd
RUN sed -i 's/^AllowTcpForwarding no/AllowTcpForwarding yes/g' /etc/ssh/sshd_config
RUN sed -i 's/^#PermitRootLogin prohibit-password/PermitRootLogin yes/g' /etc/ssh/sshd_config
#Créé par des utilisateurs généraux
RUN adduser -D test
#Réglage du mot de passe
RUN echo 'root:root' | chpasswd
RUN echo "test:test" | chpasswd
#Masquer la bannière lors de la connexion
RUN echo "" > /etc/motd
#Démarrez sshd et laissez-le tel quel
CMD /etc/init.d/sshd start && tail -f /dev/null
docker-compose.yml
version: '3.8'
services:
test:
build: .
container_name: test
hostname: test
ports:
- "2222:22" #Paramètre pour associer la machine virtuelle invitée au port de conteneur
tty: true
Après avoir créé le fichier ci-dessus, démarrez enfin le conteneur.
[centos@dockertest ~]$ docker-compose build
[centos@dockertest ~]$ docker-compose up -d
Lorsque le conteneur démarre, essayez d'accéder au conteneur avec SSH depuis l'hôte.
test:~$
Avec ce qui précède, j'ai pensé que j'étais capable de créer un conteneur Docker avec un accès SSH.
(Suite à Occurrence du problème)
En tâtonnant, j'ai pu exécuter un conteneur Docker qui peut être connecté à SSH pour le moment.
Même ainsi, j'ai été surpris que CentOS 8 de Minimal n'inclue pas tar
. Comment at-il été décidé que ce n'était pas nécessaire?