设为首页 收藏本站
查看: 1030|回复: 0

[经验分享] 原创:Docker在云家政的应用 谢绝复制粘贴内容

[复制链接]

尚未签到

发表于 2017-12-5 21:17:33 | 显示全部楼层 |阅读模式
  我们公司目前大规模使用了Docker,目前除了数据库应用,其他所有应用都在Docker容器内运行,下面我就Docker在公司的应用做一些分享。、
  首先我介绍一下公司的背景,公司属于中小型创业公司,服务器数量不多,但是为了解决一些问题,我们引入了现在比较火的Docker技术。
  看一下我们在没用Docker之前遇到的问题:
  1、线上环境和测试环境不完全一致,导致测试好的功能上线后会出现一些BUG。
  2、部署新项目步骤繁琐,批量部署运行环境后,需要根据每个项目不同的情况,手动修改配置参数。
  3、新项目环境部署耗费时间长。有些项目部署需要几十分钟甚至更长时间
  4、操作系统版本的差异,导致批量部署遇到麻烦
  5、不能跨平台部署环境。
  有了这些问题,我们就要解决这些问题
DSC0000.jpg

  这里我再简单对Docker做一下介绍
  Docker是一个新的容器化开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目,项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议,基于 Google 公司推出的 Go 语言实现
  Docker 提供了一个可以运行你的应用程序的容器,它可以将应用以及依赖包到一个可移植的容器中,然后发布到任何 Linux机器上
  Docker 扩展了 Linux 容器(Linux Containers)通过一个高层次的 API 为进程单独提供了一个轻量级的虚拟环境,有点类似虚拟机的概念
  了解了Docker后,接下来看我们是怎么把Docker用起来的,这里容我再介绍一下公司的背景,公司属于中小型创业公司,服务器数量不多,没有用高大上的Kubernetes、Swarm等Docker集群管理工具
  我们都知道为了方便Docker的部署,一般都需要一个Docker私有仓库来存放镜像,我们也有自己的私有仓库,看一下我们公司的私有镜像仓库是什么样子的,里面都存放了哪些镜像。
DSC0001.jpg

  我们的镜像仓库里面存放了应用服务镜像,如Tomcat,Nginx等,API服务镜像,NoSQL镜像,如Redis服务,MongoDB服务,ES服务等
  这些镜像都是根据我们自己的实际需要打包好的环境镜像,新项目需要什么服务,直接拉取私有仓库的镜像,快速的部署。
  有了镜像仓库,看一下我们是怎么制作镜像的
  我们使用了Dockerfile制作镜像,每个环境都有对应的Dockerfille文件,可以根据实际需要随时调整镜像
  以我们其中一个应用服务环境镜像为例(Nginx+php),看一下我们的镜像制作过程:
