Erstellen wir einen Docker-Container, der SSH auf die Mindestkonfiguration von CentOS 8 ausführen kann

(2020/09/25) Der Teil zur Fehlerbehebung wurde in die folgenden Artikel unterteilt. Verbindung mit VM mit anschließbarem SSH-Docker-Container nicht möglich

Überblick

Ich habe mich in letzter Zeit ein wenig für Docker interessiert, aber ich hatte bisher noch keine Gelegenheit, mit Docker bei der Arbeit in Kontakt zu treten. Deshalb habe ich beschlossen, alleine zu studieren. Google-Lehrer und Vorfahren werden viele Artikel vorstellen, die sich mit CentOS 7 befassen. Da CentOS 8 jedoch schon eine Weile veröffentlicht wurde (ziemlich?), Ist es ein neues, also ein Versuch und Irrtum. Lass uns ein wenig mit dem Wissen spielen. [^ 1] Dieses Mal besteht das Ziel darin, einen Container zu erstellen, der eine SSH-Verbindung und einen SSH-Zugriff vom Host auf den Container ermöglicht.

[^ 1]: CentOS 8 scheint standardmäßig mit einem Docker-kompatiblen System namens Podman ausgestattet zu sein, sodass Sie Docker möglicherweise nicht verwenden müssen.

Umgebung

Verfahren

VM-Start

Es mag standardmäßig einfach zu installieren sein, aber vorerst habe ich mich entschlossen zu versuchen, wie weit es mit Minimal (Mindestkonfiguration) gebaut werden kann. CentOS 8 verwendet ein Image in voller Größe. Hier können Sie die Konfiguration während der Installation auswählen. Wählen Sie dort die Mindestkonfiguration aus. Das Verfahren zum Erstellen mit VirtualBox entfällt. Ich habe auf die folgenden Artikel verwiesen.

Referenz: CentOS8 in Virtualbox-Umgebung erstellen Referenz: CentOS8 auf den ersten Blick

Einstellungen für die SSH-Verbindung

Bringen Sie das Betriebssystem nach der Installation von TeraTerm auf der Hostseite an einen Ort, an dem eine SSH-Verbindung möglich ist.

Stellen Sie zunächst die Portweiterleitung auf der VirtualBox-Seite ein. Es wäre schön, wenn ein SSH-Zugriff möglich wäre, aber mit dem folgenden Bild möchte ich in der Lage sein, auf die Gast-VM zuzugreifen, indem Port 2222 angegeben wird, und auf den Container, indem Port 22222 angegeben wird, wenn eine Verbindung hergestellt wird.

Gastgeber --- Gast --- Container 2222 ----- 22 22222 --- 2222 --- 22

Stellen Sie daher in VirtualBox die Zuordnung von 2222 und 22 sowie 22222 und 2222 ein. Die Zuordnung zwischen der Gast-VM Nr. 2222 und dem Container Nr. 22 wird später in den Docker-bezogenen Einstellungen durchgeführt. キャプチャ.PNG

Wechseln Sie zu den Einstellungen auf der Seite der Gast-VM. Stellen Sie zunächst die Firewall so ein, dass SSH-Verbindungen zugelassen werden.

# firewall-cmd --add-service=ssh --permanent
# firewall-cmd --reload

Netzwerkschnittstelle aktivieren.

# nmcli connection up enp0s3
# nmcli connection modify enp0s3 connection.autoconnect yes
# nmcli connection show enp0s3

Deaktivieren Sie SELinux und starten Sie neu.

# vi /etc/selinux/config
SELINUX=disabled
# reboot

Jetzt können Sie SSH vom Host TeraTerm zur Gast-VM ausführen. Geben Sie beim Herstellen der Verbindung die IP-Adresse für den Hostnamen an (192.168.11.4 in unserer Umgebung) und geben Sie den Port an, der für die Portweiterleitung in Virtual Box festgelegt wurde (diesmal 2222).

Docker eingeführt

~~ Dieses Mal werde ich es unter der Annahme versuchen, dass es in einer Offline-Umgebung erstellt wird. ~~ </ font> Ich dachte daran, es bis zur Mitte des Prozesses in einer Offline-Umgebung zu erstellen, arbeitete jedoch in einer Online-Umgebung, da beim Starten des Docker-Containers in der letzten Phase eine externe Kommunikation unbedingt erforderlich war. Bitte verzeihen Sie mir deshalb, obwohl ich unnötige Schritte unternehme, um offline in die Mitte zu gelangen. (Möglicherweise werden alle Schritte online neu geschrieben.)

Der folgende Artikel war hilfreich für die Offline-Installation.

Referenz: Docker-Umgebungskonstruktion - Überlegungen zur Verwendung in einer Offline-Umgebung-

Laden Sie zunächst die erforderlichen Materialien auf die Hostseite herunter.

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

Senden Sie Materialien mit WinSCP usw. an die Gast-VM und stellen Sie sie mit dem folgenden Befehl bereit.

$ tar zxvf docker-19.03.8.tgz
-bash: tar:Befehl nicht gefunden

Ich sehe, es gibt keinen "tar" -Befehl in der Mindestkonfigurationsinstallation. Während ich mich fragte, warum tar nicht enthalten ist, führte ich den Befehl ein und versuchte es erneut.

Referenz: Liste der lächerlichen Dinge nach der Installation von CentOS8 (Minimum)

$ sudo yum install tar
$ tar zxvf docker-19.03.8.tgz

Da das Download-Material selbst eine ausführbare Datei für Docker Compose ist, können Sie es umbenennen, an einer vorgegebenen Position ablegen und ausführbar machen.

$ 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

Von nun an ist es mühsam, "sudo" hinzuzufügen und den Befehl "docker" einzugeben. Geben Sie daher die Erlaubnis.

