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. vs/windows程序找不到入口点cuvidGetDecodeStatus于AppDecGL.exe动态链接库上

    解决方法:这个问题的原因是由于使用的英伟达显卡驱动版本不够新,更新显卡驱动即可. 找了一个多月的原因,终于知道起源了.最终问题还是出在了nvcuvid.lib/.dll上面.通过分析vs调试信息可以得 ...

  2. 四丶前端基础之jquery

    知识预览 一 jQuery是什么? 二 什么是jQuery对象? 三 寻找元素(选择器和筛选器) 四 操作元素(属性,css,文档处理) 扩展方法 (插件机制) 回到顶部 一 jQuery是什么? [ ...

  3. 洛谷 P1414 又是毕业季II

    题目链接 https://www.luogu.org/problemnew/show/P1414 题目背景 “叮铃铃铃”,随着高考最后一科结考铃声的敲响,三年青春时光顿时凝固于此刻.毕业的欣喜怎敌那离 ...

  4. 修改MySQL的数据目录

    环境:CentOS Linux release 7.1.1503 (Core) 1. 安装MYSQL wget http://dev.mysql.com/get/mysql-community-rel ...

  5. 【转】Android开发规范

    转自:https://github.com/Blankj/AndroidStandardDevelop 摘要 1 前言 2 AS 规范 3 命名规范 4 代码样式规范 5 资源文件规范 6 版本统一规 ...

  6. C# Entity To Json

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Da ...

  7. python中网络编程

    网络编程软件架构介绍: C/S:客户端,服务端 B/S:浏览器,服务端 # 常见应用: 1.手机端看着感觉是c/s架构其实更多的是b/s架构,例如微信小程序,支付宝第三方接口 2.pc端:b/s比较火 ...

  8. UOJ#394. 【NOI2018】冒泡排序

    原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ394.html 题解 首先我们发现一个数不能既被往左换又被往右换.也就是说不能有任何一个数左边有比他大的, ...

  9. 10_30_unittest

    1.断言 1).self.assertEqual(2,res)#期望值qian.结果值hou2)TextTestRunner 源码 必要的参数3)测试结果 上下文管理器 with open(" ...

  10. vue 事件修饰符

    1.用.stop来阻止冒泡(点击click按钮之后,先执行clickBtn2方法,然后执行clickBtn1方法,.stop命令阻止了clickBtn1方法的执行) 2.使用.prevent命令来阻止 ...