UDN-企业互联网技术人气社区

板块导航

浏览  : 10418
回复  : 14

[教程技巧] Docker入门教程指南

[复制链接]
楼台的头像 楼主
发表于 2015-7-17 13:01:27 | 显示全部楼层 |阅读模式
  关于 Docker

  今天云平台的同事提到, 现在的运维就是恶性循环, 因为大家都在申请机器, 显然的是, 大家申请机器都是按照自己的峰值申请的, 而为了保证突发状况, 如 ddos, 双11 等, 申请者甚至会两倍于自己的峰值去估算自己的服务. 由于资源紧张, 云平台会对其削减, 因为云平台也要为公司减少运维成本, 可能原来申请10台机器最后变成给5台, 而最终有经验的申请者会直接申请20台, 然后等削减成10台(正如鲁迅所说, 如果不说把屋顶掀了, 中国人根本不会同意在屋里装个窗户)

  申请容易而回收难, 云平台并没有能力去监控每台机器的使用量, 就算他们找到使用资源大大浪费的机器, 他们也难以说服拥有机器的团队回收其机器, 最终, 大量超高配的机器(比如64g 内存, 16核), 就贡献着几百的 qps, 造成极大的浪费

  也许自动化运维是每个云平台的目标, 将运维自动化, 私有化, 最后公有化, 而当今大热 docker 就是解决运维困境的一剂良药

  什么是 docker? 为了更好理解, 你可以直接和别人说它是虚拟机, 实际上 docker 并不是虚拟机, 它做的是 linux 的隔离, 但它的隔离做的如此之真实以至于让人觉得自己拥有可以一台完整的 linux 系统

  那 docker 和 虚拟机具体是什么区别呢, 虚拟机在底层模拟出各种硬件, cpu, 硬盘之类的, 而 docker 是在软件层面给资源分组, docker 性能无限接近原生, 因为 docker 用的就是系统自己的进程, 而虚拟机做的再好, 也做不出原生的感觉

  docker 的隔离技术源自于 Linux 容器 LXC(linux container), 听起名字就知道, 这和沙箱应该差不多, 可以把东西分开放, 也就是隔离的意思, 甚至可以在某些仓库中看到 docker 的名字叫 lxc-docker

  而 LXC 又是基于 cgroup 的 namespace, chroot 等, 由于我并不懂这些, 但 namespace 可以帮助我们理解, 就像我们写程序一样, 这是一个命名空间, 与其他 namespace 相区别

  cgroup 对于 docker 是至关重要的, 了解它才会觉得 docker 不神秘, cgroup 全称为 control group, 是 linux 内核提供的功能, 简单的说, 它的作用就是把系统运行的进程按用户自定义的群组区分, 也就是说 一个 docker, 一个 group

  cgroup 有限制使用资源的能力

  blkio -- 这个子系统为块设备设定输入/输出限制,比如物理设备(磁盘,固态硬盘,USB 等等)

  cpu -- 这个子系统使用调度程序提供对 CPU 的 cgroup 任务访问

  cpuacct -- 这个子系统自动生成 cgroup 中任务所使用的 CPU 报告

  cpuset -- 这个子系统为 cgroup 中的任务分配独立 CPU(在多核系统)和内存节点

  devices -- 这个子系统可允许或者拒绝 cgroup 中的任务访问设备

  freezer -- 这个子系统挂起或者恢复 cgroup 中的任务

  memory -- 这个子系统设定 cgroup 中任务使用的内存限制,并自动生成由那些任务使用的内存资源报告

  net_cls -- 这个子系统使用等级识别符(classid)标记网络数据包,可允许 Linux 流量控制程序(tc)识别从具体 cgroup 中生成的数据包

  ns -- 名称空间子系统

  看到上面的 cgroup 配置属性真的是恍然大悟, docker 成为当今最热的运维神器一点都不奇怪, 它简直就是为了运维而生, 弹性计算, 资源报表, 暂停服务, 资源限制 根本不在话下

  入门教程

  帮 docker 吹了这么多牛, 得说说具体怎么用

  安装

  不管你是什么系统, 你应该首先尝试脚本一键安装, 也是官方推荐的方法

  sudo curl -sL https://get.docker.io/ | sh
  如果你很不幸的失败了, 那你也许是苦逼的 centos 或者 redhat 使用者, 那建议你使用

  yum search docker
  运气好的话你可以找到一个叫 docker.io 的程序, 没错就是他

  如果再不行, 恩, 那就只能上官网看英语安装文档了

  不得不承认我至今都没有成功的从源码安装过

  运行

  docker 也需要一个 daemon(后台), 所以首先要启动 docker 服务(不知为啥很多教程根本不提这一步)

  sudo docker -d
  # 或者
  sudo docker -H tcp://127.0.0.1:4243 -d
  如果没报啥错误, 并且 docker images 也能看到一个列表目录而不是报错, 那少年你一定是成功了

  docker 依赖系统模块 bridge, 可以用 modprobe bridge 来查看有没有

  阿里云默认是启动不了 docker 的, 输入 route del -net 172.16.0.0 netmask 255.240.0.0 可解决

  使用

  使用前你不得不了解两个概念, 一个叫 image, 一个叫 container, 对初学者来说这俩可能意思有点接近或者混淆, 看这些比喻也许你一下子就明白了, image 是只读的模板, 用来生成你需要的 container, 而 container 也可以变成新的 image

  使用 docker 就是使用 container, 而 container 来自于 image, 因此你需要先有个 image, docker 的操作像极了 git, 你可以这样下载一个 image

  docker pull ubuntu
  这样你就有了一个 ubuntu image, 可以用 docker images 看到这个新的 image

  使用这个 image, 可以向它发送一个命令, docker run ubuntu echo hello docker

  当然, 没人会这么无聊, come on! 我们需要像虚拟机一样使用它, 搭建属于我们自己的环境, 自己的系统, 把搭建完成的 container 变成一个新的 image, 这才是我们的目标!

  docker run -it ubuntu /bin/bash
  没错, 这条神奇的命令终于让 docker 变得有趣起来, 它让我们像 ssh 进入虚拟机一样操作, 翱翔

  退出可以用 exit, 或者 CTRL + D

  可惜的是, 一旦退出, container 不在维持了, 我们不可能一直在 container 中不出来, 但我们也要保持 container 的状态, 那怎么办呢

  docker run -itd ubuntu /bin/bash # 后台执行 container

  docker ps # 找到后台执行的 container id 或昵称

  docker attach <container id> # 重新 attach 这个 container
  注意, 这时候如果 exit 依然会终止这个 container, 要想 detach 跳出一个 container, 你需要使用 CTRL + P, CTRL + Q, 这样我们就又能用 attach 重新进入 container, 真是来去自如

  也许你不了解这些命令参数的意思, 不要紧, 本文并不准备当一个解释参数的大妈, docker 像 git, svn 那样可以用 docker help <command> 来非常方便的查看这些帮助

  如果觉得还是没有看明白或者意犹未尽,下面的这些教程相信一定能帮到你




