alpineをベースにdockerfileで作成したクローラーScrapyイメージの実装

alpineをベースにdockerfileで作成したクローラーScrapyイメージの実装

1.アルパインイメージをダウンロードする

[root@DockerBrian ~]# docker pull alpine
デフォルトタグの使用: 最新
リポジトリ docker.io/library/alpine をプルしようとしています...
最新: docker.io/library/alpine からプル
4fe2ade4980c: プル完了
ダイジェスト: sha256:621c2f39f8133acb8e64023a94dbdf0d5ca81896102b9e57c0dc184cadaf5528
ステータス: docker.io/alpine:latest の新しいイメージをダウンロードしました
[root@docker43 ~]# docker イメージ
リポジトリ タグ イメージ ID 作成 サイズ
docker.io/alpine-latest 196d12cf6ab1 3 週間前 4.41 MB

2. Dockerfileを書く

dockerfileファイルを保存するためのscrapyディレクトリを作成する

[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
総投与量 4
-rw-r--r-- 1 ルート ルート 1394 10月10日 11:36 Dockerfile

Dockerfileの作成

# 作成したベースイメージをFROM alpineで指定します
 
# 著者説明情報 MAINTAINER alpine_python3_scrapy (zhujingzhi@123.com)
 
# Alibaba Cloud ソースを置き換えます 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
 
# 時間を同期する # ソースを更新し、opensshをインストールし、設定ファイルを変更し、キーを生成して時間を同期する RUN apk update && \
  apk に --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 依存パッケージをインストールする (必要な依存関係)
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 を実行します。
 
# インストール環境には pip パッケージが必要です (ここでのパッケージは必要に応じて追加または削除できます)
pip3 install --default-timeout=100 --no-cache-dir --upgrade pip setuptools pymysql pymongo redis scrapy-redis ipython Scrapy リクエストを実行します。
 
# ssh スクリプトを起動します RUN echo "/usr/sbin/sshd -D" >> /etc/start.sh && \
  chmod +x /etc/start.sh
 
# ポート22を開く EXPOSE 22
 
# ssh起動コマンドCMD ["/bin/sh","/etc/start.sh"]を実行します 

コンテナはSSH経由でPython3環境にインストールされたScrapyにリモートアクセスし、start.shスクリプトを通じてSSHサービスを開始することができます。

3. イメージを作成する

画像を作成する

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

ミラーを見る

[root@DockerBrian scrapy]# docker イメージ
リポジトリ タグ イメージ ID 作成 サイズ
scrapy_redis_ssh v1 b2c95ef95fb9 4時間前 282 MB
docker.io/alpine-latest 196d12cf6ab1 4 週間前 4.41 MB

4. コンテナを作成する

コンテナを作成します(名前は scrapy10086、リモート ポートはホスト ポート 10086 にマップされます)。

次のようにコードをコピーします
docker run -itd --restart=always --name scrapy10086 -p 10086:22 scrapy_redis_ssh:v1

コンテナを表示

[root@DockerBrian scrapy]# docker ps
コンテナID イメージ コマンド 作成ステータス ポート名
7fb9e69d79f5 b2c95ef95fb9 "/bin/sh /etc/star..." 3 時間前 3 時間前 0.0.0.0:10086->22/tcp scrapy10086

コンテナにログイン

[root@DockerBrian scrapy]# ssh root@127.0.0.1 -p 10086 
ホスト '[127.0.0.1]:10086 ([127.0.0.1]:10086)' の信頼性を確立できません。
ECDSA キーのフィンガープリントは SHA256:wC46AU6SLjHyEfQWX6d6ht9MdpGKodeMOK6/cONcpxk です。
ECDSA キーのフィンガープリントは MD5:6a:b7:31:3c:63:02:ca:74:5b:d9:68:42:08:be:22:fc です。
本当に接続を続行しますか (はい/いいえ)? はい
警告: '[127.0.0.1]:10086' (ECDSA) が既知のホストのリストに永続的に追加されました。
root@127.0.0.1 のパスワード: # ここでのパスワードは dockerfile で定義されています echo "root:h056zHJLg85oW5xh7VtSa" | chpasswd
アルパインへようこそ!
 
Alpine Wikiには、大量のハウツーガイドや一般的な情報が掲載されています。
Alpine システムの管理に関する情報。
<http://wiki.alpinelinux.org> を参照してください。
 
次のコマンドでシステムをセットアップできます: setup-alpine
 
/etc/motd を編集することでこのメッセージを変更できます。
 
7363738cc96a:~#

5. テスト

スクレイピープロジェクトテストを作成する

7363738cc96a:~# スクレイピースタートプロジェクトテスト
テンプレート ディレクトリ '/usr/lib/python3.6/site-packages/scrapy/templates/project' を使用する新しい Scrapy プロジェクト 'test' が次の場所に作成されました:
  /ルート/テスト
 
最初のスパイダーは次のように開始できます。
  CDテスト
  scrapy genspider の例 example.com
7363738cc96a:~# cd テスト/
7363738cc96a:~/テスト# ls
scrapy.cfg テスト
7363738cc96a:~/テスト# cd テスト/
7363738cc96a:~/テスト/テスト# ls
__init__.py __pycache__ items.py middlewares.py pipelines.py settings.py スパイダー
7363738cc96a:~/テスト/テスト#

テスト成功

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Alpine Dockerイメージフォント問題解決操作
  • alpineをベースにdockerfileで作成したtomcatイメージの実装
  • Docker で php-nginx-alpine イメージをゼロから構築する方法
  • Docker Alpine イメージのタイムゾーン問題に対する完璧な解決策

<<:  mysql における mydumper と mysqldump の比較

>>:  JavaScript のディープコピーの落とし穴

推薦する

CSS で text-align と margin: 0 auto を使用して中央に配置する例コード

CSSでtext-align、margin: 0 autoを使用して中央揃えにするtext-alig...

MySQL マルチバージョン同時実行制御 MVCC の基本原理の分析

目次1 トランザクションの同時実行で発生する問題1.1 ダーティリード1.2 繰り返し不可能な読み取...

Nginx でバージョン番号と Web ページのキャッシュ時間を非表示にする方法

Nginx の最適化 - バージョン番号と Web ページのキャッシュ時間を非表示にするバージョン番...

Vue+Spring Bootで検証コード機能を実現

この記事では、検証コード機能を実装するためのvue+spring bootの具体的なコードを例として...

Xampp サーバーで MySQL パスワードを変更する方法 (画像付き)

今日、PHP で作業しているときに、Xampp サーバーに付属の mysql データベースを使用する...

div タグ内の要素の margin-top が無効である場合の解決策

タイトル通りです。その質問は非常に奇妙です。要素の親タグはdivで、幅や高さなどの属性は設定されてい...

CentOS サーバーに FFmpeg をインストールするための完全な手順

序文サーバーシステム環境は、CentOS 6.5 (最終) です。 FFmpeg をサーバーに正常に...

モバイルウェブページのサイズ調整を実装する方法

ようやく手元のプロジェクトが終了し、行方不明だった人たちが戻ってきました!プロジェクトを進める過程で...

表 td 画像水平および垂直中央揃えコード

HTMLコード:コードをコピーコードは次のとおりです。 <td align="cen...

Webデザインチュートリアル(7):Webデザインの効率化

<br />前の記事:Webデザインチュートリアル(6):デザインへの情熱を持ち続けまし...

jsはブラウザを閉じるときにアカウントのログアウトを処理します

目次古典的なアプローチ質問その他の質問注意が必要な問題古典的なアプローチご存知のとおり、アカウントの...

React NativeとiOSの相互作用の詳細な説明

目次前提条件RNはiOSに価値を渡す方法1: ネイティブに値を通常通り渡す方法2: コールバック関数...

Linux アカウントのパスワードを変更する詳細な例

個人アカウントのパスワードを変更する一般ユーザーが個人アカウントのパスワードを変更する場合は、他のコ...

Vue ボタンの権限制御の導入

目次1. 手順1. ボタンの権限を定義する2. ストアを定義する3. 権限指示を作成する4. パーミ...

よく使われるnginxの書き換えルールの詳細な説明

この記事では、Web ページのリンクを美しくするためによく使用される書き換えルールをいくつか紹介しま...