docker入门指南(转载)
原文: http://bg.biedalian.com/2014/11/20/docker-start.html
关于 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>
来非常方便的查看这些帮助
觉得实用就赶紧试试吧!
docker入门指南(转载)的更多相关文章
- Docker 入门指南——常用命令
前面已经介绍了 Docker 的安装方式,本文总结一下使用 Docker 的基本概念和常用命令. 基本概念 镜像 Image 镜像是一些打包好的已有的环境,可以被用来启动和创建容器 容器 Contai ...
- Docker 入门指南
Docker 入门指南 目录 基础概念 安装教程 基本操作 常用安装 构建操作 容器编排 壹.基础概念 什么是Docker? Docker是基于Go开发的应用容器引擎,属于 Linux 容器的一种封装 ...
- Docker入门(转载)
Docker入门 一.Docker 1.什么是容器? 容器就是将软件打包成标准化单元,用于开发.交付和部署.容器是轻量的.可执行的独立软件包 ,包含软件运行所需的所有内容:代码.运行时环境.系统工具. ...
- docker入门实例(转载)
1.Docker 是什么?Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux 或 Windows 机器上( 摘自百度 ) ...
- Docker 入门指南——部署常用服务示例
MongoDB FROM centos:centos7 MAINTAINER The CentOS Project <cloud-ops@centos.org> RUN yum -y up ...
- Docker 入门指南——资源工具篇
好工具 dive wagoodman/dive A tool for exploring each layer in a docker image 参考 用 Dive 看 Docker Image 裡 ...
- Docker 入门指南——Dockerfile 指令
COPY 复制文件 格式: COPY [--chown=<user>:<group>] <源路径>... <目标路径> 源路径可以是多个,甚至可以使通配 ...
- webpack入门指南(转载)
什么是 webpack? webpack是近期最火的一款模块加载器兼打包工具,它能把各种资源,例如JS(含JSX).coffee.样式(含less/sass).图片等都作为模块来使用和处理. 我们可以 ...
- Docker(一):Docker入门教程
如今Docker的使用已经非常普遍,特别在一线互联网公司.使用Docker技术可以帮助企业快速水平扩展服务,从而到达弹性部署业务的能力.在云服务概念兴起之后,Docker的使用场景和范围进一步发展,如 ...
随机推荐
- git pull 指定版本
git init git remote add origin git@bitbucket.org:huashiyiqike/lstm-hf.git git pull origin master
- SSIS:控件清单
Control Flow 控制流程 Containers 容器 For Loop Container Foreach Loop Container Sequence Container Core Ta ...
- ios 关于文件操作 获取 文件大小
分类: Apple IPhone2012-06-28 11:31 4664人阅读 评论(0) 收藏 举报 ios语言manager测试c c语言 实现 #include "sys/stat ...
- 再谈LRU双链表内存管理
N年前我写了个双链表也发了博客,还添了代码.但是那个代码不但复杂,而且还有有问题的,一直懒得整理,放在空间误导别人.最近在写服务端,今天抽点空补一篇. 关于LRU网上随便搜,有过后端经验的人应该很多都 ...
- ML的灌水现象
(http://demonstrate.ycool.com/post.3137870.html) 看了几天 paper 和书,发现自己果然就是 zt好多东西就是不懂,那些人做的真快,我才建立起一种大致 ...
- 基于SWFUpload的angular上传组件
回顾 由于工作内容比较多,特别是架构方面,需要耗费很多的时间调整.重构,因此很久没有写文章了. 话就不多说了,直接进入主题. 实现 首先分析一下SWFUpload初始化的时候,需要传入当前触发上传的元 ...
- Android View自动生成插件
在ButterKnife这样强大的注入库出来之后,使用注入进行UI开发已经非常普遍.但考虑到效率.学习成本等问题,findViewById方式仍然是不错的选择. 但是当页面UI变得复杂后,我们从Lay ...
- 资源 | 数十种TensorFlow实现案例汇集:代码+笔记
选自 Github 机器之心编译 参与:吴攀.李亚洲 这是使用 TensorFlow 实现流行的机器学习算法的教程汇集.本汇集的目标是让读者可以轻松通过案例深入 TensorFlow. 这些案例适合那 ...
- 代码演示 .NET 4.5 自带的 ReadonlyCollection 的使用
代码如下: 1. using System; using System.Collections.Generic; using System.Linq; using System.Text; using ...
- 【转】为什么很多看起来不是很复杂的网站,比如 Facebook、淘宝,都需要大量顶尖高手来开发?
先说你看到的页面上,最重要的几个:[搜索商品]——这个功能,如果你有几千条商品,完全可以用select * from tableXX where title like %XX%这样的操作来搞定.但是— ...