Puppeteer 应用容器化

作者: 天天向上卡索 | 来源:发表于2018-11-30 17:21 被阅读4次

    Puppeteer 应用容器化

    Intro

    Puppeteer是谷歌官方出品的一个通过DevTools协议控制headless Chrome的Node库。可以通过Puppeteer的提供的api直接控制Chrome模拟大部分用户操作来进行UI Test或者作为爬虫访问页面来收集数据。
    更多的介绍,可以参考这里

    项目中使用到了 Puppeteer 来做一些爬虫项目,最后需要把应用容器化部署在 docker 上,于是就有了这篇文章。

    自定义 docker image

    谷歌官方还没有推出一个官方的 docker 镜像,Github上有一个 issue,有需要的话可以关注下,但是官方有一个 dockerfile 示例

    参见官方文档: https://github.com/GoogleChrome/puppeteer/blob/master/docs/troubleshooting.md#running-puppeteer-in-docker

    于是自己在官方的 dockerfile 基础上加以修改,制作了一个 image,docker hub 镜像地址:https://hub.docker.com/r/weihanli/puppeteer/

    Dockerfile 内容详见: https://github.com/WeihanLi/docker-env/blob/master/docker-puppeteer/Dockerfile

    怎么使用

    • 在 docker-compose 中使用

      示例 docker-compose 文件:

      version: '2'
      services:
        puppeteer-crawler:
          image: weihanli/puppeteer:latest
          container_name:  puppeteer-crawler
          ports:
            - 10240:3000
          volumes:
            - ./src:/app
      

      我的项目结构是这样的

      - src (具体的项目代码)
      Dockerfile
      docker-compose.yml
      
    • 基于此镜像构建新的镜像

      示例 Dockerfile:

      FROM weihanli/puppeteer:latest
      
      COPY --chown=pptruser:pptruser ./src .
      
      EXPOSE 3000
      

      这里指定了 --chown=pptruser:pptruser 是因为官方建议不用使用 root 用户,新建了一个 pptruser 的用户组以及用户,使用pptruser这个用户去执行要执行的代码,这里是为了防止出现用户权限相关问题。

    如果可以使用 docker-compose 的话,建议还是使用 docker-compose

    docker 镜像启动之后默认执行的命令是 yarn start,你只需要在 app 目录下可以执行 npm run start 或者 yarn start 都是可以的,当然你也可以自定义要执行的命令来覆盖默认的 Command 命令

    Reference

    End

    最后如果你在考虑容器化一个 Puppeteer 应用,希望你可以使用这个镜像,如果有什么问题也欢迎和我联系,我会尽我所能去解决问题。

    相关文章

      网友评论

        本文标题:Puppeteer 应用容器化

        本文链接:https://www.haomeiwen.com/subject/oabhcqtx.html