Pages - Menu

2020年8月4日 星期二

[Docker]Docker image Scrapyd & Scrapydweb 搬家紀錄

前言

之前的Scrapy要搬家了,搬到外面的主機上。

如果看過前面幾篇的應該知道,我已經把那個scrapy改的跟本來的樣子差很多了。

而且我也沒有用k8s管理,感覺這個匯入匯出用k8s應該會比較好做?

畢竟是管理docker用的工具。先來試試傳統的方式吧。


正文

1.匯出images

首先將本來的檔案匯出,

這邊使用的是export的方式。另外還有一種是save的語法。

兩者的差異可參考:[Docker] 比較 save, export 對於映像檔操作差異

docker export scrapydIII > scrapyd.tar

我是用xshell本身自帶的xftp直接下載下來的。

當初建立的時候,有mapping一個外部資料夾存放資料,這個也需要一併下載(Fig.1)。

 


(Fig.1)


2.匯入images

cat scrapyd.tar | docker import – scrapyd

匯入完成後,利用

docker images

看images 列表

 

3.建立容器

剛剛匯入了images,現在要建立容器了。

這邊建立的方式會有些不同。

一開始先以平常建立容器的方式去執行,

docker run -d --name=scrapydIII -p 6800:6800 -v ~/scrapyd:/var/lib/scrapyd rockyuan/scrapyd

會跳出錯誤

docker: Error response from daemon: No command specified.

因為必須加入command的指令才可以。

例如,我本來的container的command是scrapyd(Fig.2)

就下

docker run -d --name=scrapyd -p 6800:6800 -v ~/scrapyd:/var/lib/scrapyd scrapyd scrapyd

最後面的scrapyd是command

倒數第二個的scrapyd是images的檔案名稱

 

(Fig.2)

如果command太長的話(Fig.3),就必須額外下指令去取得(ref.See full command of running/stopped container in Docker)

sudo docker ps --no-trunc

 

(Fig.3)


4.現在開始要載入scrapydweb。

這邊就碰到了一堆問題,容器跟容器間的互連、如何確認ip有沒有通...

確認網站有沒有活著,可以使用 

curl -Is https://tw.yahoo.com | head -1

看他是否回傳資料就知道了(ref.Check a Website Availability from the Linux Command Line)

然後容器間的互連,應該是使用 --link的方式(之前連mongodb也有試過),

但現在還在Try...


撞牆篇

首先是scrapydweb,當初使用的時候在內網。
所以我的scrapyd的bind_address是全開 0.0.0.0,但現在已經架在外網了,所以不能這樣玩。
只能設定127.0.0.1。
然後scrapydweb就連不到了。

改scrapyd的設定檔改了N次(設定檔位置在/etc/scrapyd/scrapyd.conf),
一改錯,container就開不了機了。

後來看了一堆docker的網路架構。
基本上,建立沒指定的話,預設都是bridge模式。
也就是說 你的 scrapyd 跟 scrapydweb的ip一定都不一樣。
詳細資料請參考

所以如果scrapyd要維持127.0.0.1的話,
那就必須使用container的網路模式(另外目前官方不建議使用--link)。

解決篇

因此使用container的話,是將 scrapydweb掛到scrapyd底下,共同使用同一個ip。
127.0.0.1就能用了。所以參數不能設定port,但如果外網要能夠連線要開port,
變成在主要的container  scrapyd上面,開啟port 5000,原先的port 6800就不用開了。
建立scrapydweb的時候,這邊多了一個對應  ~/scrapydweb_data/app:/app 
因為新版的 scrapydweb的設定檔scrapydweb_settings_v8.py在這邊。


docker run -d --name=scrapyd -p 5000:5000 -p 27020:27017 -v ~/scrapyd:/var/lib/scrapyd scrapyd scrapyd

docker run --name scrapydweb --net=container:scrapyd  \
    -v ~/scrapydweb_data:/usr/local/lib/python3.6/site-packages/scrapydweb/data \
    -v ~/scrapydweb_data/app:/app \
    -v /etc/timezone:/etc/timezone \
    -d ryanvin/scrapydweb:latest

docker run -d --net=container:scrapyd --name mongodb -v ~/mongo:/data/db -e MONGO_INITDB_ROOT_USERNAME=321 -e MONGO_INITDB_ROOT_PASSWORD=123 mongo


ref.

基於Docker的Scrapy+Scrapyd+Scrapydweb部署

《Docker —— 從入門到實踐­》正體中文版

Docker Network指令介紹

沒有留言:

張貼留言