docker share

摘要:(abstract)

docker 到底是什么,具体做什么事情,解决什么问题,是不是感觉docker 很火,相信大部分人都有这个疑问,我也有,而后就开始了一段时间的学习和实践,查看里一些资料之后觉得 docker 涉及到的技术太多了,从 linux 内核到各种云计算的解决方案,对于我来说实在是难。

docker起源,发展,:(history)

(它是怎么火起来的)

起源于一家dotcloud 公司,后改名docker ,docker 是开源的一个基于LXC 的高级容器引擎,源代码托管在 GitHub 上,它使用开源驱动的方式来发展,它的成功缘于国外成熟的开源文化氛围以及可借鉴的社区运营经验

Docker在推广上主要是将开源社区和社交网络作为基础推广平台,结合全球范围的Docker技术聚会,形成了良好的良性的客户互动和口口相传的品牌效应

Docker第一步是向GitHub上提交自己的代码开始吸引自己的用户。Solomon Hykes在拼命的实现心中那个目标:让LXC创建的容器更容易使用,我们可以看到只有保证项目的活跃度(持续贡献代码)那么项目才有可能获得用户的认可和关注。试想,“三天打鱼,两天晒网”的开源项目会给用户怎么样的感觉?作者都不专注,用户怎么可能忠实?这种投入,并不是偶然性的,这是国外业界的开源文化,非常值得我们学习。

创建合作伙伴生态圈

google,redhat (并且它支持的Fedora社区、CentOS社区会对推广Docker技术起到关键性作用 )

OpenStack的建立者Rackspace,在混合云解决方案上具有全球领导地位,Docker与它的合作,可以帮助Docker技术在混合云的解决方案中得到推广。

扫描二维码关注公众号,回复: 3725464 查看本文章
最后就是开源PaaS项目DEIS,基于Docker和CoreOS技术构建的类如Heroku发布流程的PaaS应用。与它的合作,可以让更多的企业看到一个使用Docker技术的范本。

http://www.infoq.com/cn/articles/docker-open-source-road/

what is it ?

0.什么是docker

那么,docker 究竟是什么?docker 是一个基于LXC 的高级容器引擎。听起来是不是不知道在说什么?简单地说,docker 是一个轻量级的虚拟解决方案,或者说 —— 一个超轻量级的虚拟机。你一定理解虚拟机是什么,那么,你现在可以认为 docker 是一个秒级启动的虚拟机,可以轻易创建和删除.

我们会经常看到这个 docker 的图,它告诉我们,docker 是一种集装箱式的工作方式。正如我们会将各种不同的货物统一打包成一个个集装箱,进行标准的管理和运输,在 docker 的世界里,我们把应用和应用所依赖的运行环境打包成一个个 image,然后分发到任意支持 docker 的平台,就可以在这些平台运行我们的应用,提供服务。
那支持 docker 的平台有哪些?因为 docker 是基于 linux 的,在任意的 linux 发行版我们都可以原生地支持 docker,只要对应的内核版本大于 3.10 并且是 64bit,而在 Windows 和 Mac 中,我们可以通过 boot2docker 来运行 docker,这几乎意味着,所有的主流平台都支持 docker 的运行 —— 从此你不再需要为跨平台而苦恼

docker vs  vm

vm 的理念是在宿主的系统之上,自己虚拟了一个硬件平台,然后运行一个不同的 OS。这意味着它要求很多的资源,在一台机器上,你最多就跑几个虚拟机吧。

而 docker 是依托于宿主机提供的内核,仅仅把一个不同的 linux 发行版本所需的特性打包成一个 image, 这样子当你运行一个 ubuntu 镜像,你会感觉就是在一个 ubuntu 的操作环境里,但实际调用的系统接口都是来源于宿主机。所以当你运行一些内核相关的命令时,你就会发现一些端倪,比如 uname -a, 这时给出的信息肯定是宿主机的。

因为共用宿主机的内核,所以 docker 所需的资源也很少,性能开销很小,通常可以在秒内启动,有些已经可以做到毫秒内启动了。在一台机器上,你完全可能做到同时运行上千个 docker 的容器。

docker 的运行方式也让我们对 VM 的理念产生质疑,假如我们需要虚拟一个不同的运行环境,是否需要一个完全新的系统?其实我们要的只是运行一个应用所需的依赖环境,不是吗?

总的来说,docker 抛弃传统 VM 试图模拟完整机器的思路,本着“面向应用”的核心理念,以应用为单元进行”集装封箱”。

docker vs lxc

LXC 是什么?LXC 就是 Linux Container,官网。 LXC 也是一种轻量的虚拟技术,Linux 原生支持的容器。可以说 docker 就是基于 LXC 发展起来的,提供 LXC 的高级封装,发展标准的配置方法。

LXC 的定位是替代传统的虚拟机,侧重于提供一个个操作系统,如 Ubuntu、Debian等。Docker 是面向应用的,官方提倡一个容器即是一个应用,以应用为中心。所以,docker 还提供了统一的打包部署方案,即 Dockerfile, 还有版本控制,image 复用,远程仓库以供镜像共享等。
可以说,LXC 只是 Docker 的底层技术之一


Docker 在解决什么



