使用docker 快速部署数据应用
作者:阿乐
今日阳光明媚,宜写字。
阿乐最近在忙一个项目,需要爬数据,做分析,出报告,折腾的有点累,后面有时间可以跟大家分享一下,但是还是要坚持写这个数据运营与数据赋能系列文章。
前面阿乐介绍了数据人构建数据平台的思路、步骤,写应用的工具、方法等等,虽然不是事事具细,但是大致框架、轮子都已经交代清楚。后续遗漏的地方有时间再一一补上。
今天阿乐讲讲部署应用的绝佳工具--docker。
01 什么是docker?
Docker并不是什么刚兴起的技术,只是常见的应用场景都是在开发、运维,但是这么好的技术和作用一样对我们数据人有好处。
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
百度
上面就是百度对docker的官方定义,说白了,docker就是容器工具。
理解docker之前,我们先说下虚拟机。
虚拟机,隔离环境中的完整计算机系统。虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能的、运行在一个完整的计算机系统。
我们有些人可能会使用虚拟机的习惯,例如我的电脑是win7系统,但是我有个工具只能在Ubuntu系统下,所以我需要一个Linux系统,但是我只有一台电脑,这时我就可以安装虚拟机,然后再开一个Linux系统,这样就满足我的需求。
打个比方,你的电脑是一栋楼,虚拟机的出现就是把你的楼分层。 你的可以把你的大楼按你想要的方式去利用,但是虚拟机的一个缺点就是启动慢,占用资源多等等,开虚拟机之后本地运行都很慢很卡,就是资源被占用。
为了方便理解docker,你可以把docker理解成轻量级的虚拟机技术。docker是容器化技术,是更深入的虚拟化技术。
docker的logo是一个鲸鱼托着一个集装箱,这意味和它的作用是不谋而合的。
Docker的思想来自于集装箱,集装箱解决了什么问题?在一艘大船上,可以把货物规整的摆放起来。各种各样的货物被集装箱标准化了,集装箱和集装箱之间不会互相影响。那么我就不需要专门运送水果的船和专门运送化学品的船了。只要这些货物在集装箱里封装的好好的,那我就可以用一艘大船把他们都运走。这就是docker的功能和作用,同时实现这些功能,docker花费了最少的资源。
02 docker的好处?
前面提到docker在开发、运维用的多,那是他的特点十分符合开发、运维场景。
一个常见的场景是,不同的开发人员或者项目组开发了一个应用,是基于Ubuntu及配套的环境开发的,但是运维人员是却是使用centos,同时不同的环境依赖、软件也不一样。
有了docker就十分的方便了,开发人员只要前面提交相应的dockerfile脚本即可,运维就可以一键部署,省时省力,同时docker隔离性高,资源利用率高,部署更新方便,运维省心。
还是拿上面的比方,docker能把你这栋楼分成标准单间,资源利用率大大起来了,同时隔离性好,互不影响,这个房间跟那个房间没有关系。
因此,docker有以下三点好处:
简化程序:
Docker 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,便可以实现虚拟化。Docker改变了虚拟化的方式,使开发者可以直接将自己的成果放入Docker中进行管理。方便快捷已经是 Docker的最大优势,过去需要用数天乃至数周的 任务,在Docker容器的处理下,只需要数秒就能完成。
避免选择恐惧症:
如果你有选择恐惧症,还是资深患者。那么你可以使用 Docker 打包你的纠结!比如 Docker 镜像;Docker 镜像中包含了运行环境和配置,所以 Docker 可以简化部署多种应用实例工作。比如 Web 应用、后台应用、数据库应用、大数据应用比如 Hadoop 集群、消息队列等等都可以打包成一个镜像部署。
节省开支:
一方面,云计算时代到来,使开发者不必为了追求效果而配置高额的硬件,Docker 改变了高性能必然高价格的思维定势。Docker 与云的结合,让云空间得到更充分的利用。不仅解决了硬件管理的问题,也改变了虚拟化的方式。
常见的应用场景:
Web 应用的自动化打包和发布
自动化测试和持续集成、发布
在服务型环境中部署和调整数据库或其他的后台应用
03 我们怎么用docker?
要使用docker,就要学会怎么用docker。这个不是今天讲的重点,学习docker推荐大家去看菜鸟教程里面的docker教程,不过阿乐提一句,对于学习程度,我们了解docker的作用,学会怎么使用安装docker,怎么生成我们的实例就足够了。
我们可以使用docker来部署我们之前写好的应用,可以使用docker来做我们的工具服务等等。结合业务中实际的需求,应用这个工具和技术解决我们一些问题。
为什么阿乐极力推荐使用docker来部署我们的应用,因为阿乐也走过了不少坑,兜兜转转才认定了这个技术,希望这篇文章能给大家一个参考。
下面是生成一个shiny应用的容器案例,其实就是写一个dockerfile文件,通过这个文件我们就能生成我们的应用案例。
# 拉取基础源镜像
FROM openanalytics/r-base
# 镜像标签
MAINTAINER lizhi "lizhi@163.com"
# 安装系统依赖
RUN apt-get update && apt-get install -y \
sudo \
pandoc \
pandoc-citeproc \
libcurl4-gnutls-dev \
libcairo2-dev \
libxt-dev \
libssl-dev \
libssh2-1-dev \
libssl1.0.0 \
libmpfr-dev
# 安装R包
RUN R -e "install.packages(c('shiny','shinydashboard','shinydashboardPlus','leaflet','shinyWidgets'), repos='https://mirrors.tuna.tsinghua.edu.cn/CRAN/')"
# 复制程序脚本到指定路径
RUN mkdir /root/euler
COPY euler /root/euler
COPY Rprofile.site /usr/lib/R/etc/
EXPOSE 3838
# 运行命令
CMD ["R", "-e", "shiny::runApp('/root/euler')"]
从代码上看,其实就是跟我们在Ubuntu系统上安装R并运行一个shiny程序过程差不多,这里把过程代码化了,这就是docker便捷之处。
如果大家工作有需要,可以去了解这个技术,但不需要深入掌握,知道基本操作即可,因为我们需要用,不需要太懂。
04 写在结尾
在此向大家征集数据故事,你的人生也许有你很中意的人和事,我希望用精确的数字和可视化映射平凡人的美好故事。期待您的私信!
感谢您的耐心阅读,请顺手点个「在看」,谢谢。
为了更好的体验,你可以我们的公众号
『 延伸阅读 』
技术
有意思 | 七夕用代码地写封优雅的情书
上新 | 数据分析师用什么姿势学?
技术公司怎么用R和shiny赋能业务?
数据运营 | 数据平台实践流程
生活
精选 | 四面楚喵
网友评论