Puppeteer 应用容器化
Intro
Puppeteer是谷歌官方出品的一个通过DevTools协议控制headless Chrome的Node库。可以通过Puppeteer的提供的api直接控制Chrome模拟大部分用户操作来进行UI Test或者作为爬虫访问页面来收集数据。
更多的介绍,可以参考这里
项目中使用到了 Puppeteer 来做一些爬虫项目,最后需要把应用容器化部署在 docker 上,于是就有了这篇文章。
自定义 docker image
谷歌官方还没有推出一个官方的 docker 镜像,Github上有一个 issue,有需要的话可以关注下,但是官方有一个 dockerfile 示例
于是自己在官方的 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 应用,希望你可以使用这个镜像,如果有什么问题也欢迎和我联系,我会尽我所能去解决问题。