DSC0002.png

  1、从Docker官方镜像仓库拉取PHP5.6作为基础镜像
  2、基于基础镜像安装Nginx以及PHP需要的扩展
  3、修改Nginx和PHP的配置
  4、生成指定服务的专用镜像
  5、将生成好的镜像提交至私有仓库
  看一下公司的Dockerfile文件及构建镜像的命令:
  Dockerfile文件内容:
  FROM php:5.6.31-fpm
  RUN apt-get update && apt-get install -y \
  nginx \
  libfreetype6-dev \
  libjpeg62-turbo-dev \
  libmcrypt-dev \
  libpng12-dev \
  libxml2-dev \
  libssl-dev \
  git \
  vim \
  && pecl install redis mongodb mongo \
  && docker-php-ext-enable redis mongodb mongo \
  COPY ./nginx_vhost_conf/* /etc/nginx/sites-enabled/
  docker build –t  hub.yunjiazheng.com/front_web:v1.0 .  构建镜像命令
  docker push hub.yunjiazheng.com/front_web:v1.0           提交镜像到私有仓库。
  接下来看一下我们如何利用镜像快速部署环境的。
DSC0003.png

  首先我们服务器在安装完操作系统,初始化系统的时候就会把Docker客户端安装好。
  服务器上只需要执行docker pull 拉取一个镜像。然后执行docker run 启动镜像,就可以快速部署好一个需要的环境的。
  # docker pull hub.yunjiazheng.com/front_web:v1.0
  # docker run –d –p 80:80 hub.yunjiazheng.com/front_web:v1.0
  docker部署的命令
  我来解释一下这2条命令:
  docker pull hub.yunjiazheng.com/front_web:v1.0
  是从hub.yunjiazheng.com 这个私有镜像仓库拉取front_web镜像,镜像版本是v1.0
  docker run –d –p 80:80 hub.yunjiazheng.com/front_web:v1.0
  这条命令-d是在后端运行容器,-p是映射容器的80端口。然后启动容器
  这样就部署好了一个需要的环境。
  上面看了Docker部署环境的流程后,有一个问题,同一个镜像运行起来的容器如何区分测试环境和线上环境呢。
  为了区分容器运行的环境,接下来要用到云家政的运维平台了。
DSC0004.png

  云家政运维平台运维是自主开发的平台,平台集成了环境管理、配置管理、发布管理、任务管理等功能
  在环境管理会先创建好需要的多套环境,例如beta、线上。
  创建完环境后,会为每个环境添加不同的配置参数,然后发布的时候选择主机和镜像及要发布的环境就可以自动化部署一套环境。
  例如指定服务器A部署A1项目的测试环境:
  运维平台自动登录A服务器,拉取A1项目需要的环境镜像,拉取A1项目代码,再拉取平台上为A1项目配置好的测试环境参数,然后启动容器就可以自动部署一套可运行的环境。
  看一下我们环境管理的界面:
DSC0005.png

DSC0006.png

  下面是环境参数的管理界面:
DSC0007.png

DSC0008.png

  对不同的环境 配置不同的参数。
  运维平台里面的配置管理,可以在线管理线上、测试环境等配置信息,配置管理可以添加、删除、修改代码连接的数据库信息、redis信息等配置信息.
  运维平台提供测试环境、线上环境的配置信息API接口,服务器容器启动的时候会根据服务器类型去获取不同的配置信息API来获取不同的参数,并将服务器部署成不同的应用环境。
DSC0009.png

  实现逻辑大致是上面的图形展示的这样。
  接下来看一下我们通过运维平台部署好的应用的界面:
DSC00010.png

  主机就是发布好的主机,版本是容器运行镜像的版本,状态是容器的运行状态,在这里可以对容器进行远程管理。
  目前云家政所有服务除了数据库是直接运行在操作系统上,其他所有应用服务都实现了容器化,每个项目服务都有对应的镜像,可以在最快几秒内实现服务的快速部署。
  运维平台通过调用服务器上Docker  API接口实现对容器的启动、关闭、执行命令、更新镜像等自动化管理。
  现在大家来看一下我们引入Docker后都得到了哪些好处:
  1、保证了运行环境的一致性,线上环境和测试环境使用同一个镜像,测试环境测试通过后,上线后不会出现因为环境差异而导致Bug。
  2、部署新项目方便快捷,不用考虑操作系统的差异而导致自动部署失败。
  3、新项目部署速度快,可在秒级部署好一个项目环境
  4、服务镜像制作完成后,可以多次快速部署,方便快速横向扩展服务
  5、支持跨平台部署。
  目前我们公司运维平台因为一些功能还不完善,等完善后,后续会将运维平台开源。
  以上是公司对Docker使用的一点分享,后续如果有机会可以分享一下我们的运维平台。
  感谢大家的收看。
  Q1 贵公司使用编排工具了吗?
  公司目前还没有用到docker的编排工具,公司的运维平台通过调用docker的接口的方式实现对docker的自动化管理。
  Q2:贵公司如何保证容器还在运行中,容器内服务已经挂掉,还能正常对外提供服务。
  目前是利用python开发了一些脚本实现对容器内部的资源的监控,后期运维平台会集成监控报警功能,对容器内部的资源和服务进行监控。
  Q3 贵公司使用的是什么网络?如何跨主机调用的,实例销毁后ip会变化吗。
  目前还是使用docker默认的网络,容器映射端口实现跨主机调用,容器内部ip发生变化对调用没有影响。
  Q4 日志也在容器里面吗? 如果研发要看日志怎么办呢.
  日志有些项目我们是将代码映射在宿主机上,开发要看就在宿主机看。不过后面我们运维平台也会支持查看指定文件或者日志。Q4 日志也在容器里面吗? 如果研发要看日志怎么办呢.
  日志有些项目我们是将代码映射在宿主机上,开发要看就在宿主机看。不过后面我们运维平台也会支持查看指定文件或者日志。Q6 nginx和php在一个容器中,一次构建发布需要多久?
  这个很快,拉镜像和代码是内网拉取,第一次可能稍慢2-3分钟,后面如果镜像没更新,只是更新代码,也就几秒完成。
  Q5 请问docker持久化存储是如何实现的?
  除了一些重要的应用的数据定期自动备份数据实现数据持久化,像数据库这种重要应用没有在容器内运行。
  Q6 nginx和php在一个容器中,一次构建发布需要多久?
  这个很快,拉镜像和代码是内网拉取,第一次可能稍慢2-3分钟,后面如果镜像没更新,只是更新代码,也就几秒完成。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-420953-1-1.html 上篇帖子: Docker 跟 NodeJs 最佳实践 下篇帖子: docker镜像文件导入与导出
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表