打开Docker的正确方式
Posted 图灵教育
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了打开Docker的正确方式相关的知识,希望对你有一定的参考价值。
先讲个大家熟悉的题外话——关于“傻瓜”化的问题。
一个新事物能流行起来,不外乎几个因素:解决实际问题、成本更低(性价比高)、使用简单或者新潮炫酷。
比如洗衣机、电冰箱这类电器商品已经成为我们生活之中不可或缺的必需品;说到性价比,大家自然会想到小米,在当时摩托罗拉等国际品牌占领市场主流的情况下,在小米加步枪这样一清二白的基础上,一下子发布了 2000 块钱的小米手机,而买别人家的要花4000 块钱(这些别人家基本都不健在了),可以说为中国移动互联网提速两年也不为过。不得不承认,我们能用到这么好的安卓手机,真得感谢小米(不过,大叔用 ios )。
还有一种产品,属于改进型创新,它的最大特点就是降低使用成本(不一定是金钱成本),让原本高大上的东西,变得更平民化,其代表就是“傻瓜相机”,即全自动相机。
如果说小米手机从价格成本方面变得迅速普及,“傻瓜相机”的出现则是因为降低了入门成本。
在“傻瓜相机”出现之前,照相的门槛还是挺高的,需要测光、设置快门速度、对焦等基本操作,除了操作繁琐之外,还需要测光仪等额外设备;在使用胶片相机的情况下,拍出一张满意的照片成本还是挺高的,对人的技术要求也很高。
后来,先后出现了自动曝光( AE )和自动对焦( AF )技术,搭载了这两个技术的“傻瓜相机”,不再需要拍照的人进行繁琐的操作,只需要对准目标、按下快门即可。对人的要求降低了许多,一般人也可以方便地拍摄照片了。
Konica C35AF,世界上第一台自动对焦的照相机,https://www.flickr.com/photos/121928043@N07/16731853311
“傻瓜”化的核心就是:降低使用难度,扩大受众范围。大叔用 iOS 的原因也一样:简单,不需要太多思考。
在容器领域, Docker 就可以理解为一种“傻瓜”式的容器。
其实在 Docker 出现之前,容器技术大概已经处于准战国时代了:
FreeBSD jail(2000)
Solaris Zones(2004)
RHEL OpenVZ(2005)
LXC(2008)
lmctfy(2013)
Docker(2013)
由于 OS 各不相同,所以谁都没有干死谁, Linux 底下自然是 LXC 最普及了。然而, LXC 的使用,也仅局限于各云服务提供商,或者内部有诸如提供隔离、多租户、高密度应用部署等需求的大公司等。甚至像 Google 这样的大公司,还可以任意自己制造先进的车轮。而小公司甚至个人,则是很难接触到这一技术的。
苛刻一点儿说, Docker 完全是 LXC 的“换汤不换药”,底子里是一样的,核心两大技术 cgroups 和 namespace 也都早已成熟。那问题是 LXC 都出现八九年了,怎么反而是后起之秀的 Docker 席卷整个容器界?
更有甚者,如果你是在 2015 甚至到了 2016 年才接触到 Docker 的话,那么很有可能你都没有听说过 LXC 这一技术。
假如我们将 Docker 用户分为两类:一类是传统的云计算服务提供商或者大公司内部的基础设施部门,他们需要为客户提供容器服务,我们称之为开发者用户;还有一类就是纯粹的最终用户,完全自用。
Docker 为什么会流行?尝试分析一下,其中有一个很直接、很重要的原因,那就是 Docker 实在是太“简单”、太“傻瓜”化了,小白都能用。
比如使用 LXC 的话,创建一个容器的姿势是这样的:
$ lxc-create -t centos -n centos-test01
$ lxc-start -n centos-test01 –d
$ netctl start lxcbridge
$ sysctl net.ipv4.ip_forward=1
$ iptables -t nat -A POSTROUTING -s 10.0.0.100/32 -j MASQUERADE
$ iptables -t nat -A PREROUTING -p tcp -m tcp --dport 80 \
-j DNAT --to-destination 10.0.0.100:80
而在Docker中,则是这样的:
$ docker run --name centos-test01 centos
6 行变 1 行,如果是你,会选择哪一种使用方式呢?
当然,这里我们并不打算对 Docker 的优势进行全面分析,重点关注的是 Docker 如何让用户变得“傻瓜”。
好了,我们已经用起了 Docker ,跑起了 mysql、nginx 等,对,我们正在运行着一个 Wordpress 站点,这个世界上最流行的 CMS 系统。而这一过程可能花了我们不到半天时间,毕竟我们没有手工去安装 LAMP 这套曾经的大神器。
暂时再回到相机的话题。
相机的进化并未停止,“傻瓜”虽然降低了拍摄门槛,但是随着计算机的发展,电子化也越来越变成一个趋势。后来数码相机、DSLR(数字单反相机) 等出现了,我们可以更轻松地对照片进行加工和分享。
随着智能手机的普及、移动互联网的发展,这一切又都可以通过手机来实现了。拿个单反“到此一游”式的旅行逐渐被大家以异类的眼光看待,手机在手,就可以随时记录身边的点点滴滴,快速和朋友、家人分享每一个美妙或者激动的瞬间。编辑照片也变得更容易,我们可以轻易地通过手指拖拖点点为图片润色,添加各种小装饰品,制作各种特效等。
一个产品渐渐地已经超出了产品自身的范畴,它会和很多周围相关的事务发生关系,互相影响,共同进化,我们一般称之为生态系统。
Docker 成功的另一点,就是它拥有一个还算不错的生态系统和社区。
如果把我们的软件分解一下,大概由几部分组成:应用程序(我们自己编写的代码)、中间件(我们使用的数据库、应用服务器、缓存、消息队列等软件)、数据(我们的价值所在)和网络连通。
除了应用程序需要我们自己编写之外,其余几部分都可以在 Docker 社区中找到解决方案。
前面我们运行的 Wordpress 的就是其中一例,一个很简单的例子。
假设我们运营很给力,访问量激增,尤其是午饭之后的一两个小时之内,一个容器实例已经撑不住了,每次手工去增、减实例大小又太麻烦,能搞定自动 scale 么?
比如,Wordpress 的数据库容器如果宕掉了,我再重新创建一个容器怎么保证原来数据的持久化?我能用容器部署一个 MySQL 集群么?
同时,我们对服务的运行状况也更加敏感了,毕竟我们已经是“大网站”了嘛。能把监控和日志聚合加上么?虽然你想到了 docker stats 和 docker logs ,但是总是觉得缺点什么 … …
过了几个月,公司业务一发不可收拾,流量翻了 10 倍,单台机器撑不住了, CTO 调查了一番,发现个新名词叫 Orchestration (多数情况下混同于编排、调度、集群管理等概念),什么 Mesos 啊、Swarm 啊、Kubernetes (简称 K8s)什么的貌似很火,撸起袖子搞一套。
先来套 Kubernetes 吧,来自 Google ,品牌保证、业界经验,那就试试吧。然而看了一天文档之后,你决定放弃了:安装这么复杂,还得翻墙,这个有难度,不“傻瓜”啊。
还是 swarm 吧,init 一下, join 一下,~~嗖~~ 的一下就好了!
…… ……
这么多的坑,这么多的解决方案,还有那么多的最佳实践,有没有一个地方,能集中介绍一下 Docker 生态系统或者社区中的这些方方面面?
有啊,这就是最近刚出的一本书,中文名叫做 《Docker经典实例》,英文原名 Docker Cookbook,还热乎乎的呢。这本书一定能满足你的一些疑问,帮你解决一些现实中困惑,为你介绍 Docker 生态系统中功能强大、实用的软件等。
就是这本 O'Reilly 的动物书。
看到这里你不会觉得这是一篇广告吧?
恩,没错,这就是一篇赤裸裸的广告啊。
这本书基本覆盖了我们在开发和生产环境下使用 Docker 的各大领域,既涵盖了运维管理,也涉及了开发。比如:
管理容器、挂载数据卷和容器连接
创建和共享镜像,使用私有 Registry,使用 Packer 构建 Docker 镜像
单主机或多主机的 Docker 网络,包括 OVS 、flannel、Docker network
处理 Docker 配置与开发等进阶问题,访问远程 Docker 服务,使用 API 和 Docker 交互
使用 Kubernetes 在分布式集群中部署多容器的应用程序
使用为 Docker 优化的新一代操作系统,比如 CoreOS、Rancher OS、Project Atomic 等
学习用于应用程序部署、持续集成、服务发现和编排的工具,Mesos、Swarm、Ansible等
在 Amazon AWS、Google GCE 和 Microsoft Azure 上使用 Docker
监控容器,并探讨不同的应用程序用例,包括 ELK、Logspout、InfluxDB、Grafana 和 cAdvisor 等内容
唯一的遗憾,就是本书里提到的软件,有些版本可能稍微老一些,或者原始的链接已经不存在了,不过并不影响我们去了解这个软件,本书给我们一个机会让我们知道这一软件,剩下的探险读者可以自行完成。
那么说重点,哪里买?
当然,各大网站都能买到:
京东:https://item.jd.com/12126210.html
亚马逊:https://www.amazon.cn/dp/B06X6G94VJ
当当:http://product.dangdang.com/24185666.html
Sébastien Goasguen
Citrix高级开源解决方案架构师,主要从事Apache CloudStack项目,帮助开发CloudStack生态系统。他目前是Apache CloudStack项目的副总裁,也是Apache libcloud项目管理委员会的成员。
刘斌
具有10余年软件开发经验,关注后台开发技术和各种编程语言。做过电子商务、金融、企业系统以及android手机开发,写过Delphi,也兼做系统管理员和DBA,最近在做与Docker相关的工作。
个人主页:http://liubin.org
目录展示
本书赞誉 xi
前言 xiii
第1章 Docker 入门 1
1.0 简介
1.1 在Ubuntu 14.04上安装Docker
1.2 在CentOS 6.5上安装Docker
1.3 在CentOS 7上安装Docker
1.4 使用Vagrant 创建本地Docker 主机
1.5 在树莓派上安装Docker
1.6 在OS X 上通过Docker Toolbox 安装Docker
1.7 在OS X 上通过Boot2Docker 安装Docker
1.8 在Windows 8.1 台式机上运行Boot2Docker
1.9 使用Docker Machine 在云中创建Docker 主机
1.10 使用Docker 实验版二进制文件
1.11 在Docker 中运行Hello World
1.12 以后台方式运行Docker 容器
1.13 创建、启动、停止和移除容器
1.14 使用Dockerfile 构建Docker 镜像
1.15 在单一容器中使用Supervisor 运行WordPress
1.16 使用两个链接在一起的容器运行WordPress 博客程序
1.17 备份在容器中运行的数据库
1.18 在宿主机和容器之间共享数据
1.19 在容器之间共享数据
1.20 对容器进行数据复制
第2章 创建和共享镜像 34
2.0 简介
2.1 将对容器的修改提交到镜像
2.2 将镜像和容器保存为tar 文件进行共享
2.3 编写你的第一个Dockerfile
2.4 将Flask 应用打包到镜像
2.5 根据最佳实践优化Dockerfile
2.6 通过标签对镜像进行版本管理
2.7 使用Docker provider 从Vagrant 迁移到Docker
2.8 使用Packer 构建Docker 镜像
2.9 将镜像发布到Docker Hub
2.10 使用ONBUILD 镜像
2.11 运行私有registry
2.12 为持续集成/部署在Docker Hub 上配置自动构建
2.13 使用Git 钩子和私有registry 建立本地自动构建环境
2.14 使用Conduit 进行持续部署
第3章 Docker网络 63
3.0 简介
3.2 将容器端口暴露到主机上
3.3 在Docker中进行容器链接
3.4 理解Docker容器网络
3.5 选择容器网络模式
3.6 配置Docker 守护进程iptables 和IP 转发设置
3.7 通过Pipework 理解容器网络
3.8 定制Docker 网桥设备
3.9 在Docker 中使用OVS
3.10 在Docker 主机间创建GRE 隧道
3.11 在Weave 网络上运行容器
3.12 在AWS 上运行Weave 网络
3.13 在Docker 主机上部署flannel 覆盖网络
3.14 在多台Docker 主机中使用Docker Network
3.15 深入Docker Network 命名空间配置
第4章 开发和配置Docker 96
4.0 简介
4.1 管理和配置Docker 守护进程
4.2 从源代码编译自己的Docker 二进制文件
4.3 为开发Docker 运行Docker 测试集
4.4 使用新的Docker 二进制文件替换当前的文件
4.5 使用nsenter
4.6 runc 简介
4.7 远程访问Docker 守护进程
4.8 通过Docker 远程API 完成自动化任务
4.9 从远程安全访问Docker 守护进程
4.10 使用docker-py 访问远程Docker 守护进程
4.11 安全使用docker-py
4.12 更改存储驱动程序
第5章 Kubernetes 116
5.0 简介
5.1 理解Kubernetes 架构
5.2 用于容器间连接的网络pod
5.3 使用Vagrant 创建一个多节点的Kubernetes 集群
5.4 在Kubernetes 集群上通过pod 启动容器
5.5 利用标签查询Kubernetes 对象
5.6 使用replication controller 管理pod 的副本数
5.7 在一个pod 中运行多个容器
5.8 使用集群IP 服务进行动态容器链接
5.9 使用Docker Compose 创建一个单节点Kubernetes 集群
5.10 编译Kubernetes 构建自己的发布版本
5.11 使用hyperkube 二进制文件启动Kubernetes 组件
5.12 浏览Kubernetes API
5.13 运行Kubernetes 仪表盘
5.14 升级老版本API
5.15 为Kubernetes 集群添加身份验证支持
5.16 配置Kubernetes 客户端连接到远程集群
第6章 为Docker 优化的操作系统 152
6.0 简介
6.1 在Vagrant 中体验CoreOS Linux 发行版
6.2 使用cloud-init 在CoreOS 上启动容器
6.3 通过Vagrant 启动CoreOS 集群,在多台主机上运行容器
6.4 在CoreOS 集群上通过fleet 启动容器
6.5 在CoreOS 实例之间部署flannel 覆盖网络
6.6 使用Project Atomic 运行Docker 容器
6.7 在AWS 上启动Atomic 实例运行Docker
6.8 快速体验在Ubuntu Core Snappy 上运行Docker
6.9 在AWS EC2 上启动Ubuntu Core Snappy 实例
6.10 在RancherOS 中运行Docker 容器
第7章 Docker 生态环境:工具 175
7.0 简介
7.1 使用Docker Compose创建WordPress站点
7.2 使用Docker Compose在Docker上对Mesos和Marathon进行测试
7.3 在Docker Swarm 集群上运行容器
7.4 使用Docker Machine创建跨云计算服务提供商的Swarm集群
7.5 使用Kitematic UI 管理本地容器
7.6 使用Docker UI 管理容器
7.7 使用Wharfee 交互式shell
7.8 使用Ansible 的Docker模块对容器进行编排
7.9 在Docker主机集群中使用Rancher管理容器
7.10 使用Lattice 在集群中运行容器
7.11 通过Apache Mesos 和Marathon 运行容器
7.12 在Mesos 集群上使用Mesos Docker 容器化
7.13 使用registrator 发现Docker 服务
第8章 云计算中的Docker 208
8.0 简介
8.1 在公有云中运行Docker
8.2 在AWS EC2 上启动Docker 主机
8.3 在Google GCE 上启动Docker 主机
8.4 在Microsoft Azure 上启动Docker 主机
8.5 在AWS 上使用Docker Machine 启动Docker 主机
8.6 在Azure 上使用Docker Machine 启动Docker 主机
8.7 在Docker 容器中运行云服务提供商的CLI
8.8 使用Google Container registry 存储Docker 镜像
8.9 在GCE Google-Container 实例中使用Docker
8.10 通过GCE 在云中使用Kubernetes
8.11 配置使用EC2 Container Service
8.12 创建一个ECS 集群
8.13 在ECS 集群中启动Docker 容器
8.14 利用AWS Beanstalk 对Docker 的支持在云中运行应用程序
第9章 监控容器 248
9.0 简介
9.1 使用docker inspect 命令获取容器的详细信息
9.2 获取运行中容器的使用统计信息
9.3 在Docker 主机上监听Docker 事件
9.4 使用docker logs 命令获取容器的日志
9.5 使用Docker 守护进程之外的日志记录驱动程序
9.6 使用Logspout 采集容器日志
9.7 管理Logspout 路由来存储容器日志
9.8 使用Elasticsearch 和Kibana 对容器日志进行存储和可视化
9.9 使用Collectd 对容器指标进行可视化
9.10 使用cAdvisor 监控容器资源使用状况
9.11 通过InfluxDB、Grafana 和cAdvisor 监控容器指标
9.12 使用Weave Scope 对容器布局进行可视化
第10章 应用用例 272
10.0 简介
10.1 CI/CD:构建开发环境
10.2 CI/CD:使用Jenkins 和Apache Mesos 构建持续交付工作流
10.3 ELB:使用confd 和registrator 创建动态负载平衡器
10.4 DATA:使用Cassandra 和Kubernetes 构建兼容S3 的对象存储
10.5 DATA:使用Docker Network 构建MySQL Galera 集群
10.6 DATA:以动态方式为MySQL Galera 集群配置负载平衡器
10.7 DATA:构建Spark 集群
关于作者 298
关于封面 298
赠书活动
你是否想在自己的平台上快速将Docker运用于生产环境,但是觉得用起来不轻松?或者你竟然还没有认真读过Docker的相关资料或图书?
Docker可不单单是作为明星技术存在的,它会实实在在简化配置。评论中说说你所知道的Docker,或者你阅读这篇文章的感悟。精选评论送出5本《Docker经典实例》,截止3月3日14:00。
☟ 【阅读原文】购买《Docker经典实例》 亚马逊中文全场满100减20最后一天!
以上是关于打开Docker的正确方式的主要内容,如果未能解决你的问题,请参考以下文章