第1页
Docker 技术介绍
黑洞 heidsoft@sina.com
第2页
内容简要
Docker生态系统 什么是Docker Docker应用场景 Docker总架构图 Docker On LinuX Docker 的特征 Docker 组件与元素 Docker 工作方式 Docker下的开发模式 参考资料
第3页
Docker生态系统
第6页
什么是Docker?
第7页
English interpretation
Docker is an open platform for developers and sysadmins to build, ship, and run distributed applications. Consisting of Docker Engine, a portable, lightweight runtime and packaging tool, and Docker Hub, a cloud service for sharing applications and automating workflows, Docker enables apps to be quickly assembled from components and eliminates the friction between development, QA, and production environments. As a result, IT can ship faster and run the same app, unchanged, on laptops, data center VMs, and any cloud.
第8页
中文解释
Docker是Docker公司开源的一个基于轻量级虚拟化技术的容器引擎项目,整个项目基于 Go语言开发,并遵从Apache 2.0协议。
目前,Docker可以在容器内部快速自动化部署应用,并可以通过内核虚拟化技术 (namespaces及cgroups等)来提供容器的资源隔离与安全保障等。
由于Docker通过操作系统层的虚拟化实现隔离,所以Docker容器在运行时,不需要类 似虚拟机(VM)额外的操作系统开销,提高资源利用率,并且提升诸如IO等方面的性能。
第9页
Docker应用场景
第10页
web应用的自动化打包和发布
自动化测试和持续集成、发布
在服务型环境中部署和调整数据库或其他的后台应用
从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。
第11页
Docker总架构图
第12页
Layered FS
Docker LXC(Linux Containers)
Cgroup
Namespace
Linux Kernel
第13页
Docker On LinuX
第15页
Docker 的特征
第16页
Docker有不少有趣的功能,Docker特性主要包括以下几点: 速度飞快以及优雅的隔离框架 物美价廉 CPU/内存的低消耗 快速开/关机 跨云计算基础架构
第17页
Docker 组件与元素
第18页
三个基本组件
Docker Client 是用户界面,它支持用户与Docker Daemon之间通信。
Docker Daemon运行于主机上,处理服务请求。
Docker Index是中央registry,支持拥有公有与私有访问权限的Docker容器镜像的备份
第19页
三个基本元素
Docker Containers负责应用程序的运行,包括操作系统、用户添加的文件以及元数据。
Docker Images是一个只读模板,用来运行Docker容器。
DockerFile是文件指令集,用来说明如何自动创建Docker镜像。
第20页
Docker 工作方式
第22页
Docker的支柱
Docker通过作系统如下功能来提高容器技术效率 Namespaces 充当隔离的第一级。确保一个容器中运行一个进程而且不能看到或影
响容器外的其它进程。 Control Groups是LXC的重要组成部分,具有资源核算与限制的关键功能。 UnionFS(文件系统))作为容器的构建块。为了支持Docker的轻量级以及速度快的
特性,它创建层与用户。
第23页
Docker如何运行APP
构建一个镜像。 运行容器。
这些步骤的都是从Docker Client的命令开始的。Docker Client使用的是Docker 二进制文件。在基础层面上,Docker Client会告诉Docker Daemon需要创建的镜像 以及需要在容器内运行的命令。当Daemon收到创建镜像的信号后,会进行如下操作
第24页
第1步:构建镜像
如前面所述,Docker Image是一个构建容器的只读模板,它包含了容器启动所需 的所有信息,包括运行哪些进程和配置数据。 所有的镜像都会基于一个基本镜像构建,紧接着会根据Dockerfile中的指令创建 模板,对于每个指令,在镜像上创建一个新的层。
一旦镜像创建完成,就可以将它们推送到中央registry:Docker Index,以供他 人使用。然而,Docker Index为镜像提供了两个级别的访问权限:公有和私有访 问。您可以将镜像存储在私有仓库。Docker官网有私有仓库的套餐可以供你选择。 总之,公有库是可搜索和可重复使用的,而私有库只能给拥有权限的成员访问。 Docker Client可用于Docker Index内的镜像搜索。
第25页
第2步:运行容器
运行容器源于我们在第一步中创建的镜像。当一个容器被启动后,一个读写层会被 添加到镜像的顶层。当分配合适的网络和IP地址后,最应用程序就可以在容器中运 行了。 如果你还是有点不解,先别急,在接下来的内容中我们会和你分享很多的实战案例。 目前为止,我们已经介绍了Docker的基本概念,接下来,让我们一起安装Docker!
第26页
安装Docker
Ubuntu
1、更新Ubuntu内核 使用如下命令行更新内核至3.8.0-25 sudo apt-get install linux-image-3.8.0-25-generic sudo apt-get install linux-headers-3.8.0-25-generic 完成后重启电脑,通过命令 “uname -r” 来查看内核是否成功更新。
2、安装lxc-docker root@ubuntu: sudo apt-get install software-properties-common #增加 add-aptrepository 命令 root@ubuntu: sudo apt-get install python-software-properties root@ubuntu: sudo add-apt-repository ppa:dotcloud/lxc-docker #增加一个ppa源, 如:ppa:user/ppa-name root@ubuntu: sudo apt-get update #更新系统 root@ubuntu: sudo apt-get install lxc-docker
第27页
安装Docker
CentOS7 Docker 软件包已经包括在默认的 CentOS-Extras 软件源里。因此想要安装 docker,只需要运 行下面的 yum 命令:
[root@localhost ~]# yum install docker 启动 Docker 服务 安装完成后,使用下面的命令来启动 docker 服务,并将其设置为开机启动:
[root@localhost ~]# service docker start [root@localhost ~]# chkconfig docker on (LCTT 译注:此处采用了旧式的 sysv 语法,如采用CentOS 7中支持的新式 systemd 语法,如 下:
[root@localhost ~]# systemctl start docker.service [root@localhost ~]# systemctl enable docker.service
第28页
Docker 启动
第29页
Docker version
Docker系统有两个程序:docker服务端和docker客户端。其中docker服务 端是一个服务进程,管理着所有的容器。docker客户端则扮演着docker服务 端的远程控制器,可以用来控制docker的服务端进程。大部分情况下, docker服务端和客户端运行在一台机器上。
第30页
Docker images
列出当前可用的镜像
第31页
Docker 下载容器镜像
下载镜像的命令非常简单,使用docker pull命令即可。(译者按:docker命令 和git有一些类似的地方)。在docker的镜像索引网站上面,镜像都是按照用户 名/镜像名的方式来存储的。有一组比较特殊的镜像,比如ubuntu这类基础镜像, 经过官方的验证,值得信任,可以直接用镜像名来检索到。
第32页
docker容器的hello world!
在docker容器中运行hello world! docker容器可以理解为在沙盒中运行的进程。这个沙盒包含了该进程运行所必须的 资源,包括文件系统、系统类库、shell 环境等等。但这个沙盒默认是不会运行任何程 序的。你需要在沙盒中运行一个进程来启动某一个容器。这个进程是该容器的唯一进程, 所以当该进程结束的时候,容器也会完全的停止。
第33页
Docker on LXC
LXC is a userspace interface for the Linux kernel containment features. Through a powerful API and simple tools, it lets Linux users easily create and manage system or application containers.
LXC是Linux内核的用户空间接口控制功能。通过一个强大的API和简单的 工具,它允许Linux用户轻松地创建和管理系统或应用程序的容器。
第34页
Docker VS VM
第36页
Docker下的开发模式
共享基础容器 共享卷(Volume)开发容器 开发工具容器 不同环境下的测试容器 构建容器 安装容器 整合默认服务(Default-Service-In-A-Box)的容器和基础设施/粘合(Glue)
容器
http://www.hokstad.com/docker/patterns
第37页
参考资料
https://www.docker.io/ https://github.com/dotcloud/docker http://bit.ly/dockersources http://lwn.net/Articles/199643/ http://lwn.net/Articles/236038/ http://en.wikipedia.org/wiki/Operating_system-level_virtualization https://linuxcontainers.org/ http://en.wikipedia.org/wiki/Cgroups http://en.wikipedia.org/wiki/Aufs