当前位置: 首页 > Web前端 > HTML

Docker系列-05-入门&Puppeteer服务

时间:2023-03-28 17:32:59 HTML

本文档对应代码:https://github.com/LiangJunro...Docker系列文档:https://github.com/LiangJunro...1。我们的服务还是基于之前的Node.js服务改造的,所以jsliang就拿了一个自己写的基础Node.js+TypeScript服务。其目录结构如下:docker-puppeteer只需2步即可启动本demo:安装包:npmi启动服务:npmrunrobot-test等到每分钟第0秒,终端运行打开Puppeteer,并保存图片在src/source上。关键代码为:src/index.ts//...代码省略console.log('您好,您已进入程序');lettime=0;awaitschedule.scheduleJob('0*****',async()=>{constbrowser=process.env.NODE_ENV==='production'?//官方环境需要开启沙盒模式awaitpuppeteer.launch({args:['--no-sandbox','--disable-setuid-sandbox'],})://对于非正式环境,awaitpuppeteer.launch({headless:false,//非无头模式,devtools:true,//调试模式,可以看到控制台在控制台中});//创建一个新标签并打开constpage=awaitbrowser.newPage();awaitpage.goto('https://www.baidu.com/s?wd=jsliang');//等待5秒加载awaitpage.waitForTimeout(5*1000);//获取快照并存储在本地awaitpage.screenshot({path:`./src/source/baidu_${++time}.png`,});//closeWindowawaitbrowser.close();});//...代码遗漏有兴趣的可以停下来打开仓库,先看看demo,有兴趣的可以不感兴趣可以继续看。我们来看key的key:src/index.tsconstbrowser=process.env.NODE_ENV==='production'?//正式环境需要开启沙盒模式awaitpuppeteer.launch({args:['--no-sandbox','--disable-setuid-sandbox'],})://非正式环境自由等待puppeteer.launch({headless:false,//非headless模式,devtools:true,//Debug模式,可以在控制台看到console});因为如果Node.js服务是通过Docker搭建的,我们就不能正常启动Puppeteer,所以我们需要:设置Dockerfile来设置启动姿势这里是我们的package.json代码:json"scripts":{"robot":"cross-envNODE_ENV=productionts-node./src/index.tsrobot","robot-test":"cross-envNODE_ENV=testts-node./src/index.tsrobot"},所以我们设置启动后,只需要在官方环境下运行npmrunrobot即可启动沙盒模式。3.写Dockerfile不多说,直接写Dockerfile:Dockerfile#官方文档https://github.com/puppeteer/puppeteer/blob/main/docs/troubleshooting.md#running-puppeteer-in-docker#基于Alpine上最小的LinuxDocker镜像,具有完整的包索引,大小只有5MB!FROMalpine:edge#指定执行CMD的目录,即先cd到目录WORKDIR/home/docker/we_render#安装最新版Chromium(89)packageRUNapkadd--no-cache\chromium\nss\freetype\harfbuzz\ca-certificates\ttf-freefont\nodejs\yarn#跳过自动安装Chrome包。使用上面安装的ChromeENVPUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true\PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser#Puppeteerv6.0.0支持Chromiumyar89Raddpuppeteer@6.0.0#复制宿主机的文件到容器中的we_render目录下COPY./home/docker/we_render#通过yarn设置淘宝源和打包,并清除缓存RUNyarnconfigsetregistry'https://registry.npm.taobao.org'&&\yarnglobaladdpm2&&\yarninstall&&\yarncacheclean#声明容器提供的服务端口EXPOSE9527#容器主进程启动命令CMD["yarn","run“,"robot"]那么你只需要一步步创建镜像和创建容器即可。4.启动服务注意:强烈建议先切换镜像,否则下载内容会很慢。我以前在公司经营得很好。也花了很长时间(3000s)。如何修改镜像:03-GettingStarted&ConceptClearance创建镜像(Image):dockerimagebuild./-tdocker-node:1.0.0创建容器(Container):dockercontainercreate-p3333:80docker-节点:1.0。0启动容器(Container):dockerrestartdd420fc4267ad3bdb9eadfdbf37d89e2592dbc9d030a501b96fe10b07ac565ff查看容器(Container)的运行状态:dockerps-a查看容器(Container)的日志:dockerlogs-fdd420fc4267a进入容器(Container0fcit):dd42execdsrc/source查看目录内容:ls可以看到我们已经有几张截图了:用前面学过的方法,复制容器里的内容,查看一下:dockercpf5000c4a530b:/home/docker/we_render/src/sourceE:\MyWeb\all-for-one虽然不明白???这到底是怎么回事,但不知何故它起作用了!然后,我们就成功将Puppeteer接入Docker,剩下的只需要设置时区和Hosts,这里就不赘述了。这样,我们的Docker之旅就告一段落了。有兴趣的小伙伴欢迎更新,然后在本地写Git仓库代码,然后push到GitHub,拿CI/CD更新到服务器……操作只能等jsliang有时间再更新!我是jsliang,一个终身学习的slash程序员,他充满探索欲,爱折腾,乐于扩充自己的知识面。让我们一起折腾探索吧!不折腾的前端和咸鱼有什么区别!觉得文章不错的朋友欢迎点赞/star。如需联系jsliang:Github个人联系方式保存在Github主页,欢迎一起折腾~努力把自己打造成一个充满探索欲、喜欢折腾、乐于拓展的终身学习斜线程序员你的知识。jsliang的文档库由JunrongLiang根据CreativeCommonsAttribution-NonCommercial-ShareAlike4.0InternationalLicense授权。
基于https://github.com/LiangJunrong/document-library上的作品。
非本许可协议授权的使用权可从https://creativecommons.org/licenses/by-nc-sa/2.5/cn/获取。