Créons un conteneur Docker qui peut SSH à la configuration minimale de CentOS 8

(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

Aperçu

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.

environnement

--Windows10 Home (1909) (hôte)

procédure

Démarrage de la VM

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

Paramètres liés à la connexion SSH

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. キャプチャ.PNG

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).

Introduction de Docker

~~ 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.

Référence: Construction de l'environnement Docker - réflexion sur la façon de l'utiliser dans un environnement 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

Démarrage du conteneur

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)

Sommaire

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?

Recommended Posts

Créons un conteneur Docker qui peut SSH à la configuration minimale de CentOS 8
Je ne peux plus me connecter à une VM avec un conteneur Docker pouvant se connecter via SSH
Créez une clé privée / clé publique dans CentOS8.2 et connectez-vous à SSH avec VS Code
[Memo] Créez facilement un environnement CentOS 8 avec Docker
Solution lorsque la connexion à la base de données n'est pas possible avec un nouveau conteneur car le port est affecté au conteneur docker existant
Créer un environnement de développement gcloud sur un conteneur centos8
Créer un conteneur Docker pour convertir EPS en source PGF
[Docker] Comment voir le contenu des volumes. Démarrez un conteneur avec les privilèges root.
Comment créer un serveur Jenkins avec un conteneur Docker sur CentOS 7 de VirtualBox et accéder au serveur Jenkins à partir d'un PC local
L'histoire du transfert d'un conteneur Docker vers le registre de packages GitHub et Docker Hub avec des actions GitHub
Créer un contrôle de page qui peut être utilisé avec RecyclerView
Créez une image Docker avec le JDK Oracle installé (miam
[Docker] Supprimer uniquement le volume associé à un conteneur spécifique
J'ai essayé de créer un environnement de développement padrino avec Docker
Mécanisme de conversion vers une langue que le navigateur peut reconnaître
Créez un environnement Vue3 avec Docker!
L'histoire de rendre possible la construction d'un projet qui a été construit par Maven avec Ant
Ligne de commande qui vous permet de créer une structure de répertoires pour créer un environnement Laravel avec Docker en une seule fois
Poussez l'image Docker distribuée par Docker Hub vers Google Container Registry et démarrez la VM en fonction de cette image
Comment interagir avec un serveur qui ne plante pas l'application
Installons Docker sur Windows 10 et créons un environnement de vérification pour CentOS 8!
[Rails] "Pry-rails" qui peuvent être utilisés lors de l'enregistrement avec la méthode create
Créez un serveur de passerelle simple en définissant masquerade avec firewall-cmd de CentOS8
Exemple de configuration minimale pour publier automatiquement Lambda par Java avec un pipeline de code
Comment démarrer un conteneur Docker avec un volume monté dans un fichier de commandes
J'ai essayé de créer un portefeuille avec AWS, Docker, CircleCI, Laravel [avec lien de référence]
[Android] Je souhaite créer un ViewPager pouvant être utilisé pour les didacticiels
Faisons une application de calculatrice avec Java ~ Créez une zone d'affichage dans la fenêtre
Comment afficher la quantité de disque utilisée par le conteneur Docker pour chaque conteneur
Jusqu'au lancement d'un conteneur Docker construit avec RedHat Quarkus
J'étais accro à ne pas pouvoir me connecter à AWS-S3 à partir du conteneur Docker
Créez un environnement de développement pour créer des applications Ruby on Jets + React avec Docker
[Partie 1] Création d'un conteneur Docker qui fournit Markdown en HTML avec Apache / Pandoc
Mémo ponctuel lors de la création d'un conteneur Docker créé par un collègue
Essayez d'enregistrer les données pouvant être lues par JavaFX au format PNG