看到这里,你应该对 docker 在解决的问题有一些模糊的概念,我们不妨总结一下:

  1. 简化配置。在容器中开发完成后快速部署于各主流系统,解决了地狱依赖问题,再也没有了“在我电脑明明可以运行”的情况。
  2. 机器资源利用率的提高,不需要为虚拟一个环境而耗费大量资源。
  3. 改变了传统应用交付的方式,软件的开发和管理从部门间的装配和调试转换为部件的简单替换。
  4. 软件的管理和共享从代码层次向应用层次上升。
也许以后 docker 成为了新的软件管理模式,我们不会再看到开发人员为每个不同发行版本编写配置文件,处理复杂的系统依赖。无论我们需要什么服务,我们只需要安装 docker,然后 pull 一个镜像到本地就可以了。事实上,我们已经开始看到这种趋势了,毕竟 docker 作为开发和测试来说都太方便了。
docker更进一步,它提供了image/container机制,用户可以很简单的将某些基础设施固化,比如以小团队或者以语言/框架 技术栈为单位建立基础镜像,然后各团队叠加自己的业务代码,这样做节约了时间,也就意味着可能将这种环境管理能力从线上扩展到线下

由于其基于LXC的轻量级虚拟化的特点,docker相比KVM之类最明显的特点就是启动快,资源占用小。因此对于构建隔离的标准化的运行环境,轻量级的PaaS(如dokku), 构建自动化测试和持续集成环境,以及一切可以横向扩展的应用(尤其是需要快速启停来应对峰谷的web应用)

docker之所以如此受到开发者关注的另外一个重要原因是启动docker的系统代价比启动一台虚拟机的代价要低得多:无论从启动时间还是从启动资源耗费角度来说。docker直接利用宿主机的系统内核,避免了虚拟机启动时所需的系统引导时间和操作系统运行的资源消耗。利用docker能在几秒钟之内启动大量的容器,这是虚拟机无法办到的。快速启动、低系统资源消耗的优点使docker在弹性云平台和自动运维系统方面有着很好的应用前景。


1.docker 里面的四个概念 和安装

镜像:docker 镜像 类似于虚拟机镜像,可以理解为只读模板,包含文件系统,镜像可以是一个完整的os 环境也可以是安装里自己需要的其他应用软件。镜像是创建docker容器的基础,通过版本管理和增量到文件系统,可以从网上直接下载一个已经做好的应用镜像,然后使用。

容器:类似于一个轻量级的沙箱,docker利用容器来运行应用,隔离应用。容器是从镜像创建的应用运行实例,可以start,stop,remove,容器之间相互隔离,互不可见。可以理解为一个linux系统环境以及运行其中的应用程序打包而成的应用盒子

仓库:集中存放镜像文件的地方,镜像文件是否公开分享分为公开仓库和私有仓库,最大到公开仓库 docker hub,存放着很多镜像供用户下载,国内的公开仓库包括docker pool

用户可以自己建立一个自己使用到私有仓库,自己建完镜像之后PUsh到公开仓库中或私有仓库中,下次在不同机器上使用镜像时,只需要pull下来即可。

注册服务器:是存放仓库的地方,存放多个仓库,每个仓库存放一类镜像,包含多个镜像文件

画图

docker安装

docker 支持 centos 6 及以上,redhat 7,ubantu 14.04 以上,win 7,win 8 .win 10 暂时不支持

centos6 安装示例,centos 系统可使用epel 库安装docker

sudo yum install -y http://mirrors.yun-idc.com/epel/6/i386/epel-release-6-8.noarch.rpm

sudo yum install -y docker.io.

centos 7 系统内置docker ,可以直接使用yum 命令安装

sudo yum install -y docker.io

1.

2.

1.docker 添加私有仓库 到配置文件

/etc/sysconfig/docker file 中

例如添加 tibco私有仓库 到文件中为

other_args="--exec-driver=lxc --selinux-enabled --insecure-registry drepo.tibco-support.com --insecure-registry 192.168.74.22:5000"

2 docker image 列出本地已有到镜像

https://www.docker.com/



centos6.x安装:
#wget http://mirrors.ustc.edu.cn/fedora/epel/6/i386/epel-release-6-8.noarch.rpm
#wget http://mirrors.ustc.edu.cn/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
#wget   http://mirrors.ustc.edu.cn/fedora/epel/7/x86_64/e/epel-release-7-5.noarch.rpm

#或者在这里找相应的epel文件http://mirrors.ustc.edu.cn/fedora/epel/

#---------------------------------------------

yum install   docker-io
usermod  -G docker  $USER
service  docker  start
chkconfig  docker  on
#docker 下载centos镜像
docker  pull   centos   #下载centos所有的镜像
docker  pull   centos:centos6    下载centos6镜像

#docker 下ubutu镜像包:
docker  pull   ubuntu   #下载ubuntu所有的镜像
docker  pull   ubuntu:14.10    下载ubuntu14.10镜像

#查看本机所有的镜像包:
docker  images

#docker运行镜像:
docker run  -it   centos  /bin/bash
docker run  -it   centos:centos6  /bin/bash   echo 'hello  jk409!'

在镜像里输入exit,就退出并停止运行

#docker构建新的镜像:
docker build  -t  centos6:memcached    ./memcached              #./memcached目录下有Dockerfile文件

#docker运行新的镜像:
docker run  -d -p 11211:11211  centos6:memcached 

#docker停止后台运行的镜像 
docker stop/kill    (container_id)
#docker  stop  `docker  ps|grep  memcached |awk  { 'print  $1'}`

猜你喜欢

转载自blog.csdn.net/hushunhuadao/article/details/50571557