Implementierung eines Crawler-Scrapy-Image, das von Dockerfile basierend auf Alpine erstellt wurde

Implementierung eines Crawler-Scrapy-Image, das von Dockerfile basierend auf Alpine erstellt wurde

1. Laden Sie das Alpenbild herunter

[root@DockerBrian ~]# docker pull alpine
Standard-Tag verwenden: latest
Es wird versucht, das Repository docker.io/library/alpine abzurufen ...
aktuell: Abrufen von docker.io/library/alpine
4fe2ade4980c: Ziehen abgeschlossen
Digest: sha256:621c2f39f8133acb8e64023a94dbdf0d5ca81896102b9e57c0dc184cadaf5528
Status: Neueres Image für docker.io/alpine:latest heruntergeladen
[root@docker43 ~]# Docker-Bilder
REPOSITORY TAG BILD ID ERSTELLT GRÖSSE
docker.io/alpine-latest 196d12cf6ab1 vor 3 Wochen 4,41 MB

2. Dockerfile schreiben

Erstellen Sie ein Scrapy-Verzeichnis zum Speichern der Dockerfile-Datei

[root@DockerBrian ~]# mkdir /opt/alpineDockerfile/
[root@DockerBrian ~]# cd /opt/alpineDockerfile/
[root@DockerBrian alpineDockerfile]# mkdir scrapy && cd scrapy && touch Dockerfile
[root@DockerBrian alpineDockerfile]# cd scrapy/
[root@DockerBrian scrapy]# ll
Gesamtdosis 4
-rw-r--r-- 1 root root 1394 10. Okt. 11:36 Dockerfile

Schreiben einer Docker-Datei

# Geben Sie das erstellte Basis-Image von Alpine an
 
# Informationen zur Autorenbeschreibung MAINTAINER alpine_python3_scrapy ([email protected])
 
# Ersetzen Sie die Alibaba Cloud-Quelle RUN echo "http://mirrors.aliyun.com/alpine/latest-stable/main/" > /etc/apk/repositories && \
  echo "http://mirrors.aliyun.com/alpine/latest-stable/community/" >> /etc/apk/repositories
 
# Zeit synchronisieren # Quelle aktualisieren, OpenSSH installieren, Konfigurationsdatei ändern, Schlüssel generieren und Zeit synchronisieren RUN apk update && \
  apk add --no-cache openssh-server tzdata && \
  cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
  sed -i "s/#PermitRootLogin.*/PermitRootLogin yes/g" /etc/ssh/sshd_config && \
  ssh-keygen -t rsa -P "" -f /etc/ssh/ssh_host_rsa_key && \
  ssh-keygen -t ecdsa -P "" -f /etc/ssh/ssh_host_ecdsa_key && \
  ssh-keygen -t ed25519 -P "" -f /etc/ssh/ssh_host_ed25519_key && \
  echo "root:h056zHJLg85oW5xh7VtSa" | chpasswd
 
# Scrapy-Abhängigkeitspakete installieren (erforderliche Abhängigkeiten)
RUN apk add --no-cache python3 python3-dev gcc openssl-dev openssl libressl libc-dev linux-headers libffi-dev libxml2-dev libxml2 libxslt-dev openssh-client openssh-sftp-server
 
# Die Installationsumgebung erfordert Pip-Pakete (Pakete können hier nach Bedarf hinzugefügt oder gelöscht werden)
RUN pip3 install --default-timeout=100 --no-cache-dir --upgrade pip setuptools pymysql pymongo redis scrapy-redis ipython Scrapy-Anfragen
 
# Starten Sie das SSH-Skript RUN echo "/usr/sbin/sshd -D" >> /etc/start.sh && \
  chmod +x /etc/start.sh
 
# Port 22 öffnen EXPOSE 22
 
# Führen Sie den SSH-Startbefehl CMD ["/bin/sh","/etc/start.sh"] aus. 

Der Container kann über SSH remote auf in der Python3-Umgebung installiertes Scrapy zugreifen und den SSH-Dienst über das Skript start.sh starten.

3. Erstellen Sie ein Bild

Erstellen eines Images

[root@DockerBrian scrapy]# docker build -t scrapy_redis_ssh:v1 . 

Spiegel anzeigen

[root@DockerBrian scrapy]# Docker-Bilder
REPOSITORY TAG BILD ID ERSTELLT GRÖSSE
scrapy_redis_ssh v1 b2c95ef95fb9 vor 4 Stunden 282 MB
docker.io/alpine-latest 196d12cf6ab1 vor 4 Wochen 4,41 MB

