iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 13
0

介紹

docker 把環境包裝起來程式碼攜帶跨不同平台使用非常方便,讓應用程式布署在軟體容器下的工作可以自動化,基底是Linux作業系統,但也可以在window底下執行,使用headless的Chrome Linux在Docker容器中運行Puppeteer會比較麻煩。Puppeteer 安裝的 Chromium 缺少必要的package。為了解決這個問題,需要在 Dockerfile 中安裝最新版本的Chrome開發器

dockerfile 是一個提供環境編譯的腳本,底下就是要編譯可以讓Puppeteer正常執行的時候要再額外安裝的部分
除了 apt-get install 要安裝的部分 還要給他一些權限 這個dockerfile部分

FROM 就是採用哪一個基底的image
RUN 就是執行linux的指令
USER 預設的使用者
CMD 就是預設要跑起來的指令


FROM node:8-slim
RUN apt-get update && apt-get install -yq libgconf-2-4
RUN apt-get update && apt-get install -y wget --no-install-recommends \
    && wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - \
    && sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list' \
    && apt-get update \
    && apt-get install -y google-chrome-unstable \
      --no-install-recommends \
    && rm -rf /var/lib/apt/lists/* \
    && apt-get purge --auto-remove -y curl \
    && rm -rf /src/*.deb
 
RUN yarn add puppeteer

RUN groupadd -r pptruser && useradd -r -g pptruser -G audio,video pptruser \
    && mkdir -p /home/pptruser/Downloads \
    && chown -R pptruser:pptruser /home/pptruser \
    && chown -R pptruser:pptruser /node_modules

USER pptruser

CMD ["google-chrome-unstable"]

以上腳本完成後就build出一個images檔案
docker build -t puppeteer-chrome-linux .

這邊的node -e 的部分可以把 script 透過環境變數包裝進去

docker run -i --rm --cap-add=SYS_ADMIN \
   --name puppeteer-chrome puppeteer-chrome-linux \
   node -e "`cat yourscript.js`"

總結

通常會包裝成docker 就是為了部署方便,如果今天有100隻爬蟲想要部署到許多不同的server環境取得不同的ip,透過這樣的部署方式只需要給docker 環境變數就可以達成部署作業

github docker 參考

https://github.com/ebidel/try-puppeteer


上一篇
Puppeteer & Heroku
下一篇
Puppeteer & cheerio
系列文
Puppeteer30

尚未有邦友留言

立即登入留言