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 应用容器化的更多相关文章

  1. docker4dotnet #2 容器化主机

    .NET 猿自从认识了小鲸鱼,感觉功力大增.上篇<docker4dotnet #1 前世今生&世界你好>中给大家介绍了如何在Windows上面配置Docker for Window ...

  2. 面向UI编程:ui.js 1.0 粗糙版本发布,分布式开发+容器化+组件化+配置化框架,从无到有的艰难创造

    时隔第一次被UI思路激励,到现在1.0的粗糙版本发布,掐指一算整整半年了.半年之间,有些细节不断推翻重做,再推翻再重做.时隔今日,终于能先出来个东西了,这个版本很粗糙,主体功能大概能实现了,但是还是有 ...

  3. .NET Core容器化@Docker

    温馨提示:本文适合动手演练,效果更佳.  1. 引言 我们知道. NET Core最大的特性之一就是跨平台,而对于跨平台,似乎大家印象中就是可以在非Windows系统上部署运行.而至于如何操作,可能就 ...

  4. .NET Core容器化之多容器应用部署@Docker-Compose

    1.引言 紧接上篇.NET Core容器化@Docker,这一节我们先来介绍如何使用Nginx来完成.NET Core应用的反向代理,然后再介绍多容器应用的部署问题. 2. Why Need Ngin ...

  5. .NET Core+MySql+Nginx 容器化部署

    .NET Core容器化@Docker .NET Core容器化之多容器应用部署@Docker-Compose .NET Core+MySql+Nginx 容器化部署 GitHub-Demo:Dock ...

  6. .NET微服务 容器化.NET应用架构指南(支持.NET Core2)

    介绍 企业通过使用容器,日益实现成本节约.解决部署问题并改进 DevOps 和生产操作. 通过创建 Azure 容器服务.Azure Service Fabric 等产品,同时与 Docker.Mes ...

  7. 容器化的 DevOps 工作流

    对于 devops 来说,容器技术绝对是我们笑傲江湖的法宝.本文通过一个小 demo 来介绍如何使用容器技术来改进我们的 devops 工作流. devops 的日常工作中难免会有一些繁琐的重复性劳动 ...

  8. Asp.net容器化

    注意:本文只用于探讨asp.net容器化,不建议生产环境下使用(docker 镜像太大!!!!) 安装docker 准备一个台windwos server 2016 ,在PowerShell 里执行以 ...

  9. 容器化分布式日志组件ExceptionLess的Angular前端UI

    写在前面 随着微服务架构的流行,日志也需要由专门的分布式日志组件来完成这个工作,我们项目使用的是 ExceptionLess 这个组件,它是前后端分离的:这篇文章我们就来实践容器化 Exception ...

随机推荐

  1. C#获取用户登录IP地址

    public static string GetUserIp() {        string ip;        string[] temp;        bool isErr = false ...

  2. 做ctf题对malloc的疑问

    做cctf pwn printf题目的时候 疑问为什么dir函数会将之前out的name倒叙输出 调试了一下发现当malloc(0xf4)大小时候,例如 第一次分配0x1000的地址,将名字输入到0x ...

  3. Linq to Object原理

    using System; using System.Collections.Generic; using System.Linq; using System.Threading; namespace ...

  4. Angular动画

    Angular动画基于W3C的Web Animations标准.不在Angular Core中了. 组件里面定义一个或多个触发器trigger,每个触发器有一系列的状态和过渡效果来实现. 动画其实就是 ...

  5. JavaScript判断各种数据类型

    typeof ,只可判断部分数据的数据类型 数字 字符串 布尔值 undefined function Object.prototype.toString.call() , 通用 function e ...

  6. vue分类筛选方法,filer

    使用computed 方法来过滤筛选数据;也可以使用methods 方式来筛选过滤数据 代码如下: <body> <div id="app"> <ul ...

  7. Anaconda使用指南

    Anaconda使用指南 Anaconda介绍 什么是 Anaconda Anaconda是专注于数据分析的Python发行版本,包含了conda.Python等190多个科学包及其依赖项.作为好奇宝 ...

  8. Linux之环境搭建(一)

    四大系统比较 Mac OS是苹果机专用系统,是基于Unix内核的图形化操作系统,因此Unix相当于父亲,Linux和Mac OS是对兄弟. CentOS是从Redhat源代码编译重新发布版.CentO ...

  9. 爬虫之selenium和PhantomJS

    ---恢复内容开始--- selenium selenium是什么? 是Python的一个第三方库,对外提供的接口可以操作浏览器,然后让浏览器完成自动化的操作 环境搭建 .安装: pip instal ...

  10. aizhan爱站关键字采集

    功能:支持批量网站查询,支持登录后查询,支持批量导出txt http://blog.ddian.cn/content/uploadfile/201402/dc5c501411f758849b09c09 ...