docker入门指南(转载)

关于 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

原文地址: http://bg.biedalian.com/2014/11/20/docker-start.html

没错, 这条神奇的命令终于让 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> 来非常方便的查看这些帮助

觉得实用就赶紧试试吧!

时间: 2024-12-10 23:25:15

docker入门指南(转载)的相关文章

Docker入门指南

地址:docker入门指南 更换国内镜像源 docker store地址默认是在国外,下载速度很慢,自行更换国内docker加速地址. 名词解释 image: 镜像containers: 容器docker-machine: docker虚拟主机docker store: docker存储云 术语 Image 和 ContainerImage可以理解为一个系统镜像,Container是Image在运行时的一个状态.如果拿虚拟机作一个比喻的话,Image就是关机状态下的磁盘文件,Container就

opencv入门指南(转载)

转载链接:http://blog.csdn.net/morewindows/article/details/8426318 网上的总结的一些用openncv的库来做的事: 下面列出OpenCV入门指南系列目录,以方便大家查看: 文章链接:http://blog.csdn.net/morewindows/article/details/8426318 下面这些链接在文章末尾: 1.<[OpenCV入门指南]第一篇安装OpenCV> 2.<[OpenCV入门指南]第二篇缩放图像> 3.

[转载]TFS入门指南

[原文发表地址] Tutorial: Getting Started with TFS in VS2010 [原文发表时间] Wednesday, October 21, 2009 1:00 PM 本月初,我们发布了TFS新基础配置.该配置为建立支持源码管理,工作项和生成(builds)的TFS版本提供了便利. 这是一个好机会将你在VSS(Visual Source Safe)上的资源迁移到TFS,并且还可以选用一些新的特性.现在VS2010 Beta2的正式版已经发布了,下面是该系统的入门指南

【部分补充】【翻译转载】【官方教程】Asp.Net MVC4入门指南(4):添加一个模型

4. 添加一个模型 · 原文地址:http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/adding-a-model · 译文地址:http://www.cnblogs.com/powertoolsteam/archive/2012/12/17/2821495.html 本节博主前言:本节需要连接本地服务器,建议Sql Sever 2012 或 2008.如何生成自己的连接字符串请看 http://www.

【翻译转载】【官方教程】Asp.Net MVC4入门指南(3):添加一个视图

3. 添加一个视图 · 原文地址:http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/adding-a-view · 译文地址:http://www.cnblogs.com/powertoolsteam/archive/2012/11/06/2756711.html Asp.Net MVC4入门指南(3):添加一个视图 在本节中,您需要修改HelloWorldController类,从而使用视图模板文件,

【翻译转载】【官方教程】Asp.Net MVC4入门指南(2):添加一个控制器

2. 添加一个控制器 · 原文地址:http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/adding-a-controller · 译文地址:http://www.cnblogs.com/powertoolsteam/archive/2012/11/02/2751015.html Asp.Net MVC4入门指南(2):添加一个控制器 MVC代表: 模型-视图-控制器 .MVC是一个架构良好并且易于测试和

Docker入门教程(一)介绍

http://dockone.io/article/101 Docker入门教程(一)介绍 [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第一篇,介绍了Docker的基础概念以及Docker的安装. Docker是一个新的容器化的技术,它轻巧,且易移植,号称“build once, configure once and run anywhere(译者注:这个就不翻译了,翻译出来味道就没了)”.本文是Flux7的Docker系列教程的第一部分.请和这

物联网操作系统HelloX开发者入门指南

HelloX开发者入门指南 HelloX是聚焦于物联网领域的操作系统开发项目,可以通过百度搜索"HelloX",获取详细信息.当前开发团队正在进一步招募中,欢迎您的了解和加入.如果您希望加入HelloX的开发团队,建议参照下列步骤进行操作: 1.      首先,请亲手熟悉和操作HelloX操作系统,这是我们开发的核心组件之一,所有其它组件(包括后台组件,终端产品等)都围绕HelloX操作系统展开.这一步很容易操作,请从github(github.com/hellox-project/

Java程序员的Golang入门指南(下)

Java程序员的Golang入门指南(下) 4.高级特性 上面介绍的只是Golang的基本语法和特性,尽管像控制语句的条件不用圆括号.函数多返回值.switch-case默认break.函数闭包.集合切片等特性相比Java的确提高了开发效率,但这些在其他语言中也都有,并不是Golang能真正吸引人的地方.不仅是Golang,我们学习任何语言当然都是从基本语法特性着手,但学习时要不断地问自己:使这门语言区别于其他语言的"独到之处"在哪?这种独到之处往往反映了语言的设计思想.出发点.要解决