$ sudo usermod -aG docker $USER

Container-Start

Erstellen Sie "Dockerfile" und "docker-compose.yml" im Home-Verzeichnis der Gast-VM, um "ssh" im Container auszuführen. Alpine Linux, ein leichtes Betriebssystem, wird für die Image-Datei des Containers verwendet. Informationen zur Methode, mit der "ssh" im Container gespeichert wird, finden Sie im folgenden Artikel.

Referenz: SSH ohne systemd im Docker-Container

Dockerfile


FROM alpine

#Einführung von ssh und anderen
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

#sshd Einstellungen
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

#Erstellt von allgemeinen Benutzern
RUN adduser -D test

#Passworteinstellung
RUN echo 'root:root' | chpasswd
RUN echo "test:test" | chpasswd

#Banner beim Anmelden ausblenden
RUN echo "" > /etc/motd

#Starten Sie sshd und lassen Sie es so wie es ist
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" #Einstellung zum Zuordnen der Gast-VM zum Container-Port
    tty: true

Starten Sie nach dem Erstellen der obigen Datei schließlich den Container.

[centos@dockertest ~]$ docker-compose build
[centos@dockertest ~]$ docker-compose up -d

Versuchen Sie beim Starten des Containers, vom Host aus mit SSH auf den Container zuzugreifen.

test:~$

Mit dem oben Gesagten dachte ich, dass ich einen Docker-Container mit SSH-Zugriff erstellen könnte.

(Fortsetzung von Problemvorkommen)

Zusammenfassung

Während ich tastete, konnte ich einen Docker-Container ausführen, der vorerst mit SSH verbunden werden kann. Trotzdem war ich überrascht, dass Minimals CentOS 8 kein "Teer" enthält. Wie wurde entschieden, dass es unnötig war?

Recommended Posts

Erstellen wir einen Docker-Container, der SSH auf die Mindestkonfiguration von CentOS 8 ausführen kann
Ich kann keine Verbindung mehr zu einer VM mit einem Docker-Container herstellen, der eine Verbindung über SSH herstellen kann
Erstellen Sie in CentOS8.2 einen privaten / öffentlichen Schlüssel und stellen Sie mit VS Code eine Verbindung zu SSH her
[Memo] Erstellen Sie mit Docker ganz einfach eine CentOS 8-Umgebung
So lösen Sie, wenn Sie mit einem neuen Container keine Verbindung zur Datenbank herstellen können, weil der Port dem vorhandenen Docker-Container zugewiesen ist
Erstellen Sie eine gcloud-Entwicklungsumgebung auf einem centos8-Container
Erstellen Sie einen Docker-Container, um EPS in eine PGF-Quelle zu konvertieren
[Docker] So sehen Sie den Inhalt von Volumes. Starten Sie einen Container mit Root-Rechten.
So erstellen Sie einen Jenkins-Server mit einem Docker-Container unter CentOS 7 von VirtualBox und greifen von einem lokalen PC auf den Jenkins-Server zu
Die Geschichte, wie ein Docker-Container mit GitHub-Aktionen in die GitHub-Paketregistrierung und den Docker-Hub verschoben wird
Erstellen Sie ein Seitensteuerelement, das mit RecyclerView verwendet werden kann
Erstellen Sie ein Docker-Image mit installiertem Oracle JDK (yum
[Docker] Löschen Sie nur das Volume, das einem bestimmten Container zugeordnet ist
Ich habe versucht, mit Docker eine Padrino-Entwicklungsumgebung zu erstellen
Mechanismus zum Konvertieren in eine Sprache, die der Browser erkennen kann
Erstellen Sie mit Docker eine Vue3-Umgebung!
Die Geschichte, ein Projekt zu bauen, das Maven mit Ant gebaut hat
Befehlszeile, mit der Sie eine Verzeichnisstruktur zum Erstellen einer Laravel-Umgebung mit Docker auf einmal erstellen können
Übertragen Sie das von Docker Hub verteilte Docker-Image in die Google Container-Registrierung und starten Sie die VM basierend auf diesem Image
So interagieren Sie mit einem Server, der die App nicht zum Absturz bringt
Lassen Sie uns Docker unter Windows 10 installieren und eine Überprüfungsumgebung für CentOS 8 erstellen!
[Rails] "Pry-Rails", die beim Speichern mit der create-Methode verwendet werden können
Erstellen Sie einen einfachen Gateway-Server, indem Sie die Maskerade mit der Firewall-cmd von CentOS8 festlegen
Mindestkonfigurationsbeispiel für die automatische Freigabe von Lambda durch Java mit Code-Pipeline
So starten Sie einen Docker-Container mit einem in einer Batchdatei bereitgestellten Volume
Ich habe versucht, ein Portfolio mit AWS, Docker, CircleCI, Laravel [mit Referenzlink] zu erstellen.
[Android] Ich möchte einen ViewPager erstellen, der für Tutorials verwendet werden kann
Erstellen wir eine Taschenrechner-App mit Java ~ Erstellen Sie einen Anzeigebereich im Fenster
Anzeigen der vom Docker-Container verwendeten Festplattenmenge für jeden Container
Bis zum Start eines Docker-Containers, der mit RedHat Quarkus erstellt wurde
Ich war süchtig danach, vom Docker-Container aus keine Verbindung zu AWS-S3 herstellen zu können
Erstellen Sie eine Entwicklungsumgebung, um Ruby on Jets + React-Apps mit Docker zu erstellen
[Teil 1] Erstellen eines Docker-Containers, der mit Apache / Pandoc Markdown in HTML liefert
Punktnotiz beim Erstellen eines Docker-Containers, der von einem Kollegen erstellt wurde
Speichern Sie die Daten, die von JavaFX gelesen werden können, als PNG