4. Erstellen Sie einen Container

Erstellen Sie einen Container (mit dem Namen scrapy10086, der Remote-Port wird dem Host-Port 10086 zugeordnet)

Kopieren Sie den Code wie folgt:
docker run -itd --restart=always --name scrapy10086 -p 10086:22 scrapy_redis_ssh:v1

Container anzeigen

[root@DockerBrian scrapy]# docker ps
CONTAINER ID BILD BEFEHL ERSTELLT STATUS PORTS NAMEN
7fb9e69d79f5 b2c95ef95fb9 "/bin/sh /etc/star..." vor 3 Stunden Vor 3 Stunden 0.0.0.0:10086->22/tcp scrapy10086

Beim Container anmelden

[root@DockerBrian scrapy]# ssh [email protected] -p 10086 
Die Authentizität des Hosts '[127.0.0.1]:10086 ([127.0.0.1]:10086)' kann nicht festgestellt werden.
Der ECDSA-Schlüsselfingerabdruck ist SHA256:wC46AU6SLjHyEfQWX6d6ht9MdpGKodeMOK6/cONcpxk.
Der ECDSA-Schlüsselfingerabdruck lautet MD5:6a:b7:31:3c:63:02:ca:74:5b:d9:68:42:08:be:22:fc.
Möchten Sie die Verbindung wirklich fortsetzen (ja/nein)? ja
Warnung: „[127.0.0.1]:10086“ (ECDSA) wurde dauerhaft zur Liste der bekannten Hosts hinzugefügt.
[email protected]'s Passwort: # Das Passwort ist hier im Dockerfile echo "root:h056zHJLg85oW5xh7VtSa" | chpasswd definiert
Willkommen bei Alpine!
 
Das Alpine Wiki enthält eine große Anzahl von Anleitungen und allgemeinen
Informationen zur Administration von Alpine-Systemen.
Siehe <http://wiki.alpinelinux.org>.
 
Sie können das System mit dem Befehl einrichten: setup-alpine
 
Sie können diese Nachricht ändern, indem Sie /etc/motd bearbeiten.
 
7363738cc96a:~#

5. Testen

Erstellen Sie einen Scrapy-Projekttest

7363738cc96a:~# Scrapy Startprojekttest
Neues Scrapy-Projekt „Test“, unter Verwendung des Vorlagenverzeichnisses „/usr/lib/python3.6/site-packages/scrapy/templates/project“, erstellt in:
  /Wurzel/Test
 
Sie können Ihre erste Spinne wie folgt starten:
  CD-Test
  Scrapy Genspider Beispiel example.com
7363738cc96a:~# cd test/
7363738cc96a:~/test# ls
scrapy.cfg-Test
7363738cc96a:~/test# cd test/
7363738cc96a:~/test/test# ls
__init__.py __pycache__ items.py middlewares.py pipelines.py einstellungen.py spiders
7363738cc96a:~/test/test#

Testerfolg

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Problemlösungsvorgänge für Alpine Docker-Bildschriftarten
  • Implementierung eines Tomcat-Images, das mit Dockerfile basierend auf Alpine erstellt wurde
  • So erstellen Sie ein php-nginx-alpine-Image von Grund auf in Docker
  • Perfekte Lösung für das Zeitzonenproblem des Docker Alpine-Image

<<:  Vergleich von mydumper und mysqldump in MySQL

>>:  Einige Fallstricke beim JavaScript Deep Copy

Artikel empfehlen

Verzeichnisberechtigungen beim Erstellen eines Containers mit Docker

Als ich gestern ein Projekt schrieb, musste ich d...

Vue verwendet Canvas, um den Bildkomprimierungs-Upload zu realisieren

In diesem Artikel wird der spezifische Code von V...

MySQL-Datenbank-Entwicklungsspezifikationen [empfohlen]

Vor Kurzem haben wir SQL zur Optimierung online e...

So zeigen Sie Serverhardwareinformationen in Linux an

Hallo zusammen, heute ist Double 12, habt ihr sch...

So fragen Sie einen Datensatz in MySQL ab, auf welcher Seite der Paging-Seite

Vorwort In der Praxis kann es zu folgendem Proble...

Beispielcode von Vue + Element UI zur Realisierung der Player-Funktion

Die Anzeige ohne Effektbild ist nur leeres Gerede...

Detaillierte Einführung in Robots.txt

Grundlegende Einführung in robots.txt Robots.txt i...

Detaillierte Erklärung der Zeichensätze und Validierungsregeln in MySQL

1Mehrere gängige Zeichensätze Zu den gängigsten Z...