(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
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.
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
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.
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).
~~ 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
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)
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?