Docker实现在线代码运行平台-源码分析

这篇具有很好参考价值的文章主要介绍了Docker实现在线代码运行平台-源码分析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、背景

        也许大家平时会有用到一些在线代码运行的网址, 方便我们做一些语法测试或者学习。 例如执行Python代码、Java代码、Shell代码等等, 有时候自己本地环境不具备的时候做一些简单的脚本测试还是蛮实用和方便的。

        例如这个在线运行的代码站点:  https://r.xjq.icu/


        但是你知道这种平台是怎么实现的吗? 首先大家试想你作为站点管理员,考虑以下几个问题:

        1、站点怎么防止客户端执行恶意指令代码? 
           

         例如执行Shell脚本,如果你的实现机制是用过物理机或者虚拟机的方式执行,客户端执行一条rm -rf /*,此时阁下将如何应对?    大家可能想到的第一种方案就是,关键词过滤或者限定某些高危指令不能执行或者限定执行的Linux用户。  虽然说这种方式也不是说不可以,但是存在局限性,例如说你支持的编程语言越多,那么过滤的成本就越高,万一过滤漏了呢,那又该怎么办?


        2、怎么限定运行程序所需的资源? 
            

        如果客户端写恶意执行代码,例如while死循环,这种情况又该如何应对?如果直接在传统环境这么弄,你的网址第一天上线就被rm -rf /*了或者CPU飙升,最后挂了.  

         这里和大家分享我的想法。

         其实我想到了"沙箱"Docker容器, 可以来做上面的这么一件事情。   

        1、安全性问题, 防止用户执行高危指令破坏系统

            Docker属于进程隔离级别,启动一个Docker几秒就搞定,不会影响用户体验。同时将要运行的代码传递给Docker容器进行执行,如果执行高危指令也无妨,这一切都只发生在容器中,宿主机不会受到影响。容器执行完毕后进行销毁即可
    
        2、资源限制问题,防止用户写死循环等操作
    
            Docker本身就有资源限制的功能,例如占用CPU、内存等, 我们可以在执行时限定启动的容器的CPU、内存,一旦这个代码的执行资源超过,那么这个容器就会出现异常停止,不会影响宿主机
    

二、实现架构与原理

        验证我的猜想,在Github上确实有人做过类似的开源项目: https://github.com/xjq7/runcode

        我们通过分析源代码一探究竟:

1、F12看下代码执行请求接口

接口地址: /code/run

在线代码运行平台的原理,docker,docker,在线代码运行,容器,沙箱

参数信息:  可以看到code【要执行的代码字符串】、type【代码编程语言类型】

在线代码运行平台的原理,docker,docker,在线代码运行,容器,沙箱

2、查看server的run接口源码实现逻辑

  找到server/controller/code.ts

在线代码运行平台的原理,docker,docker,在线代码运行,容器,沙箱

这里代码很简单,调用了docker.run2()函数执行,最后拿到结果,展示给前端.

在线代码运行平台的原理,docker,docker,在线代码运行,容器,沙箱

3、继续查看run2()函数的实现逻辑

定位到run2()函数位置:

在线代码运行平台的原理,docker,docker,在线代码运行,容器,沙箱

 可以看到使用docker的sdk,创建了容器,将代码进行执行,最后销毁容器,拿到代码执行的输出

在线代码运行平台的原理,docker,docker,在线代码运行,容器,沙箱

三、总结

        从上面的分析过程我们就可以发现了,Docker作为测试"沙箱"很方便,这个项目代码也不是很多,大家感兴趣可以进行深度的探索。 但是本质还是使用Docker来解决了安全性问题和资源限制问题。即使你执行rm -rf /*还是死循环,还是其它恶意代码,你都被限定在我的"沙箱"里面了,不会对我的宿主机产生破坏性的影响。

        今天就分享到这里,感谢大家一直以来的支持~文章来源地址https://www.toymoban.com/news/detail-855675.html

到了这里,关于Docker实现在线代码运行平台-源码分析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【毕业设计】Thinkphp+mysql基于微信小程序的在线购物商城平台系统的设计与实现(附论文 源码 讲解)

    微信小程序购物商城的设计与实现 随着移动互联网的快速发展,移动电子商务已经成为了人们生活中的重要组成部分。微信作为中国最大的社交媒体平台,拥有着庞大的用户群体和强大的技术能力。因此,开发一款基于微信小程序的购物商城具有重要意义。本文将详细介绍微

    2024年02月08日
    浏览(51)
  • postgresql 内核源码分析 btree索引的增删查代码基本原理流程分析,索引膨胀的原因在这里

    ​ 专栏内容 : postgresql内核源码分析 手写数据库toadb 并发编程 ​ 开源贡献 : toadb开源库 个人主页 :我的主页 管理社区 :开源数据库 座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物. 在postgresql最常用的索引就是btree,它支持范围和等值查询。 本文主要介绍

    2024年02月11日
    浏览(51)
  • x86 平台利用 qemu-user-static 实现 arm64 平台 docker 镜像的运行和构建

    因为国产化的普及,尤其一些证券和银行行业,已经开始走信创的路线,后期也许会接触到国产 CPU ( arm 平台,比如华为的鲲鹏处理器) 自己买 arm 平台的 CPU ,这个成本着实吃不消,于是尝试 x86 平台运行 arm 平台的容器来降本增效 docker 运行其他平台容器,需要使用 --pla

    2024年02月02日
    浏览(46)
  • Django实现热加载原理(从源码开始分析)

    autoreload 这里是通过 restart_with_reloader 这个方法来实现的,首先我们第一次在python manage.py runserver的时候, DJANGO_AUTORELOAD_ENV 这个环境变量的值是None,当我们在执行完 restart_with_reloader 的时候,这个环境会变成true。 创建了一个新的环境,然后使用子进程,并把新的环境变量进去

    2024年02月04日
    浏览(38)
  • 在线的货币兑换平台源码下载

    在线的货币兑换平台,可帮助全球各地的个人和企业将货币从一种货币兑换为另一种货币。该货币兑换平台是 Codecanyon 中最先进的脚本。 源码下载:https://download.csdn.net/download/m0_66047725/88728084

    2024年01月20日
    浏览(45)
  • 【分布式技术专题】RocketMQ延迟消息实现原理和源码分析

    痛点背景 业务场景 假设有这么一个需求,用户下单后如果30分钟未支付,则该订单需要被关闭。你会怎么做? 之前方案 最简单的做法,可以服务端启动个定时器,隔个几秒扫描数据库中待支付的订单,如果(当前时间-订单创建时间)30分钟,则关闭订单。 方案评估 优点:是实

    2024年02月13日
    浏览(53)
  • 深入理解python虚拟机:调试器实现原理与源码分析

    调试器是一个编程语言非常重要的部分,调试器是一种用于诊断和修复代码错误(或称为 bug)的工具,它允许开发者在程序执行时逐步查看和分析代码的状态和行为,它可以帮助开发者诊断和修复代码错误,理解程序的行为,优化性能。无论在哪种编程语言中,调试器都是一

    2023年04月26日
    浏览(51)
  • 基于 Eureka 的 Ribbon 负载均衡实现原理【SpringCloud 源码分析】

    目录 一、前言 二、源码分析 三、负载均衡策略 如下图,我们在 orderserver 中通过 restTemplate 向 usersever 发起 http 请求,在服务拉取的时候,主机名 localhost 是用服务名 userserver 代替的,那么该 url 是一个可访问的网络地址吗?   我们在浏览器中访问一下这个地址,果然不可用

    2024年02月03日
    浏览(47)
  • 赛车游戏——【极品飞车】(内含源码inscode在线运行)

    「作者主页」 :雪碧有白泡泡 「个人网站」 :雪碧的个人网站 「推荐专栏」 : ★ java一站式服务 ★ ★ 前端炫酷代码分享 ★ ★ uniapp-从构建到提升 ★ ★ 从0到英雄,vue成神之路 ★ ★ 解决算法,一个专栏就够了 ★ ★ 架构咱们从0说 ★ ★ 数据流通的精妙之道★ CSDN最新推

    2024年02月14日
    浏览(39)
  • 基于springboot在线学习平台源码和论文

    在Internet高速发展的今天,我们生活的各个领域都涉及到计算机的应用,其中包括 学习平台 的网络应用,在外国学习平台已经是很普遍的方式,不过 国内的 管理平台 可能 还处于起步阶段 。学习平台 具有学习信息管理功能的选择。学习平台采用java技术,基于springboot框架,

    2024年01月24日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包