原创:Docker在云家政的应用 谢绝复制粘贴内容
我们公司目前大规模使用了Docker,目前除了数据库应用,其他所有应用都在Docker容器内运行,下面我就Docker在公司的应用做一些分享。、
首先我介绍一下公司的背景,公司属于中小型创业公司,服务器数量不多,但是为了解决一些问题,我们引入了现在比较火的Docker技术。
看一下我们在没用Docker之前遇到的问题:
1、线上环境和测试环境不完全一致,导致测试好的功能上线后会出现一些BUG。
2、部署新项目步骤繁琐,批量部署运行环境后,需要根据每个项目不同的情况,手动修改配置参数。
3、新项目环境部署耗费时间长。有些项目部署需要几十分钟甚至更长时间
4、操作系统版本的差异,导致批量部署遇到麻烦
5、不能跨平台部署环境。
有了这些问题,我们就要解决这些问题
这里我再简单对Docker做一下介绍
Docker是一个新的容器化开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目,项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议,基于 Google 公司推出的 Go 语言实现
Docker 提供了一个可以运行你的应用程序的容器,它可以将应用以及依赖包到一个可移植的容器中,然后发布到任何 Linux机器上
Docker 扩展了 Linux 容器(Linux Containers)通过一个高层次的 API 为进程单独提供了一个轻量级的虚拟环境,有点类似虚拟机的概念
了解了Docker后,接下来看我们是怎么把Docker用起来的,这里容我再介绍一下公司的背景,公司属于中小型创业公司,服务器数量不多,没有用高大上的Kubernetes、Swarm等Docker集群管理工具
我们都知道为了方便Docker的部署,一般都需要一个Docker私有仓库来存放镜像,我们也有自己的私有仓库,看一下我们公司的私有镜像仓库是什么样子的,里面都存放了哪些镜像。
我们的镜像仓库里面存放了应用服务镜像,如Tomcat,Nginx等,API服务镜像,NoSQL镜像,如Redis服务,MongoDB服务,ES服务等
这些镜像都是根据我们自己的实际需要打包好的环境镜像,新项目需要什么服务,直接拉取私有仓库的镜像,快速的部署。
有了镜像仓库,看一下我们是怎么制作镜像的
我们使用了Dockerfile制作镜像,每个环境都有对应的Dockerfille文件,可以根据实际需要随时调整镜像
以我们其中一个应用服务环境镜像为例(Nginx+php),看一下我们的镜像制作过程:
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 提交镜像到私有仓库。
接下来看一下我们如何利用镜像快速部署环境的。
首先我们服务器在安装完操作系统,初始化系统的时候就会把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部署环境的流程后,有一个问题,同一个镜像运行起来的容器如何区分测试环境和线上环境呢。
为了区分容器运行的环境,接下来要用到云家政的运维平台了。
云家政运维平台运维是自主开发的平台,平台集成了环境管理、配置管理、发布管理、任务管理等功能
在环境管理会先创建好需要的多套环境,例如beta、线上。
创建完环境后,会为每个环境添加不同的配置参数,然后发布的时候选择主机和镜像及要发布的环境就可以自动化部署一套环境。
例如指定服务器A部署A1项目的测试环境:
运维平台自动登录A服务器,拉取A1项目需要的环境镜像,拉取A1项目代码,再拉取平台上为A1项目配置好的测试环境参数,然后启动容器就可以自动部署一套可运行的环境。
看一下我们环境管理的界面:
下面是环境参数的管理界面:
对不同的环境 配置不同的参数。
运维平台里面的配置管理,可以在线管理线上、测试环境等配置信息,配置管理可以添加、删除、修改代码连接的数据库信息、redis信息等配置信息.
运维平台提供测试环境、线上环境的配置信息API接口,服务器容器启动的时候会根据服务器类型去获取不同的配置信息API来获取不同的参数,并将服务器部署成不同的应用环境。
实现逻辑大致是上面的图形展示的这样。
接下来看一下我们通过运维平台部署好的应用的界面:
主机就是发布好的主机,版本是容器运行镜像的版本,状态是容器的运行状态,在这里可以对容器进行远程管理。
目前云家政所有服务除了数据库是直接运行在操作系统上,其他所有应用服务都实现了容器化,每个项目服务都有对应的镜像,可以在最快几秒内实现服务的快速部署。
运维平台通过调用服务器上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分钟,后面如果镜像没更新,只是更新代码,也就几秒完成。
原创:Docker在云家政的应用 谢绝复制粘贴内容的更多相关文章
- Kubernetes+Docker的云平台在CentOS7系统上的安装
Kubernetes+Docker的云平台在CentOS7系统上的安装 1.运行VirtualBox5. 2.安装CentOS7系统. 注意:选择Basic Server类型 安装过程略. 3.修改计 ...
- [原创]Docker学习记录: Shipyard+Swarm+Consul+Service Discover 搭建教程
网上乱七八糟的资料实在是太多了, 乱, 特别乱, 而看书呢, 我读了2本书, 一本叫做<>, 另一本叫做<< Docker进阶与实战>> 在 服务发现这块讲的又不清 ...
- 原创docker dcos 的安装
原创哈,上个星期无意间发现了一个可以好东西 DC/OS https://dcos.io 这个是官网哈 然后就痛苦的折磨了一个多星期; 基本是参照到https://dcos.io/docs/1.7/ad ...
- Docker在云环境中的应用实践初探:优势、局限性与效能评测
作者 商之狄 发布于 2014年11月10日 本文依据笔者所在团队的一些近期开发和应用的实践,整理出一些有意义的信息,拿出来和社区分享.其中既包括在云端应用Docker与相关技术的讨论,同时也有实施过 ...
- 附001.Docker阿里云Registry加速器配置
一 安装配置docker 1.1 安装docker 见<002.docker版本及安装>. 1.2 配置国内阿里云加速器 见<002.docker版本及安装>. 二 配置阿里云 ...
- [原创]阿里云RocketMQ踩过的哪些坑
由于公司的最近开始使用RocketMQ来做支付业务处理, 便开启了学习阿里云RocketMQ的学习与实践之路, 其中踩了不少的坑, 大部份是由于没有仔细查看阿里云的技术文档而踩的坑. 但是有一个非常大 ...
- centos7 安装docker-ce ,最新版本docker,docker阿里云加速
直接用yum install docker -y安装的docker版本为1.12,但是docker发展很快,现在都17.06.2了.docker-ce是指docker的社区版 卸载老版本的 docke ...
- Docker私有云管理平台————Docker Shipyard
一.shipyard中文版安装(CentOS) 注:本文安装操作均在root用户下,安装前需先安装Docker (传送门) 下载所需docker镜像 docker pull rethinkdb doc ...
- 配置docker阿里云加速器
1. 安装/升级Docker客户端 推荐安装1.10.0以上版本的Docker客户端,参考文档 docker-ce 2. 配置镜像加速器 针对Docker客户端版本大于 1.10.0 的用户 您可以通 ...
随机推荐
- 【JAVA】配置JAVA环境变量
系统变量新建,添加 变量名JAVA_HOME 变量值为C:\Java\jdk版本号 修改 Path为 %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
- Java 多态透析 详细理解
1:什么是多态 一个对象的多种状态 (老师)(员工)(儿子) 教师 a =老钟; 员工 b =老钟; 2:多态体现 父类引用变量指向了子类的对象 Father f = new Son ...
- Windows Redis默认配置文件,Redis配置不生效解决方案
Windows Redis默认配置文件,Redis配置不生效解决方案, Windows Redis自启动配置不生效解决方案,Windows Redis增加自动启动服务 >>>> ...
- Centos 6.5 安装python3.6
废话不多说,直接上步骤 wget https://www.python.org/ftp/python/3.6.2/Python-3.6.2rc1.tgz 进入 https://www.python.o ...
- 智联招聘 卓聘IM演进过程
1. 卓聘IM开发背景 智联卓聘是智联旗下高端人才招聘平台,成立快4年了,业务增涨每年以100%速度增涨,业务增涨快在开发和上线速度要求也比较高. 2016年6月提出IM开发需求,7月初上线,开发人 ...
- 软件安装(JDK+MySQL+TOMCAT)
一,JDK安装 1,查看当前Linux系统是否已经安装了JDK 输入 rpm -qa | grep java 如果有: 卸载两个openJDK,输入rpm -e --nodeps 要卸载的软件 2,上 ...
- crm维护踩坑记(一)
目录 antd es6 Object.entries() Object.keys() Object.getOwnPropertyNames() 很神奇的用法!!! eslint 傻逼 其他 参考 an ...
- 编写高质量代码改善C#程序的157个建议:第17个建议之多数情况下使用foreach进行循环遍历
今天是我看<编写高质量代码:改善C#程序的157个建议>第二遍的时候了,看完这本书的确是受益匪浅,学到了很多东西,也明白了很多道理. 里面的代码我每个都调试了一遍,有时候是有些出入的,可能 ...
- 51nod_1181:质数中的质数
题目链接 #include<bits/stdc++.h> using namespace std; typedef long long LL; const LL N=1e6; //vect ...
- Spring MVC的实现原理
Spring提供了DispatcherServlet,这个类不仅负责实现请求转发,还负责启动一个WebApplicationContext容器. 按照Spring一贯的IoC哲学,所有的Control ...