Docker之道 -廖述峰
传统部署的缺陷 1.环境管理复杂 -发型版不一致,lib库版本不一致,依赖不一致,bug难预测 -服务与服务之间的兼容问题 -线上环境的不可控因素太多 2.服务器资源浪费 - 开发/测试/运维都需要一定数量服务器 - 服务器满载率低,大部分资源闲置 3.应用迁移 - 系统和应用的耦合度高,新开一个项目或环境,一切从0开始构建。
传统部署的应对方式 增加服务器,统一发行版,增加人手 虚拟化技术和云计算的开展-企业内部使用虚拟化 技术,例如OpenStack或者直接使用云主机 自动化部署
洗脑环节 -Docker大法好
你会怎样构建一个Apache Apache的依赖安装 Apache安装 Apache的配置 功能测试 http://www.cnblogs.com/itech/archive/2013/04/06/3002762.html
Docker是怎么构建Apache的?
Docker with Jenkins 在jenkins中build一个apache容器 已经成功,打开看看吧
built by Jenkins
“Life is short, We use Docker.” –马克吐温
Docker是什么 Docker是一个go语言编写的封装了lxc的container容器引擎。docker技术的核心是一个操作系统级的虚拟化方案, 可以概括为四个方面:隔离,安全,便携,可度量。 隔离,安全=namespace 可度量=cgroups 便携(不同目录挂载到统一虚拟容器路径)=AUFS
Docker沙箱 lxc docker image docker container application
Docker的优势 简化配置: 一个镜像,到处运行 代码流水线管理:从开发到上线均一致的环境 提高开发效率:开发更能贴近生产,测试质量前移 整合服务器:降低硬件成本 调试能力:随时回滚,随时开分支 快速部署
Dockerfile构建Apache 1.创建dockerfile,准备配置/静态文件 root@iZ2893wjzgyZ:/home/apache# ls apache-config.conf Dockerfile website 2.构建一个apachetest镜像 root@iZ2893wjzgyZ:/home/apache# docker build -t apachetest . 3.运行一个名为testwebsite的apache容器 root@iZ2893wjzgyZ:/home/apache# docker run -d -p 8085:80 --name testwebsite apachetest 4.打开网页 Apache演示站点
Dockerfile FROM ubuntu:latest MAINTAINER Bibin Wilson <bibin.w@hcl.com> RUN apt-get update RUN apt-get -y upgrade RUN apt-get -y install apache2 ENV APACHE_RUN_USER www-data ENV APACHE_RUN_GROUP www-data ENV APACHE_LOG_DIR /var/log/apache2 ENV APACHE_LOCK_DIR /var/lock/apache2 ENV APACHE_PID_FILE /var/run/apache2.pid EXPOSE 80 ADD website /var/www/website ADD apache-config.conf /etc/apache2/sites-enabled/000-default.conf CMD /usr/sbin/apache2ctl -D FOREGROUND
built by docker
一些可能的疑问 一定要用dockerfile吗? -命令行/dockerfile/fig.. 如何去修改配置文件? -v :映射路径或ADD命令 如何查看应用状态? - logs -f 容器之间怎么连接? - -link
docker应用场景举例 1.web应用代码在github上,github上代码更新后,用jenkins自动部署。 jenkins启动,pull代码到docker image,然后push到docker hub,然后在几 十台机器上pull新的image,然后启动新的container,关闭旧的container。 2.你可以用docker把数据库的数据与数据库程序本身分离开:用一个container A作为数据存储,然后另一个container B运行数据库。当你想升级数据库时,用新的container C替换掉container B即可,只需一分钟就可以搞定。 3.把docker作为每日集成测试的容器,当容器带-r参数运行,会在指定任务完成后删除自身,通过-v参数可以将测试结果共享到host(测试机器)上,这样可以快速完成测试环境的自动化测试集的回归,而容器基本上是秒开!
容器管理系统 UI管理:DockerUI,Seagull 集群管理:Kubernetes Paas平台:Flynn,Deis,Dokku
Seagull
docker开源项目 Flynn:一个使用Go语言编写的开源PaaS平台 Deis:基于Docker和CentOS构建了一个类Heroku的PaaS系统 Dokku:一个迷你版的Heroku Fig:一个基于Docker的用于快速搭建开发环境的工具 Drone:一个使用Go语言编写的基于Docker的持续集成系统。 Kubernetes:Google的容器集群管理工具,Kubernetes支持跨平台, 它可以在除Google以外的其它云平台中运行。 Boot2Docker:专为Docker而设计的轻量级Linux发型包,解决 Windows或者OS X用户不能安装Docker的问题。
讲解内容 传统部署的缺陷(3分钟) 传统部署的应对方式(3分钟) Docker应用场景(8分钟) 容器构建方式Shell-dockerfile - FIG(5分钟) docker的一些概念 镜像/容器/常见参数的意义…. 容器互联与目录挂载(5分钟) 讲解两个demo是如何工作的并答疑(20分钟) Docker容器的管理方式以及一些开源项目