发表于 2015-7-17 15:03:21 | 显示全部楼层
不错的入门指南,后面推荐的帖子也很精彩
使用道具 举报

回复

发表于 2015-7-17 15:03:35 | 显示全部楼层
好帖子,收藏了
使用道具 举报

回复

发表于 2015-7-20 14:20:12 | 显示全部楼层
什么场景 使用Docker
使用道具 举报

回复

发表于 2015-7-20 20:51:16 | 显示全部楼层
建议楼主赶紧换个头像,摇头摇的不想看了,头晕!!!@楼台
使用道具 举报

回复

发表于 2015-7-21 16:40:18 | 显示全部楼层
收藏了
使用道具 举报

回复

发表于 2015-8-29 08:49:55 | 显示全部楼层
使用道具 举报

回复

发表于 2015-9-2 08:25:05 | 显示全部楼层
docker相当于虚拟机里再装一次虚拟机?
使用道具 举报

回复

发表于 2015-9-15 15:48:40 | 显示全部楼层
这只喵太可怜了
使用道具 举报

回复

发表于 2015-10-10 09:40:49 | 显示全部楼层
扩展教程很不错
点评 ( 1 ) 收起 / 展开点评

奈何大勇 2016年05月24日 13:42 详情 回复

谢谢分享!

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们
联系我们
  • 电话:010-86393388
  • 邮件:udn@yonyou.com
  • 地址:北京市海淀区北清路68号
移动客户端下载
关注我们
  • 微信公众号:yonyouudn
  • 扫描右侧二维码关注我们
  • 专注企业互联网的技术社区
版权所有:用友网络科技股份有限公司82041 京ICP备05007539号-11 京公网网备安1101080209224 Powered by Discuz!
快速回复 返回列表 返回顶部