docker api失败_Linux下如何运行puppeteer? puppeteer搭配Docker光速部署的正确姿势

b3580eeb4787bf89c62c2f2618ce63fe.png

puppeteer(下面简称pptr)是Google出的一款Chrome行为模拟开源软件。

含着金汤勺出生,从一开始就得到极大的关注。

在pptr出生之前,业界已经有非常好用的免费的开源浏览器模拟工具 selenium。selenium同样非常强大,并且支持Chrome,firefox,IE等等浏览器。那么支持Chrome浏览器行为模拟的pptr的竞争力在哪里呢?

我觉有以下几点:

  1. 超级简单&&fashion的API,完美支持async/await,让异步编程巨™简单
  2. 增强的模拟行为,对于webrtc等一些新的技术同样可以完美支持
  3. Google官方出品

当然这篇文章不是pptr的布道软文,我是想介绍linux下到底应该如何运行我们使用pptr开发的nodejs应用程序!

What?难道linux下面运行pptr开发的nodejs程序还会很困难?
是滴!而且是相当困难。

开发者使用pptr开发的nodejs程序往往在windows下面测试好好的,但是一旦部署到linux下面运行就各种报错,各种依赖库找不到,各种trouble,脑阔疼。。。。

为什么linux下面部署pptr开发的应用这么困难?

这很好理解,pptr模拟浏览器行为涉及到UI渲染,windows本身自带UI界面,一些UI相关的库(library)都已经是自带的了,所以自然在windows下面运行十分容易并且不会有什么坑。但是因为大部分Linux的发行版本都是不带UI界面的,纯命令行操作方式,这就注定其很多UI相关的依赖库找不到,所以pptr开发的应用程序在linux上部署这么困难就是这个原因!

有什么简单的解决办法么?

有的!你把自己开发的应用部署到windows或Ubuntu上面(记住Ubuntu的坑同样很多,只不过相比centos坑少很多)。
But!我们都知道大部分情况公司开发环境要求部署的都是linux并且是centos,这是何等的操蛋啊!!

所以我们有木有什么完美的解决办法呢?

别担心,官方已经给了办法,但是它并不完美!
官方还是很良心的,为广大开发者操碎了心,为此专门将“环境部署”相关的话题放在文档首页位置,看下面截图。

3c83565e04cfdfaf23d502ac294a69cd.png
不出意外,这里面就是告诉开发者安装各种依赖,但是我安装了这些依赖还是不行啊! 我是一只要疯了的鸭鸭。。

而且官方的做法其实我不推荐,就算你在一台linux机器上面安装了这些依赖,花了半天成功了,那么下次换台机器呢?组长让你在另一个linux机器上再部署一个,怎么办?

所以终极究极无敌弯道超越曲线救国无法无天的pptr部署办法来了,

使用Docker!

路人:卧槽我不会Docker啊!
作者:没关系,Docker非常简单,而且你看了下面的文档绝逼一次成功,不成功评论区砍我。

为了我的教程的严谨性与可用性,我这里在我本机(windows10)重新安装一个纯净的centos7.3虚拟机。

安装虚拟机ing,大概半个小时。。。

好滴,现在虚拟机装好了。接下来我会快速说一下Docker的安装,其实Docker的安装也非常简单。

# 首先我们准备一下镜像,这些在官方教程都有,我这里简化一下,文章末尾会给出官方教程链接
sudo yum install -y yum-utils 

接下来我们创建一个使用pptr的nodejs程序,程序非常简单:打开baidu然后截图保存到磁盘。

好,我们开始吧!

# 我们创建一个空的文件夹
mkdir pptr-demo
cd pptr-demo

接着我们创建package.json文件

{                                                                                                
  

然后我们创建index.js文件

const 

创建Dockerfile文件,文件名就叫Dockerfile,没有后缀名哦!

# 这里是别人已经搭建好的的一个pupptr运行换季环境                                                           
FROM buildkite/puppeteer                                                                         
                                                                                                 
WORKDIR /app                                                                                     
                                                                                                 
# 把当当前目录的模样   所有内容都拷贝到 app工作目录                                                                   
COPY . /app                                                                                      
                                                                                                 
                                                                                                 
RUN npm install -g yarn                                                                          
RUN yarn install                                                                                 
                                                                                                 
# 完成  

到这里,如果你在命令行敲击 ls 命令,应该能看到下面3个文件,如果不是,说明你有步骤没有完成。

bd482e409b93165641d1db88499c8674.png

接下来的操作仍然在当前路径操作,不要切换路径。

创建Docker镜像

# 不要忘记最后有一个点
docker build --tag=pptr-image .

# 这里我们把镜像的名称叫做pptr-image
# 创建镜像需要一些时间,请耐心等待

使用我们刚刚创建的镜像启动一个实例(实例也称为container)

docker run -it pptr-image bash

# 然后在出现的新的命令行交互界面敲击

node index.js

# 等待index.js脚本运行完成,敲击
ls

#然后你会看到多了一个文件叫做 example.png
# 这个example.png就是我们程序中访问百度页面然后截图保存的图片

当你看到example.png文件后,我们所有的操作就都完成了。

如你所见,我们的pptr应用程序正常启动并且正常运行了,这一切多亏了Docker还有别人已经给我们做好的 buildkite/puppeteer 镜像,这个镜像中已经安装好了 pptr 在linux环境运行时候所需要的一些环境依赖。

你真的不需要去关心环境依赖,关注与你的代码逻辑会让你工作更加高效更加有成就感,熟悉各种复杂环境搭建不是一个程序员的核心竞争力,而且它会让你非常烦恼。

最后我把上面全部的命令行操作都用 asciinema 工具记录下来了,点击图片就可以看到全部过程。在全部录制过程中,我出了一次重大错误,就是index.js写的不对,pptr初始化的时候需要提供额外的参数,缺少此参数无法在linux下面运行。

录制页面地址 puppeteer with Docker example

就在我刚刚写完这篇文章,合肥出现轻微地震,震源来自台湾6.1级地震,表面毫无波澜,内心恍如老狗,写下最后一行字提交逃出大楼。

链接:

  1. docker官方安装教程(英文)
  2. Github 讨论 : linux下安装失败的问题讨论以及网友建议(Google官方)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值